ai.f 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. *DECK AI
  2. FUNCTION AI (X)
  3. C***BEGIN PROLOGUE AI
  4. C***PURPOSE Evaluate the Airy function.
  5. C***LIBRARY SLATEC (FNLIB)
  6. C***CATEGORY C10D
  7. C***TYPE SINGLE PRECISION (AI-S, DAI-D)
  8. C***KEYWORDS AIRY FUNCTION, FNLIB, SPECIAL FUNCTIONS
  9. C***AUTHOR Fullerton, W., (LANL)
  10. C***DESCRIPTION
  11. C
  12. C AI(X) computes the Airy function Ai(X)
  13. C Series for AIF on the interval -1.00000D+00 to 1.00000D+00
  14. C with weighted error 1.09E-19
  15. C log weighted error 18.96
  16. C significant figures required 17.76
  17. C decimal places required 19.44
  18. C
  19. C Series for AIG on the interval -1.00000D+00 to 1.00000D+00
  20. C with weighted error 1.51E-17
  21. C log weighted error 16.82
  22. C significant figures required 15.19
  23. C decimal places required 17.27
  24. C
  25. C***REFERENCES (NONE)
  26. C***ROUTINES CALLED AIE, CSEVL, INITS, R1MACH, R9AIMP, XERMSG
  27. C***REVISION HISTORY (YYMMDD)
  28. C 770701 DATE WRITTEN
  29. C 890531 Changed all specific intrinsics to generic. (WRB)
  30. C 890531 REVISION DATE from Version 3.2
  31. C 891214 Prologue converted to Version 4.0 format. (BAB)
  32. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  33. C 900326 Removed duplicate information from DESCRIPTION section.
  34. C (WRB)
  35. C 920618 Removed space from variable names. (RWC, WRB)
  36. C***END PROLOGUE AI
  37. DIMENSION AIFCS(9), AIGCS(8)
  38. LOGICAL FIRST
  39. SAVE AIFCS, AIGCS, NAIF, NAIG, X3SML, XMAX, FIRST
  40. DATA AIFCS( 1) / -.0379713584 9666999750E0 /
  41. DATA AIFCS( 2) / .0591918885 3726363857E0 /
  42. DATA AIFCS( 3) / .0009862928 0577279975E0 /
  43. DATA AIFCS( 4) / .0000068488 4381907656E0 /
  44. DATA AIFCS( 5) / .0000000259 4202596219E0 /
  45. DATA AIFCS( 6) / .0000000000 6176612774E0 /
  46. DATA AIFCS( 7) / .0000000000 0010092454E0 /
  47. DATA AIFCS( 8) / .0000000000 0000012014E0 /
  48. DATA AIFCS( 9) / .0000000000 0000000010E0 /
  49. DATA AIGCS( 1) / .0181523655 8116127E0 /
  50. DATA AIGCS( 2) / .0215725631 6601076E0 /
  51. DATA AIGCS( 3) / .0002567835 6987483E0 /
  52. DATA AIGCS( 4) / .0000014265 2141197E0 /
  53. DATA AIGCS( 5) / .0000000045 7211492E0 /
  54. DATA AIGCS( 6) / .0000000000 0952517E0 /
  55. DATA AIGCS( 7) / .0000000000 0001392E0 /
  56. DATA AIGCS( 8) / .0000000000 0000001E0 /
  57. DATA FIRST /.TRUE./
  58. C***FIRST EXECUTABLE STATEMENT AI
  59. IF (FIRST) THEN
  60. NAIF = INITS (AIFCS, 9, 0.1*R1MACH(3))
  61. NAIG = INITS (AIGCS, 8, 0.1*R1MACH(3))
  62. C
  63. X3SML = R1MACH(3)**0.3334
  64. XMAXT = (-1.5*LOG(R1MACH(1)))**0.6667
  65. XMAX = XMAXT - XMAXT*LOG(XMAXT)/
  66. * (4.0*SQRT(XMAXT)+1.0) - 0.01
  67. ENDIF
  68. FIRST = .FALSE.
  69. C
  70. IF (X.GE.(-1.0)) GO TO 20
  71. CALL R9AIMP (X, XM, THETA)
  72. AI = XM * COS(THETA)
  73. RETURN
  74. C
  75. 20 IF (X.GT.1.0) GO TO 30
  76. Z = 0.0
  77. IF (ABS(X).GT.X3SML) Z = X**3
  78. AI = 0.375 + (CSEVL (Z, AIFCS, NAIF) - X*(0.25 +
  79. 1 CSEVL (Z, AIGCS, NAIG)) )
  80. RETURN
  81. C
  82. 30 IF (X.GT.XMAX) GO TO 40
  83. AI = AIE(X) * EXP(-2.0*X*SQRT(X)/3.0)
  84. RETURN
  85. C
  86. 40 AI = 0.0
  87. CALL XERMSG ('SLATEC', 'AI', 'X SO BIG AI UNDERFLOWS', 1, 1)
  88. RETURN
  89. C
  90. END