00001 DOUBLE PRECISION FUNCTION DGAMLN(Z,IERR)
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 DOUBLE PRECISION CF, CON, FLN, FZ, GLN, RLN, S, TLG, TRM, TST,
00040 * T1, WDTOL, Z, ZDMY, ZINC, ZM, ZMIN, ZP, ZSQ, D1MACH
00041 INTEGER I, IERR, I1M, K, MZ, NZ, I1MACH
00042 DIMENSION CF(22), GLN(100)
00043
00044 DATA GLN(1), GLN(2), GLN(3), GLN(4), GLN(5), GLN(6), GLN(7),
00045 1 GLN(8), GLN(9), GLN(10), GLN(11), GLN(12), GLN(13), GLN(14),
00046 2 GLN(15), GLN(16), GLN(17), GLN(18), GLN(19), GLN(20),
00047 3 GLN(21), GLN(22)/
00048 4 0.00000000000000000D+00, 0.00000000000000000D+00,
00049 5 6.93147180559945309D-01, 1.79175946922805500D+00,
00050 6 3.17805383034794562D+00, 4.78749174278204599D+00,
00051 7 6.57925121201010100D+00, 8.52516136106541430D+00,
00052 8 1.06046029027452502D+01, 1.28018274800814696D+01,
00053 9 1.51044125730755153D+01, 1.75023078458738858D+01,
00054 A 1.99872144956618861D+01, 2.25521638531234229D+01,
00055 B 2.51912211827386815D+01, 2.78992713838408916D+01,
00056 C 3.06718601060806728D+01, 3.35050734501368889D+01,
00057 D 3.63954452080330536D+01, 3.93398841871994940D+01,
00058 E 4.23356164607534850D+01, 4.53801388984769080D+01/
00059 DATA GLN(23), GLN(24), GLN(25), GLN(26), GLN(27), GLN(28),
00060 1 GLN(29), GLN(30), GLN(31), GLN(32), GLN(33), GLN(34),
00061 2 GLN(35), GLN(36), GLN(37), GLN(38), GLN(39), GLN(40),
00062 3 GLN(41), GLN(42), GLN(43), GLN(44)/
00063 4 4.84711813518352239D+01, 5.16066755677643736D+01,
00064 5 5.47847293981123192D+01, 5.80036052229805199D+01,
00065 6 6.12617017610020020D+01, 6.45575386270063311D+01,
00066 7 6.78897431371815350D+01, 7.12570389671680090D+01,
00067 8 7.46582363488301644D+01, 7.80922235533153106D+01,
00068 9 8.15579594561150372D+01, 8.50544670175815174D+01,
00069 A 8.85808275421976788D+01, 9.21361756036870925D+01,
00070 B 9.57196945421432025D+01, 9.93306124547874269D+01,
00071 C 1.02968198614513813D+02, 1.06631760260643459D+02,
00072 D 1.10320639714757395D+02, 1.14034211781461703D+02,
00073 E 1.17771881399745072D+02, 1.21533081515438634D+02/
00074 DATA GLN(45), GLN(46), GLN(47), GLN(48), GLN(49), GLN(50),
00075 1 GLN(51), GLN(52), GLN(53), GLN(54), GLN(55), GLN(56),
00076 2 GLN(57), GLN(58), GLN(59), GLN(60), GLN(61), GLN(62),
00077 3 GLN(63), GLN(64), GLN(65), GLN(66)/
00078 4 1.25317271149356895D+02, 1.29123933639127215D+02,
00079 5 1.32952575035616310D+02, 1.36802722637326368D+02,
00080 6 1.40673923648234259D+02, 1.44565743946344886D+02,
00081 7 1.48477766951773032D+02, 1.52409592584497358D+02,
00082 8 1.56360836303078785D+02, 1.60331128216630907D+02,
00083 9 1.64320112263195181D+02, 1.68327445448427652D+02,
00084 A 1.72352797139162802D+02, 1.76395848406997352D+02,
00085 B 1.80456291417543771D+02, 1.84533828861449491D+02,
00086 C 1.88628173423671591D+02, 1.92739047287844902D+02,
00087 D 1.96866181672889994D+02, 2.01009316399281527D+02,
00088 E 2.05168199482641199D+02, 2.09342586752536836D+02/
00089 DATA GLN(67), GLN(68), GLN(69), GLN(70), GLN(71), GLN(72),
00090 1 GLN(73), GLN(74), GLN(75), GLN(76), GLN(77), GLN(78),
00091 2 GLN(79), GLN(80), GLN(81), GLN(82), GLN(83), GLN(84),
00092 3 GLN(85), GLN(86), GLN(87), GLN(88)/
00093 4 2.13532241494563261D+02, 2.17736934113954227D+02,
00094 5 2.21956441819130334D+02, 2.26190548323727593D+02,
00095 6 2.30439043565776952D+02, 2.34701723442818268D+02,
00096 7 2.38978389561834323D+02, 2.43268849002982714D+02,
00097 8 2.47572914096186884D+02, 2.51890402209723194D+02,
00098 9 2.56221135550009525D+02, 2.60564940971863209D+02,
00099 A 2.64921649798552801D+02, 2.69291097651019823D+02,
00100 B 2.73673124285693704D+02, 2.78067573440366143D+02,
00101 C 2.82474292687630396D+02, 2.86893133295426994D+02,
00102 D 2.91323950094270308D+02, 2.95766601350760624D+02,
00103 E 3.00220948647014132D+02, 3.04686856765668715D+02/
00104 DATA GLN(89), GLN(90), GLN(91), GLN(92), GLN(93), GLN(94),
00105 1 GLN(95), GLN(96), GLN(97), GLN(98), GLN(99), GLN(100)/
00106 2 3.09164193580146922D+02, 3.13652829949879062D+02,
00107 3 3.18152639620209327D+02, 3.22663499126726177D+02,
00108 4 3.27185287703775217D+02, 3.31717887196928473D+02,
00109 5 3.36261181979198477D+02, 3.40815058870799018D+02,
00110 6 3.45379407062266854D+02, 3.49954118040770237D+02,
00111 7 3.54539085519440809D+02, 3.59134205369575399D+02/
00112
00113 DATA CF(1), CF(2), CF(3), CF(4), CF(5), CF(6), CF(7), CF(8),
00114 1 CF(9), CF(10), CF(11), CF(12), CF(13), CF(14), CF(15),
00115 2 CF(16), CF(17), CF(18), CF(19), CF(20), CF(21), CF(22)/
00116 3 8.33333333333333333D-02, -2.77777777777777778D-03,
00117 4 7.93650793650793651D-04, -5.95238095238095238D-04,
00118 5 8.41750841750841751D-04, -1.91752691752691753D-03,
00119 6 6.41025641025641026D-03, -2.95506535947712418D-02,
00120 7 1.79644372368830573D-01, -1.39243221690590112D+00,
00121 8 1.34028640441683920D+01, -1.56848284626002017D+02,
00122 9 2.19310333333333333D+03, -3.61087712537249894D+04,
00123 A 6.91472268851313067D+05, -1.52382215394074162D+07,
00124 B 3.82900751391414141D+08, -1.08822660357843911D+10,
00125 C 3.47320283765002252D+11, -1.23696021422692745D+13,
00126 D 4.88788064793079335D+14, -2.13203339609193739D+16/
00127
00128
00129 DATA CON / 1.83787706640934548D+00/
00130
00131
00132 IERR=0
00133 IF (Z.LE.0.0D0) GO TO 70
00134 IF (Z.GT.101.0D0) GO TO 10
00135 NZ = INT(SNGL(Z))
00136 FZ = Z - FLOAT(NZ)
00137 IF (FZ.GT.0.0D0) GO TO 10
00138 IF (NZ.GT.100) GO TO 10
00139 DGAMLN = GLN(NZ)
00140 RETURN
00141 10 CONTINUE
00142 WDTOL = D1MACH(4)
00143 WDTOL = DMAX1(WDTOL,0.5D-18)
00144 I1M = I1MACH(14)
00145 RLN = D1MACH(5)*FLOAT(I1M)
00146 FLN = DMIN1(RLN,20.0D0)
00147 FLN = DMAX1(FLN,3.0D0)
00148 FLN = FLN - 3.0D0
00149 ZM = 1.8000D0 + 0.3875D0*FLN
00150 MZ = INT(SNGL(ZM)) + 1
00151 ZMIN = FLOAT(MZ)
00152 ZDMY = Z
00153 ZINC = 0.0D0
00154 IF (Z.GE.ZMIN) GO TO 20
00155 ZINC = ZMIN - FLOAT(NZ)
00156 ZDMY = Z + ZINC
00157 20 CONTINUE
00158 ZP = 1.0D0/ZDMY
00159 T1 = CF(1)*ZP
00160 S = T1
00161 IF (ZP.LT.WDTOL) GO TO 40
00162 ZSQ = ZP*ZP
00163 TST = T1*WDTOL
00164 DO 30 K=2,22
00165 ZP = ZP*ZSQ
00166 TRM = CF(K)*ZP
00167 IF (DABS(TRM).LT.TST) GO TO 40
00168 S = S + TRM
00169 30 CONTINUE
00170 40 CONTINUE
00171 IF (ZINC.NE.0.0D0) GO TO 50
00172 TLG = DLOG(Z)
00173 DGAMLN = Z*(TLG-1.0D0) + 0.5D0*(CON-TLG) + S
00174 RETURN
00175 50 CONTINUE
00176 ZP = 1.0D0
00177 NZ = INT(SNGL(ZINC))
00178 DO 60 I=1,NZ
00179 ZP = ZP*(Z+FLOAT(I-1))
00180 60 CONTINUE
00181 TLG = DLOG(ZDMY)
00182 DGAMLN = ZDMY*(TLG-1.0D0) - DLOG(ZP) + 0.5D0*(CON-TLG) + S
00183 RETURN
00184
00185
00186 70 CONTINUE
00187 IERR=1
00188 RETURN
00189 END