daws.f 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. *DECK DAWS
  2. FUNCTION DAWS (X)
  3. C***BEGIN PROLOGUE DAWS
  4. C***PURPOSE Compute Dawson's function.
  5. C***LIBRARY SLATEC (FNLIB)
  6. C***CATEGORY C8C
  7. C***TYPE SINGLE PRECISION (DAWS-S, DDAWS-D)
  8. C***KEYWORDS DAWSON'S FUNCTION, FNLIB, SPECIAL FUNCTIONS
  9. C***AUTHOR Fullerton, W., (LANL)
  10. C***DESCRIPTION
  11. C
  12. C DAWS(X) calculates Dawson's integral for real argument X.
  13. C
  14. C Series for DAW on the interval 0. to 1.00000D+00
  15. C with weighted error 3.83E-17
  16. C log weighted error 16.42
  17. C significant figures required 15.78
  18. C decimal places required 16.97
  19. C
  20. C Series for DAW2 on the interval 0. to 1.60000D+01
  21. C with weighted error 5.17E-17
  22. C log weighted error 16.29
  23. C significant figures required 15.90
  24. C decimal places required 17.02
  25. C
  26. C Series for DAWA on the interval 0. to 6.25000D-02
  27. C with weighted error 2.24E-17
  28. C log weighted error 16.65
  29. C significant figures required 14.73
  30. C decimal places required 17.36
  31. C
  32. C***REFERENCES (NONE)
  33. C***ROUTINES CALLED CSEVL, INITS, R1MACH, XERMSG
  34. C***REVISION HISTORY (YYMMDD)
  35. C 780401 DATE WRITTEN
  36. C 890531 Changed all specific intrinsics to generic. (WRB)
  37. C 890531 REVISION DATE from Version 3.2
  38. C 891214 Prologue converted to Version 4.0 format. (BAB)
  39. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  40. C 920618 Removed space from variable names. (RWC, WRB)
  41. C***END PROLOGUE DAWS
  42. DIMENSION DAWCS(13), DAW2CS(29), DAWACS(26)
  43. LOGICAL FIRST
  44. SAVE DAWCS, DAW2CS, DAWACS, NTDAW, NTDAW2, NTDAWA,
  45. 1 XSML, XBIG, XMAX, FIRST
  46. DATA DAWCS( 1) / -.0063517343 75145949E0 /
  47. DATA DAWCS( 2) / -.2294071479 6773869E0 /
  48. DATA DAWCS( 3) / .0221305009 39084764E0 /
  49. DATA DAWCS( 4) / -.0015492654 53892985E0 /
  50. DATA DAWCS( 5) / .0000849732 77156849E0 /
  51. DATA DAWCS( 6) / -.0000038282 66270972E0 /
  52. DATA DAWCS( 7) / .0000001462 85480625E0 /
  53. DATA DAWCS( 8) / -.0000000048 51982381E0 /
  54. DATA DAWCS( 9) / .0000000001 42146357E0 /
  55. DATA DAWCS(10) / -.0000000000 03728836E0 /
  56. DATA DAWCS(11) / .0000000000 00088549E0 /
  57. DATA DAWCS(12) / -.0000000000 00001920E0 /
  58. DATA DAWCS(13) / .0000000000 00000038E0 /
  59. DATA DAW2CS( 1) / -.0568865441 05215527E0 /
  60. DATA DAW2CS( 2) / -.3181134699 6168131E0 /
  61. DATA DAW2CS( 3) / .2087384541 3642237E0 /
  62. DATA DAW2CS( 4) / -.1247540991 3779131E0 /
  63. DATA DAW2CS( 5) / .0678693051 86676777E0 /
  64. DATA DAW2CS( 6) / -.0336591448 95270940E0 /
  65. DATA DAW2CS( 7) / .0152607812 71987972E0 /
  66. DATA DAW2CS( 8) / -.0063483709 62596214E0 /
  67. DATA DAW2CS( 9) / .0024326740 92074852E0 /
  68. DATA DAW2CS(10) / -.0008621954 14910650E0 /
  69. DATA DAW2CS(11) / .0002837657 33363216E0 /
  70. DATA DAW2CS(12) / -.0000870575 49874170E0 /
  71. DATA DAW2CS(13) / .0000249868 49985481E0 /
  72. DATA DAW2CS(14) / -.0000067319 28676416E0 /
  73. DATA DAW2CS(15) / .0000017078 57878557E0 /
  74. DATA DAW2CS(16) / -.0000004091 75512264E0 /
  75. DATA DAW2CS(17) / .0000000928 28292216E0 /
  76. DATA DAW2CS(18) / -.0000000199 91403610E0 /
  77. DATA DAW2CS(19) / .0000000040 96349064E0 /
  78. DATA DAW2CS(20) / -.0000000008 00324095E0 /
  79. DATA DAW2CS(21) / .0000000001 49385031E0 /
  80. DATA DAW2CS(22) / -.0000000000 26687999E0 /
  81. DATA DAW2CS(23) / .0000000000 04571221E0 /
  82. DATA DAW2CS(24) / -.0000000000 00751873E0 /
  83. DATA DAW2CS(25) / .0000000000 00118931E0 /
  84. DATA DAW2CS(26) / -.0000000000 00018116E0 /
  85. DATA DAW2CS(27) / .0000000000 00002661E0 /
  86. DATA DAW2CS(28) / -.0000000000 00000377E0 /
  87. DATA DAW2CS(29) / .0000000000 00000051E0 /
  88. DATA DAWACS( 1) / .0169048563 7765704E0 /
  89. DATA DAWACS( 2) / .0086832522 7840695E0 /
  90. DATA DAWACS( 3) / .0002424864 0424177E0 /
  91. DATA DAWACS( 4) / .0000126118 2399572E0 /
  92. DATA DAWACS( 5) / .0000010664 5331463E0 /
  93. DATA DAWACS( 6) / .0000001358 1597947E0 /
  94. DATA DAWACS( 7) / .0000000217 1042356E0 /
  95. DATA DAWACS( 8) / .0000000028 6701050E0 /
  96. DATA DAWACS( 9) / -.0000000001 9013363E0 /
  97. DATA DAWACS(10) / -.0000000003 0977804E0 /
  98. DATA DAWACS(11) / -.0000000001 0294148E0 /
  99. DATA DAWACS(12) / -.0000000000 0626035E0 /
  100. DATA DAWACS(13) / .0000000000 0856313E0 /
  101. DATA DAWACS(14) / .0000000000 0303304E0 /
  102. DATA DAWACS(15) / -.0000000000 0025236E0 /
  103. DATA DAWACS(16) / -.0000000000 0042106E0 /
  104. DATA DAWACS(17) / -.0000000000 0004431E0 /
  105. DATA DAWACS(18) / .0000000000 0004911E0 /
  106. DATA DAWACS(19) / .0000000000 0001235E0 /
  107. DATA DAWACS(20) / -.0000000000 0000578E0 /
  108. DATA DAWACS(21) / -.0000000000 0000228E0 /
  109. DATA DAWACS(22) / .0000000000 0000076E0 /
  110. DATA DAWACS(23) / .0000000000 0000038E0 /
  111. DATA DAWACS(24) / -.0000000000 0000011E0 /
  112. DATA DAWACS(25) / -.0000000000 0000006E0 /
  113. DATA DAWACS(26) / .0000000000 0000002E0 /
  114. DATA FIRST /.TRUE./
  115. C***FIRST EXECUTABLE STATEMENT DAWS
  116. IF (FIRST) THEN
  117. EPS = R1MACH(3)
  118. NTDAW = INITS (DAWCS, 13, 0.1*EPS)
  119. NTDAW2 = INITS (DAW2CS, 29, 0.1*EPS)
  120. NTDAWA = INITS (DAWACS, 26, 0.1*EPS)
  121. C
  122. XSML = SQRT (1.5*EPS)
  123. XBIG = SQRT (0.5/EPS)
  124. XMAX = EXP (MIN (-LOG(2.*R1MACH(1)), LOG(R1MACH(2))) - 1.0)
  125. ENDIF
  126. FIRST = .FALSE.
  127. C
  128. Y = ABS(X)
  129. IF (Y.GT.1.0) GO TO 20
  130. C
  131. DAWS = X
  132. IF (Y.LE.XSML) RETURN
  133. C
  134. DAWS = X * (0.75 + CSEVL (2.0*Y*Y-1.0, DAWCS, NTDAW))
  135. RETURN
  136. C
  137. 20 IF (Y.GT.4.0) GO TO 30
  138. DAWS = X * (0.25 + CSEVL (0.125*Y*Y-1.0, DAW2CS, NTDAW2))
  139. RETURN
  140. C
  141. 30 IF (Y.GT.XMAX) GO TO 40
  142. DAWS = 0.5/X
  143. IF (Y.GT.XBIG) RETURN
  144. C
  145. DAWS = (0.5 + CSEVL (32.0/Y**2-1.0, DAWACS, NTDAWA)) / X
  146. RETURN
  147. C
  148. 40 CALL XERMSG ('SLATEC', 'DAWS', 'ABS(X) SO LARGE DAWS UNDERFLOWS',
  149. + 1, 1)
  150. DAWS = 0.0
  151. RETURN
  152. C
  153. END