1 DOUBLE PRECISION FUNCTION DGAMLN
(Z
,IERR
)
2 C***BEGIN PROLOGUE DGAMLN
3 C***DATE WRITTEN 830501 (YYMMDD)
4 C***REVISION DATE 830501 (YYMMDD)
6 C***KEYWORDS GAMMA FUNCTION,LOGARITHM OF GAMMA FUNCTION
7 C***AUTHOR AMOS, DONALD E., SANDIA NATIONAL LABORATORIES
8 C***PURPOSE TO COMPUTE THE LOGARITHM OF THE GAMMA FUNCTION
11 C **** A DOUBLE PRECISION ROUTINE ****
12 C DGAMLN COMPUTES THE NATURAL LOG OF THE GAMMA FUNCTION FOR
13 C Z.GT.0. THE ASYMPTOTIC EXPANSION IS USED TO GENERATE VALUES
14 C GREATER THAN ZMIN WHICH ARE ADJUSTED BY THE RECURSION
15 C G(Z+1)=Z*G(Z) FOR Z.LE.ZMIN. THE FUNCTION WAS MADE AS
16 C PORTABLE AS POSSIBLE BY COMPUTIMG ZMIN FROM THE NUMBER OF BASE
17 C 10 DIGITS IN A WORD, RLN=AMAX1(-ALOG10(R1MACH(4)),0.5E-18)
18 C LIMITED TO 18 DIGITS OF (RELATIVE) ACCURACY.
20 C SINCE INTEGER ARGUMENTS ARE COMMON, A TABLE LOOK UP ON 100
21 C VALUES IS USED FOR SPEED OF EXECUTION.
23 C DESCRIPTION OF ARGUMENTS
25 C INPUT Z IS D0UBLE PRECISION
26 C Z - ARGUMENT, Z.GT.0.0D0
28 C OUTPUT DGAMLN IS DOUBLE PRECISION
29 C DGAMLN - NATURAL LOG OF THE GAMMA FUNCTION AT Z.NE.0.0D0
31 C IERR=0, NORMAL RETURN, COMPUTATION COMPLETED
32 C IERR=1, Z.LE.0.0D0, NO COMPUTATION
35 C***REFERENCES COMPUTATION OF BESSEL FUNCTIONS OF COMPLEX ARGUMENT
36 C BY D. E. AMOS, SAND83-0083, MAY, 1983.
37 C***ROUTINES CALLED I1MACH,D1MACH
38 C***END PROLOGUE DGAMLN
39 DOUBLE PRECISION CF
, CON
, FLN
, FZ
, GLN
, RLN
, S
, TLG
, TRM
, TST
,
40 * T1
, WDTOL
, Z
, ZDMY
, ZINC
, ZM
, ZMIN
, ZP
, ZSQ
, D1MACH
41 INTEGER I
, IERR
, I1M
, K
, MZ
, NZ
, I1MACH
42 DIMENSION CF
(22), GLN
(100)
44 DATA GLN
(1), GLN
(2), GLN
(3), GLN
(4), GLN
(5), GLN
(6), GLN
(7),
45 1 GLN
(8), GLN
(9), GLN
(10), GLN
(11), GLN
(12), GLN
(13), GLN
(14),
46 2 GLN
(15), GLN
(16), GLN
(17), GLN
(18), GLN
(19), GLN
(20),
48 4 0.00000000000000000D
+00, 0.00000000000000000D
+00,
49 5 6.93147180559945309D
-01, 1.79175946922805500D
+00,
50 6 3.17805383034794562D
+00, 4.78749174278204599D
+00,
51 7 6.57925121201010100D
+00, 8.52516136106541430D
+00,
52 8 1.06046029027452502D
+01, 1.28018274800814696D
+01,
53 9 1.51044125730755153D
+01, 1.75023078458738858D
+01,
54 A
1.99872144956618861D
+01, 2.25521638531234229D
+01,
55 B
2.51912211827386815D
+01, 2.78992713838408916D
+01,
56 C
3.06718601060806728D
+01, 3.35050734501368889D
+01,
57 D
3.63954452080330536D
+01, 3.93398841871994940D
+01,
58 E
4.23356164607534850D
+01, 4.53801388984769080D
+01/
59 DATA GLN
(23), GLN
(24), GLN
(25), GLN
(26), GLN
(27), GLN
(28),
60 1 GLN
(29), GLN
(30), GLN
(31), GLN
(32), GLN
(33), GLN
(34),
61 2 GLN
(35), GLN
(36), GLN
(37), GLN
(38), GLN
(39), GLN
(40),
62 3 GLN
(41), GLN
(42), GLN
(43), GLN
(44)/
63 4 4.84711813518352239D
+01, 5.16066755677643736D
+01,
64 5 5.47847293981123192D
+01, 5.80036052229805199D
+01,
65 6 6.12617017610020020D
+01, 6.45575386270063311D
+01,
66 7 6.78897431371815350D
+01, 7.12570389671680090D
+01,
67 8 7.46582363488301644D
+01, 7.80922235533153106D
+01,
68 9 8.15579594561150372D
+01, 8.50544670175815174D
+01,
69 A
8.85808275421976788D
+01, 9.21361756036870925D
+01,
70 B
9.57196945421432025D
+01, 9.93306124547874269D
+01,
71 C
1.02968198614513813D
+02, 1.06631760260643459D
+02,
72 D
1.10320639714757395D
+02, 1.14034211781461703D
+02,
73 E
1.17771881399745072D
+02, 1.21533081515438634D
+02/
74 DATA GLN
(45), GLN
(46), GLN
(47), GLN
(48), GLN
(49), GLN
(50),
75 1 GLN
(51), GLN
(52), GLN
(53), GLN
(54), GLN
(55), GLN
(56),
76 2 GLN
(57), GLN
(58), GLN
(59), GLN
(60), GLN
(61), GLN
(62),
77 3 GLN
(63), GLN
(64), GLN
(65), GLN
(66)/
78 4 1.25317271149356895D
+02, 1.29123933639127215D
+02,
79 5 1.32952575035616310D
+02, 1.36802722637326368D
+02,
80 6 1.40673923648234259D
+02, 1.44565743946344886D
+02,
81 7 1.48477766951773032D
+02, 1.52409592584497358D
+02,
82 8 1.56360836303078785D
+02, 1.60331128216630907D
+02,
83 9 1.64320112263195181D
+02, 1.68327445448427652D
+02,
84 A
1.72352797139162802D
+02, 1.76395848406997352D
+02,
85 B
1.80456291417543771D
+02, 1.84533828861449491D
+02,
86 C
1.88628173423671591D
+02, 1.92739047287844902D
+02,
87 D
1.96866181672889994D
+02, 2.01009316399281527D
+02,
88 E
2.05168199482641199D
+02, 2.09342586752536836D
+02/
89 DATA GLN
(67), GLN
(68), GLN
(69), GLN
(70), GLN
(71), GLN
(72),
90 1 GLN
(73), GLN
(74), GLN
(75), GLN
(76), GLN
(77), GLN
(78),
91 2 GLN
(79), GLN
(80), GLN
(81), GLN
(82), GLN
(83), GLN
(84),
92 3 GLN
(85), GLN
(86), GLN
(87), GLN
(88)/
93 4 2.13532241494563261D
+02, 2.17736934113954227D
+02,
94 5 2.21956441819130334D
+02, 2.26190548323727593D
+02,
95 6 2.30439043565776952D
+02, 2.34701723442818268D
+02,
96 7 2.38978389561834323D
+02, 2.43268849002982714D
+02,
97 8 2.47572914096186884D
+02, 2.51890402209723194D
+02,
98 9 2.56221135550009525D
+02, 2.60564940971863209D
+02,
99 A
2.64921649798552801D
+02, 2.69291097651019823D
+02,
100 B
2.73673124285693704D
+02, 2.78067573440366143D
+02,
101 C
2.82474292687630396D
+02, 2.86893133295426994D
+02,
102 D
2.91323950094270308D
+02, 2.95766601350760624D
+02,
103 E
3.00220948647014132D
+02, 3.04686856765668715D
+02/
104 DATA GLN
(89), GLN
(90), GLN
(91), GLN
(92), GLN
(93), GLN
(94),
105 1 GLN
(95), GLN
(96), GLN
(97), GLN
(98), GLN
(99), GLN
(100)/
106 2 3.09164193580146922D
+02, 3.13652829949879062D
+02,
107 3 3.18152639620209327D
+02, 3.22663499126726177D
+02,
108 4 3.27185287703775217D
+02, 3.31717887196928473D
+02,
109 5 3.36261181979198477D
+02, 3.40815058870799018D
+02,
110 6 3.45379407062266854D
+02, 3.49954118040770237D
+02,
111 7 3.54539085519440809D
+02, 3.59134205369575399D
+02/
112 C COEFFICIENTS OF ASYMPTOTIC EXPANSION
113 DATA CF
(1), CF
(2), CF
(3), CF
(4), CF
(5), CF
(6), CF
(7), CF
(8),
114 1 CF
(9), CF
(10), CF
(11), CF
(12), CF
(13), CF
(14), CF
(15),
115 2 CF
(16), CF
(17), CF
(18), CF
(19), CF
(20), CF
(21), CF
(22)/
116 3 8.33333333333333333D
-02, -2.77777777777777778D
-03,
117 4 7.93650793650793651D
-04, -5.95238095238095238D
-04,
118 5 8.41750841750841751D
-04, -1.91752691752691753D
-03,
119 6 6.41025641025641026D
-03, -2.95506535947712418D
-02,
120 7 1.79644372368830573D
-01, -1.39243221690590112D
+00,
121 8 1.34028640441683920D
+01, -1.56848284626002017D
+02,
122 9 2.19310333333333333D
+03, -3.61087712537249894D
+04,
123 A
6.91472268851313067D
+05, -1.52382215394074162D
+07,
124 B
3.82900751391414141D
+08, -1.08822660357843911D
+10,
125 C
3.47320283765002252D
+11, -1.23696021422692745D
+13,
126 D
4.88788064793079335D
+14, -2.13203339609193739D
+16/
129 DATA CON
/ 1.83787706640934548D
+00/
131 C***FIRST EXECUTABLE STATEMENT DGAMLN
133 IF (Z
.LE
.0.0D0
) GO TO 70
134 IF (Z
.GT
.101.0D0
) GO TO 10
137 IF (FZ
.GT
.0.0D0
) GO TO 10
138 IF (NZ
.GT
.100) GO TO 10
143 WDTOL
= DMAX1
(WDTOL
,0.5D
-18)
145 RLN
= D1MACH
(5)*FLOAT
(I1M
)
146 FLN
= DMIN1
(RLN
,20.0D0
)
147 FLN
= DMAX1
(FLN
,3.0D0
)
149 ZM
= 1.8000D0
+ 0.3875D0*FLN
150 MZ
= INT
(SNGL
(ZM
)) + 1
154 IF (Z
.GE
.ZMIN
) GO TO 20
155 ZINC
= ZMIN
- FLOAT
(NZ
)
161 IF (ZP
.LT
.WDTOL
) GO TO 40
167 IF (DABS
(TRM
).LT
.TST
) GO TO 40
171 IF (ZINC
.NE
.0.0D0
) GO TO 50
173 DGAMLN
= Z*
(TLG
-1.0D0
) + 0.5D0*
(CON
-TLG
) + S
179 ZP
= ZP*
(Z
+FLOAT
(I
-1))
182 DGAMLN
= ZDMY*
(TLG
-1.0D0
) - DLOG
(ZP
) + 0.5D0*
(CON
-TLG
) + S