d9lgic.f 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. *DECK D9LGIC
  2. DOUBLE PRECISION FUNCTION D9LGIC (A, X, ALX)
  3. C***BEGIN PROLOGUE D9LGIC
  4. C***SUBSIDIARY
  5. C***PURPOSE Compute the log complementary incomplete Gamma function
  6. C for large X and for A .LE. X.
  7. C***LIBRARY SLATEC (FNLIB)
  8. C***CATEGORY C7E
  9. C***TYPE DOUBLE PRECISION (R9LGIC-S, D9LGIC-D)
  10. C***KEYWORDS COMPLEMENTARY INCOMPLETE GAMMA FUNCTION, FNLIB, LARGE X,
  11. C LOGARITHM, SPECIAL FUNCTIONS
  12. C***AUTHOR Fullerton, W., (LANL)
  13. C***DESCRIPTION
  14. C
  15. C Compute the log complementary incomplete gamma function for large X
  16. C and for A .LE. X.
  17. C
  18. C***REFERENCES (NONE)
  19. C***ROUTINES CALLED D1MACH, XERMSG
  20. C***REVISION HISTORY (YYMMDD)
  21. C 770701 DATE WRITTEN
  22. C 890531 Changed all specific intrinsics to generic. (WRB)
  23. C 890531 REVISION DATE from Version 3.2
  24. C 891214 Prologue converted to Version 4.0 format. (BAB)
  25. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  26. C 900720 Routine changed from user-callable to subsidiary. (WRB)
  27. C***END PROLOGUE D9LGIC
  28. DOUBLE PRECISION A, X, ALX, EPS, FK, P, R, S, T, XMA, XPA, D1MACH
  29. SAVE EPS
  30. DATA EPS / 0.D0 /
  31. C***FIRST EXECUTABLE STATEMENT D9LGIC
  32. IF (EPS.EQ.0.D0) EPS = 0.5D0*D1MACH(3)
  33. C
  34. XPA = X + 1.0D0 - A
  35. XMA = X - 1.D0 - A
  36. C
  37. R = 0.D0
  38. P = 1.D0
  39. S = P
  40. DO 10 K=1,300
  41. FK = K
  42. T = FK*(A-FK)*(1.D0+R)
  43. R = -T/((XMA+2.D0*FK)*(XPA+2.D0*FK)+T)
  44. P = R*P
  45. S = S + P
  46. IF (ABS(P).LT.EPS*S) GO TO 20
  47. 10 CONTINUE
  48. CALL XERMSG ('SLATEC', 'D9LGIC',
  49. + 'NO CONVERGENCE IN 300 TERMS OF CONTINUED FRACTION', 1, 2)
  50. C
  51. 20 D9LGIC = A*ALX - X + LOG(S/XPA)
  52. C
  53. RETURN
  54. END