SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/dgam.F
Go to the documentation of this file.
00001 C######################################################################
00002 C######################################################################
00003 C
00004 C       THIS ROUTINE COMPUTE THE INCOMPLETE AND THE COMPLEMENTARY 
00005 C INCOMPLETE GAMMA FUNCTION DOUBLE PRECISION. IN BRIEF, THIS 
00006 C FUNCTION HELP TO COMPUTE THE DIFFERENT FRACTION PRESENT IN THE 
00007 C TOPMODEL FRAMEWORK. 
00008 C       MORE EXPLANATION ON THE SUBROUTINE USE ARE GIVEN IN THE NEXT 
00009 C COMMENTARY 
00010 C
00011 C THIS ROUTINE WAS FOUND ON http://www.netlib.org WEB SITE.
00012 C      
00013 C REFERENCE - W. GAUTSCHI, :: A COMPUTATIONAL PROCEDURE FOR INCOMPLETE 
00014 C GAMMA FUNCTIONS, ACM TRANS. MATH. SOFTWARE., (1979) 482-489
00015 C
00016 C######################################################################
00017 C######################################################################
00018 C
00019 C     LET  GAMMA(A)  DENOTE THE GAMMA FUNCTION AND  GAM(A,X)  THE
00020 C (COMPLEMENTARY) INCOMPLETE GAMMA FUNCTION,
00021 C
00022 C    GAM(A,X)=INTEGRAL FROM T=X TO T=INFINITY OF EXP(-T)*T**(A-1).
00023 C
00024 C LET  GAMSTAR(A,X)  DENOTE TRICOMI:S FORM OF THE INCOMPLETE GAMMA
00025 C FUNCTION, WHICH FOR A.GT.0. IS DEFINED BY
00026 C
00027 C  GAMSTAR(A,X)=(X**(-A)/GAMMA(A))*INTEGRAL FROM T=0 TO T=X OF
00028 C                EXP(-T)*T**(A-1),
00029 C
00030 C AND FOR A.LE.0. BY ANALYTIC CONTINUATION. FOR THE PURPOSE OF
00031 C THIS SUBROUTINE, THESE FUNCTIONS ARE NORMALIZED AS FOLLOWS&
00032 C
00033 C             GAM(A,X)/GAMMA(A),  IF A.GT.0.,
00034 C     G(A,X)=
00035 C             EXP(X)*X**(-A)*GAM(A,X),  IF A.LE.0.,
00036 C
00037 C     GSTAR(A,X)=(X**A)*GAMSTAR(A,X)
00038 C               =(1/GAMMA(A))*INTEGRAL FROM T=0 TO T=X OF EXP(-T)*T**(A-1)
00039 C
00040 C THE PROGRAM BELOW ATTEMPTS TO EVALUATE  G(A,X)  AND  GSTAR(A,X),
00041 C BOTH TO AN ACCURACY OF ACC SIGNIFICANT DECIMAL DIGITS, FOR ARBI-
00042 C TRARY REAL VALUES OF  A  AND NONNEGATIVE VALUES OF  X. THE SUB-
00043 C ROUTINE AUTOMATICALLY CHECKS FOR UNDERFLOW AND OVERFLOW CONDI-
00044 C TIONS AND RETURNS APPROPRIATE WARNINGS THROUGH THE OUTPUT PARA-
00045 C METERS  IFLG, IFLGST. A RESULT THAT UNDERFLOWS IS RETURNED WITH
00046 C THE VALUE 0., ONE THAT OVERFLOWS WITH THE VALUE OF THE LARGEST
00047 C MACHINE-REPRESENTABLE NUMBER.
00048 C
00049 C     NEAR LINES IN THE (A,X)-PLANE, A.LT.0., ALONG WHICH  GSTAR
00050 C VANISHES, THE ACCURACY SPECIFIED WILL BE ATTAINED ONLY IN TERMS
00051 C OF ABSOLUTE ERROR, NOT RELATIVE ERROR. THERE ARE OTHER (RARE)
00052 C INSTANCES IN WHICH THE ACCURACY ATTAINED IS SOMEWHAT LESS THAN
00053 C THE ACCURACY SPECIFIED. THE DISCREPANCY, HOWEVER, SHOULD NEVER
00054 C EXCEED ONE OR TWO (DECIMAL) ORDERS OF ACCURACY# NO INDICATION
00055 C OF THIS IS GIVEN THROUGH ERROR FLAGS.
00056 C
00057 C     PARAMETER LIST&
00058 C
00059 C        A - - THE FIRST ARGUMENT OF G AND GSTAR. TYPE REAL.
00060 C        X - - THE SECOND ARGUMENT OF G AND GSTAR. TYPE REAL.
00061 C      ACC - - THE NUMBER OF CORRECT SIGNIFICANT DECIMAL DIGITS
00062 C              DESIRED IN THE RESULTS. TYPE REAL.
00063 C        G - - AN OUTPUT VARIABLE RETURNING THE VALUE OF G(A,X).
00064 C              TYPE REAL.
00065 C    GSTAR - - AN OUTPUT VARIABLE RETURNING THE VALUE OF
00066 C              GSTAR(A,X). TYPE REAL.
00067 C     IFLG - - AN ERROR FLAG INDICATING A NUMBER OF ERROR CONDI-
00068 C              TIONS IN G UPON EXECUTION. TYPE INTEGER.
00069 C   IFLGST - - AN ERROR FLAG INDICATING A NUMBER OF ERROR CONDI-
00070 C              TIONS IN GSTAR UPON EXECUTION. TYPE INTEGER.
00071 C              THE VALUES OF IFLG AND IFLGST HAVE THE FOLLOWING
00072 C              MEANINGS&
00073 C              0 - NO ERROR CONDITION.
00074 C              1 - ILLEGAL NEGATIVE ARGUMENT X. THE ROUTINE EXITS
00075 C                  WITH THE VALUES ZERO FOR G AND GSTAR.
00076 C              2 - INFINITELY LARGE RESULT AT X=0. THE ROUTINE
00077 C                  RETURNS THE LARGEST MACHINE-REPRESENTABLE NUMBER.
00078 C              3 - (ONLY FOR IFLGST) GSTAR IS INDETERMINATE AT
00079 C                  A=0. AND X=0. THE ROUTINE RETURNS THE VALUE 1.,
00080 C                  WHICH IS THE LIMIT VALUE AS X TENDS TO ZERO FOR
00081 C                  FIXED A=0.
00082 C              4 - THE RESULT UNDERFLOWS. IT IS SET EQUAL TO 0.
00083 C              5 - THE RESULT OVERFLOWS. IT IS SET EQUAL TO THE
00084 C                  LARGEST MACHINE-REPRESENTABLE NUMBER, WITH
00085 C                  PROPER SIGN.
00086 C              6 - CONVERGENCE FAILS WITHIN 600 ITERATIONS, EITHER
00087 C                  IN TAYLOR:S SERIES OR IN LEGENDRE:S CONTINUED
00088 C                  FRACTION. REASON UNKNOWN. THE COMPUTATION IS
00089 C                  ABORTED AND THE ROUTINE RETURNS WITH ZERO
00090 C                  VALUES FOR G AND GSTAR.
00091 C
00092 C     ALL MACHINE-DEPENDENT PARAMETERS ARE COLLECTED IN THE FIRST
00093 C DATA DECLARATION. THEY ARE AS FOLLOWS&
00094 C
00095 C IN THE PROGRAM BELOW THESE PARAMETERS ARE SET TO CORRESPOND TO
00096 C THE MACHINE CHARACTERISTICS OF THE CDC 6500 COMPUTER.
00097 C
00098 C     THE SECOND DATA DECLARATION CONTAINS THE SINGLE PRECISION
00099 C VALUE OF ALOG(10.). THE NEXT DATA DECLARATION CONTAINS THE SUCCES-
00100 C SIVE COEFFICIENTS IN THE MACLAURIN EXPANSION OF (1/GAMMA(A+1))-1.
00101 C THEY ARE GIVEN TO AS MANY DECIMAL PLACES AS IS NECESSARY TO ACHIEVE
00102 C MACHINE PRECISION (ON THE CDC 6500 COMPUTER) IN THE RANGE
00103 C ABS(A).LE..5. MORE ACCURATE VALUES OF THESE COEFFICIENTS (TO
00104 C 31 DECIMAL PLACES) CAN BE FOUND IN TABLE 5 OF J.W.WRENCH,JR.,
00105 C CONCERNING TWO SERIES FOR THE GAMMA FUNCTION, MATH. COMPUT.
00106 C 22, 1968, 617-626.
00107 C
00108 C     THE SUBROUTINE CALLS ON A FUNCTION SUBROUTINE, NAMED  ALGA,
00109 C WHICH IS TO PROVIDE SINGLE PRECISION VALUES OF THE LOGARITHM OF
00110 C THE GAMMA FUNCTION FOR ARGUMENTS LARGER THAN OR EQUAL TO .5.
00111 C A POSSIBLE VERSION OF SUCH A FUNCTION SUBROUTINE IS APPENDED
00112 C TO THE PRESENT SUBROUTINE. IT IS TAYLORED TO THE ACCURACY RE-
00113 C QUIREMENTS OF THE CDC 6500 COMPUTER, AND USES RATIONAL APPROXI-
00114 C MATIONS DUE TO CODY AND HILLSTROM (MATH. COMPUT. 21, 1967, 198-
00115 C 203).
00116 C
00117 C     REFERENCE - W. GAUTSCHI, ::A COMPUTATIONAL PROCEDURE FOR
00118 C INCOMPLETE GAMMA FUNCTIONS, ACM TRANS. MATH. SOFTWARE.
00119 C
00120 !################################################################
00121 !
00122       SUBROUTINE DGAM(A, X, ACC, G, GSTAR, IFLG, IFLGST)
00123 !
00124 !################################################################
00125 
00126       USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00127       USE PARKIND1  ,ONLY : JPRB
00128 
00129       IMPLICIT NONE
00130 
00131       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00132 
00133       REAL A, X, ACC, G, GSTAR
00134       INTEGER IFLG, IFLGST, I, K, K1, MA
00135 
00136       DOUBLE PRECISION C, AL10, ALX, ALPHA, ALPREC,
00137      * TOP, BOT, AINF, EPS, EPS1, ES, SGA, AE, AA, AP1, AM1, AEP1,
00138      * AEM1, FMA, AEPS, SGAE, AAEPS, ALGP1, SGGA, ALGEP1, SGGS, ALGS,
00139      * ALG, SUMM, GA, Y, TERM, U, P, Q, R, V, T, H, SGT, A1X, RHO, XPA,
00140      * XMA, S, TEMP
00141       DIMENSION C(29)
00142       DATA AL10 /2.3025850929940456840179914547D0/
00143       DATA C /.57721566490153286060651209008D0,-.65587807152025388107701
00144      * 951515D0,-4.200263503409523552900393488D-2,.166538611382291489501
00145      * 7007951D0,-4.21977345555443367482083013D-2,-9.6219715278769735621
00146      * 149217D-3,7.2189432466630995423950103D-3,-1.165167591859065112113
00147      * 971D-3,-2.15241674114950972815730D-4,1.2805028238811618615320D-4,
00148      * -2.013485478078823865569D-5,-1.2504934821426706573D-6,
00149      * 1.1330272319816958824D-6,-2.056338416977607103D-7,
00150      * 6.1160951044814158D-9,5.0020076444692229D-9,-1.181274570487020D-9
00151      * ,1.04342671169110D-10,7.782263439905D-12,-3.696805618642D-12,
00152      * 5.1003702875D-13,-2.058326054D-14,-5.34812254D-15,1.2267786D-15,
00153      * -1.181259D-16,1.187D-18,1.412D-18,-2.30D-19,1.7D-20/
00154 
00155       IF (LHOOK) CALL DR_HOOK('DGAM',0,ZHOOK_HANDLE)
00156 
00157       G = 0.D0
00158       GSTAR = 0.D0
00159       IF (X.LT.0.D0) GO TO 290
00160 C
00161 C INITIALIZATION
00162 C
00163       IFLG = 0
00164       IFLGST = 0
00165       I = 0
00166       IF (X.GT.0.D0) ALX = DLOG(X*1.D0)
00167       ALPHA = X + .25D0
00168       IF (X.LT..25D0 .AND. X.GT.0.D0) ALPHA = DLOG(.5D0)/ALX
00169       ALPREC = DBLE(DIGITS(1.D0))*DLOG(2.D0)
00170       TOP    = DLOG10(HUGE(1.D0))
00171       BOT    = DLOG10(TINY(1.D0))
00172       AINF   = HUGE(1.D0)
00173       EPS = .5D0*10.D0**(-ACC)
00174       EPS1 = EPS/1.D2
00175       SGA = 1.D0
00176       IF (A.LT.0.D0) SGA = -SGA
00177       AE = A
00178       AA = DABS(A*1.D0)
00179       AP1 = A + 1.D0
00180       AEP1 = AP1
00181       MA = SNGL(.5D0-A)
00182       FMA = DBLE(FLOAT(MA))
00183       AEPS = A + FMA
00184       SGAE = 1.D0
00185       IF (AEPS.LT.0.D0) SGAE = -SGAE
00186       AAEPS = DABS(AEPS)
00187       ALGP1 = 0.D0
00188 C
00189 C EVALUATION OF THE LOGARITHM OF THE ABSOLUTE VALUE OF
00190 C GAMMA(A+1.) AND DETERMINATION OF THE SIGN OF GAMMA(A+1.)
00191 C
00192       SGGA = 1.D0
00193       IF (MA.LE.0) GO TO 10
00194       IF (AEPS.EQ.0.D0) GO TO 20
00195       SGGA = SGAE
00196       IF (MA.EQ.2*(MA/2)) SGGA = -SGGA
00197       ALGP1 = DLGA(AEPS+1.D0) - DLOG(AAEPS)
00198       IF (MA.EQ.1) GO TO 20
00199       ALGP1 = ALGP1 + DLGA(1.D0-AEPS) - DLGA(FMA-AEPS)
00200       GO TO 20
00201    10 ALGP1 = DLGA(AP1)
00202    20 ALGEP1 = ALGP1
00203       IF (X.GT.0.D0) GO TO 60
00204 C
00205 C EVALUATION OF GSTAR(A,0.) AND G(A,0.)
00206 C
00207       IF (A) 30, 40, 50
00208    30 IFLGST = 2
00209       GSTAR = AINF
00210       G = 1.D0/AA
00211       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00212       RETURN
00213    40 IFLGST = 3
00214       GSTAR = 1.D0
00215       IFLG = 2
00216       G = AINF
00217       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00218       RETURN
00219    50 G = 1.D0
00220       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00221       RETURN
00222    60 IF (A.GT.ALPHA) GO TO 220
00223       IF (X.GT.1.5D0) GO TO 240
00224       IF (A.LT.-.5D0) GO TO 170
00225 C
00226 C DIRECT EVALUATION OF G(A,X) AND GSTAR(A,X) FOR X.LE.1.5
00227 C AND -.5.LE.A.LE.ALPHA(X)
00228 C
00229       GSTAR = 1.D0
00230       IF (A.GE..5D0) GO TO 110
00231    70 SUMM = C(29)
00232       DO 80 K=1,28
00233         K1 = 29 - K
00234         SUMM = AE*SUMM + C(K1)
00235    80 CONTINUE
00236       GA = -SUMM/(1.D0+AE*SUMM)
00237       Y = AE*ALX
00238       IF (DABS(Y).GE.1.D0) GO TO 100
00239       SUMM = 1.D0
00240       TERM = 1.D0
00241       K = 1
00242    90 K = K + 1
00243       IF (K.GT.600) GO TO 330
00244       TERM = Y*TERM/DBLE(FLOAT(K))
00245       SUMM = SUMM + TERM
00246       IF (DABS(TERM).GT.EPS1*SUMM) GO TO 90
00247       U = GA - SUMM*ALX
00248       GO TO 120
00249   100 U = GA - (DEXP(Y)-1.D0)/AE
00250       GO TO 120
00251   110 TEMP=DLGA(A*1.D0)
00252       U = DEXP(TEMP) - (X**A)/A
00253   120 P = AE*X
00254       Q = AEP1
00255       R = AE + 3.D0
00256       TERM = 1.D0
00257       SUMM = 1.D0
00258       K = 1
00259   130 K = K + 1
00260       IF (K.GT.600) GO TO 330
00261       P = P + X
00262       Q = Q + R
00263       R = R + 2.D0
00264       TERM = -P*TERM/Q
00265       SUMM = SUMM + TERM
00266       IF (DABS(TERM).GT.EPS1*SUMM) GO TO 130
00267       V = (X**AEP1)*SUMM/AEP1
00268       G = U + V
00269       IF (I.EQ.1) GO TO 180
00270       IF (A) 140, 150, 160
00271   140 T = DEXP(X*1.D0)*X**(-A)
00272       G = T*G
00273       GSTAR = 1.D0 - A*G*DEXP(-ALGP1)/T
00274       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00275       RETURN
00276   150 G = DEXP(X*1.D0)*G
00277       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00278       RETURN
00279   160 G = A*G*DEXP(-ALGP1)
00280       GSTAR = 1.D0 - G
00281       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00282       RETURN
00283 C
00284 C RECURSIVE EVALUATION OF G(A,X) FOR X.LE.1.5 AND A.LT.-.5
00285 C
00286   170 I = 1
00287       AE = AEPS
00288       AEP1 = AEPS + 1.D0
00289       IF (X.LT..25D0 .AND. AE.GT.ALPHA) GO TO 210
00290       GO TO 70
00291   180 G = G*DEXP(X*1.D0)*X**(-AE)
00292       DO 190 K=1,MA
00293         G = (1.D0-X*G)/(DBLE(FLOAT(K))-AE)
00294   190 CONTINUE
00295       ALG = DLOG(G*1.D0)
00296 C
00297 C EVALUATION OF GSTAR(A,X) IN TERMS OF G(A,X)
00298 C
00299   200 GSTAR = 1.D0
00300       IF (MA.GE.0 .AND. AEPS.EQ.0.D0 .AND. LHOOK) 
00301      *      CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00302       IF (MA.GE.0 .AND. AEPS.EQ.0.D0) RETURN
00303       SGT = SGA*SGGA
00304       T = DLOG(AA) - X + A*ALX + ALG - ALGP1
00305       IF (T.LT.-ALPREC .AND. LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00306       IF (T.LT.-ALPREC) RETURN
00307       IF (T.GE.TOP) GO TO 320
00308       GSTAR = 1.D0 - SGT*DEXP(T)
00309       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00310       RETURN
00311   210 I = 2
00312       ALGEP1 = DLGA(AEP1)
00313 C
00314 C EVALUATION OF GSTAR(A,X) FOR A.GT.ALPHA(X) BY TAYLOR
00315 C EXPANSION
00316 C
00317   220 G = 1.D0
00318       TERM = 1.D0
00319       SUMM = 1.D0
00320       K = 0
00321   230 K = K + 1
00322       IF (K.GT.600) GO TO 340
00323       TERM = X*TERM/(AE+DBLE(FLOAT(K)))
00324       SUMM = SUMM + TERM
00325       IF (DABS(TERM).GT.EPS*SUMM) GO TO 230
00326       ALGS = AE*ALX - X + DLOG(SUMM) - ALGEP1
00327       IF (ALGS.LE.BOT) GO TO 310
00328       GSTAR = DEXP(ALGS)
00329       G = 1.D0 - GSTAR
00330       IF (I.NE.2 .AND. LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00331       IF (I.NE.2) RETURN
00332       G = G*DEXP(ALGEP1)/AE
00333       GO TO 180
00334 C
00335 C EVALUATION OF G(A,X) FOR X.GT.1.5 AND A.LE.ALPHA(X) BY
00336 C MEANS OF THE LEGENDRE CONTINUED FRACTION
00337 C
00338   240 GSTAR = 1.D0
00339       XPA = X + 1.D0 - A
00340       XMA = X - 1.D0 - A
00341       P = 0.D0
00342       Q = XPA*XMA
00343       R = 4.D0*XPA
00344       S = -A + 1.D0
00345       TERM = 1.D0
00346       SUMM = 1.D0
00347       RHO = 0.D0
00348       K = 1
00349   250 K = K + 1
00350       IF (K.GT.600) GO TO 330
00351       P = P + S
00352       Q = Q + R
00353       R = R + 8.D0
00354       S = S + 2.D0
00355       T = P*(1.D0+RHO)
00356       RHO = T/(Q-T)
00357       TERM = RHO*TERM
00358       SUMM = SUMM + TERM
00359       IF (DABS(TERM).GT.EPS*SUMM) GO TO 250
00360       IF (A) 260, 270, 280
00361   260 G = SUMM/XPA
00362       ALG = DLOG(G*1.D0)
00363       GO TO 200
00364   270 G = SUMM/XPA
00365       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00366       RETURN
00367   280 ALG = A*ALX - X + DLOG(A*SUMM/XPA) - ALGP1
00368       IF (ALG.LE.BOT) GO TO 300
00369       G = DEXP(ALG)
00370       GSTAR = 1.D0 - G
00371       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00372       RETURN
00373   290 IFLG = 1
00374       IFLGST = 1
00375       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00376       RETURN
00377   300 IFLG = 4
00378       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00379       RETURN
00380   310 IFLGST = 4
00381       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00382       RETURN
00383   320 IFLGST = 5
00384       GSTAR = -SGT*AINF
00385       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)      
00386       RETURN
00387   330 IFLG = 6
00388       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00389       RETURN
00390   340 IFLGST = 6
00391       IF (LHOOK) CALL DR_HOOK('DGAM',1,ZHOOK_HANDLE)
00392       RETURN
00393      
00394       CONTAINS 
00395 
00396       FUNCTION DLGA(DX) RESULT(DLGAR)
00397 
00398       USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00399       USE PARKIND1  ,ONLY : JPRB
00400 
00401       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00402 
00403       DOUBLE PRECISION DLGAR
00404       DOUBLE PRECISION DBNUM, DBDEN, DX, DC, DP, DY, DT, DS
00405       DIMENSION DBNUM(8), DBDEN(8)
00406       DATA DBNUM /-3.617D3,1.D0,-6.91D2,1.D0,-1.D0,1.D0,-1.D0,1.D0/,
00407      * DBDEN /1.224D5,1.56D2,3.6036D5,1.188D3,1.68D3,1.26D3,3.6D2,1.2D1/
00408 
00409       IF (LHOOK) CALL DR_HOOK('DLGA',0,ZHOOK_HANDLE)
00410 
00411       DC = .5D0*DLOG(8.D0*DATAN(1.D0))
00412       DP = 1.D0
00413       DY = DX
00414       Y = SNGL(DY)
00415 C
00416 C THE CONDITIONAL CLAUSE IN THE NEXT STATEMENT EXPRESSES THE
00417 C INEQUALITY Y.GT.EXP(.121189*DPREC+.053905), WHERE DPREC IS THE
00418 C NUMBER OF DECIMAL DIGITS CARRIED IN DOUBLE PRECISION FLOATING-POINT
00419 C ARITHMETIC.
00420 C
00421    10 IF (Y.GT.35.027) GO TO 20
00422       DP = DY*DP
00423       DY = DY + 1.D0
00424       Y = SNGL(DY)
00425       GO TO 10
00426    20 DT = 1.D0/(DY*DY)
00427       DS = 4.3867D4/2.44188D5
00428       DO 30 I=1,8
00429         DS = DT*DS + DBNUM(I)/DBDEN(I)
00430    30 CONTINUE
00431       DLGAR = (DY-.5D0)*DLOG(DY) - DY + DC + DS/DY - DLOG(DP)
00432       IF (LHOOK) CALL DR_HOOK('DLGA',1,ZHOOK_HANDLE)
00433       RETURN
00434       END FUNCTION DLGA
00435 
00436       END SUBROUTINE DGAM