3111
|
1 *DECK D9LGIT |
|
2 DOUBLE PRECISION FUNCTION D9LGIT (A, X, ALGAP1) |
|
3 C***BEGIN PROLOGUE D9LGIT |
|
4 C***SUBSIDIARY |
|
5 C***PURPOSE Compute the logarithm of Tricomi's incomplete Gamma |
|
6 C function with Perron's continued fraction for large X and |
|
7 C A .GE. X. |
|
8 C***LIBRARY SLATEC (FNLIB) |
|
9 C***CATEGORY C7E |
|
10 C***TYPE DOUBLE PRECISION (R9LGIT-S, D9LGIT-D) |
|
11 C***KEYWORDS FNLIB, INCOMPLETE GAMMA FUNCTION, LOGARITHM, |
|
12 C PERRON'S CONTINUED FRACTION, SPECIAL FUNCTIONS, TRICOMI |
|
13 C***AUTHOR Fullerton, W., (LANL) |
|
14 C***DESCRIPTION |
|
15 C |
|
16 C Compute the log of Tricomi's incomplete gamma function with Perron's |
|
17 C continued fraction for large X and for A .GE. X. |
|
18 C |
|
19 C***REFERENCES (NONE) |
|
20 C***ROUTINES CALLED D1MACH, XERMSG |
|
21 C***REVISION HISTORY (YYMMDD) |
|
22 C 770701 DATE WRITTEN |
|
23 C 890531 Changed all specific intrinsics to generic. (WRB) |
|
24 C 890531 REVISION DATE from Version 3.2 |
|
25 C 891214 Prologue converted to Version 4.0 format. (BAB) |
|
26 C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ) |
|
27 C 900720 Routine changed from user-callable to subsidiary. (WRB) |
|
28 C***END PROLOGUE D9LGIT |
|
29 DOUBLE PRECISION A, X, ALGAP1, AX, A1X, EPS, FK, HSTAR, P, R, S, |
|
30 1 SQEPS, T, D1MACH |
|
31 LOGICAL FIRST |
|
32 SAVE EPS, SQEPS, FIRST |
|
33 DATA FIRST /.TRUE./ |
|
34 C***FIRST EXECUTABLE STATEMENT D9LGIT |
|
35 IF (FIRST) THEN |
|
36 EPS = 0.5D0*D1MACH(3) |
|
37 SQEPS = SQRT(D1MACH(4)) |
|
38 ENDIF |
|
39 FIRST = .FALSE. |
|
40 C |
|
41 IF (X .LE. 0.D0 .OR. A .LT. X) CALL XERMSG ('SLATEC', 'D9LGIT', |
|
42 + 'X SHOULD BE GT 0.0 AND LE A', 2, 2) |
|
43 C |
|
44 AX = A + X |
|
45 A1X = AX + 1.0D0 |
|
46 R = 0.D0 |
|
47 P = 1.D0 |
|
48 S = P |
|
49 DO 20 K=1,200 |
|
50 FK = K |
|
51 T = (A+FK)*X*(1.D0+R) |
|
52 R = T/((AX+FK)*(A1X+FK)-T) |
|
53 P = R*P |
|
54 S = S + P |
|
55 IF (ABS(P).LT.EPS*S) GO TO 30 |
|
56 20 CONTINUE |
|
57 CALL XERMSG ('SLATEC', 'D9LGIT', |
|
58 + 'NO CONVERGENCE IN 200 TERMS OF CONTINUED FRACTION', 3, 2) |
|
59 C |
|
60 30 HSTAR = 1.0D0 - X*S/A1X |
|
61 IF (HSTAR .LT. SQEPS) CALL XERMSG ('SLATEC', 'D9LGIT', |
|
62 + 'RESULT LESS THAN HALF PRECISION', 1, 1) |
|
63 C |
|
64 D9LGIT = -X - ALGAP1 - LOG(HSTAR) |
|
65 RETURN |
|
66 C |
|
67 END |