r9chu.f 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. *DECK R9CHU
  2. FUNCTION R9CHU (A, B, Z)
  3. C***BEGIN PROLOGUE R9CHU
  4. C***SUBSIDIARY
  5. C***PURPOSE Evaluate for large Z Z**A * U(A,B,Z) where U is the
  6. C logarithmic confluent hypergeometric function.
  7. C***LIBRARY SLATEC (FNLIB)
  8. C***CATEGORY C11
  9. C***TYPE SINGLE PRECISION (R9CHU-S, D9CHU-D)
  10. C***KEYWORDS FNLIB, LOGARITHMIC CONFLUENT HYPERGEOMETRIC FUNCTION,
  11. C SPECIAL FUNCTIONS
  12. C***AUTHOR Fullerton, W., (LANL)
  13. C***DESCRIPTION
  14. C
  15. C Evaluate for large Z Z**A * U(A,B,Z) where U is the logarithmic
  16. C confluent hypergeometric function. A rational approximation due to Y.
  17. C L. Luke is used. When U is not in the asymptotic region, i.e., when A
  18. C or B is large compared with Z, considerable significance loss occurs.
  19. C A warning is provided when the computed result is less than half
  20. C precision.
  21. C
  22. C***REFERENCES (NONE)
  23. C***ROUTINES CALLED R1MACH, XERMSG
  24. C***REVISION HISTORY (YYMMDD)
  25. C 770801 DATE WRITTEN
  26. C 890206 REVISION DATE from Version 3.2
  27. C 891214 Prologue converted to Version 4.0 format. (BAB)
  28. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  29. C 900720 Routine changed from user-callable to subsidiary. (WRB)
  30. C***END PROLOGUE R9CHU
  31. DIMENSION AA(4), BB(4)
  32. LOGICAL FIRST
  33. SAVE EPS, SQEPS, FIRST
  34. DATA FIRST /.TRUE./
  35. C***FIRST EXECUTABLE STATEMENT R9CHU
  36. IF (FIRST) THEN
  37. EPS = 4.0*R1MACH(4)
  38. SQEPS = SQRT (R1MACH(4))
  39. ENDIF
  40. FIRST = .FALSE.
  41. C
  42. BP = 1.0 + A - B
  43. AB = A*BP
  44. CT2 = 2.0*(Z-AB)
  45. SAB = A + BP
  46. C
  47. BB(1) = 1.0
  48. AA(1) = 1.0
  49. C
  50. CT3 = SAB + 1.0 + AB
  51. BB(2) = 1.0 + 2.0*Z/CT3
  52. AA(2) = 1.0 + CT2/CT3
  53. C
  54. ANBN = CT3 + SAB + 3.0
  55. CT1 = 1.0 + 2.0*Z/ANBN
  56. BB(3) = 1.0 + 6.0*CT1*Z/CT3
  57. AA(3) = 1.0 + 6.0*AB/ANBN + 3.0*CT1*CT2/CT3
  58. C
  59. DO 30 I=4,300
  60. X2I1 = 2*I - 3
  61. CT1 = X2I1/(X2I1-2.0)
  62. ANBN = ANBN + X2I1 + SAB
  63. CT2 = (X2I1 - 1.0) / ANBN
  64. C2 = X2I1*CT2 - 1.0
  65. D1Z = X2I1*2.0*Z/ANBN
  66. C
  67. CT3 = SAB*CT2
  68. G1 = D1Z + CT1*(C2+CT3)
  69. G2 = D1Z - C2
  70. G3 = CT1*(1.0 - CT3 - 2.0*CT2)
  71. C
  72. BB(4) = G1*BB(3) + G2*BB(2) + G3*BB(1)
  73. AA(4) = G1*AA(3) + G2*AA(2) + G3*AA(1)
  74. IF (ABS(AA(4)*BB(1)-AA(1)*BB(4)).LT.EPS*ABS(BB(4)*BB(1)))
  75. 1 GO TO 40
  76. C
  77. C IF OVERFLOWS OR UNDERFLOWS PROVE TO BE A PROBLEM, THE STATEMENTS
  78. C BELOW COULD BE ALTERED TO INCORPORATE A DYNAMICALLY ADJUSTED SCALE
  79. C FACTOR.
  80. C
  81. DO 20 J=1,3
  82. BB(J) = BB(J+1)
  83. AA(J) = AA(J+1)
  84. 20 CONTINUE
  85. 30 CONTINUE
  86. CALL XERMSG ('SLATEC', 'R9CHU', 'NO CONVERGENCE IN 300 TERMS', 1,
  87. + 2)
  88. C
  89. 40 R9CHU = AA(4)/BB(4)
  90. C
  91. IF (R9CHU .LT. SQEPS .OR. R9CHU .GT. 1.0/SQEPS) CALL XERMSG
  92. + ('SLATEC', 'R9CHU', 'ANSWER LESS THAN HALF PRECISION', 2, 1)
  93. C
  94. RETURN
  95. END