FUNCTION GAMLN(X) GAM 10 C C A CDC 6600 SUBROUTINE C C AUTHORS C D.E. AMOS AND S.L. DANIEL C ALBUQUERQUE, NEW MEXICO, 87115 C JANUARY, 1975 C C REFERENCES C ABRAMOWITZ, M. AND STEGUN, I.A. HANDBOOK OF MATHEMATICAL C FUNCTIONS. NBS APPLIED MATHEMATICS SERIES 55, U.S. GOVERNMENT C PRINTING OFFICE, WASHINGTON, D.C., CHAPTER 6. C C AMOS, D.E., DANIEL, S.L. AND WESTON, M.K. CDC 6600 C SUBROUTINES IBESS AND JBESS FOR BESSEL FUNCTIONS C I/SUB(NU)/(X) AND J/SUB(NU)/(X), X.GE.0, NU.GE.0. C ACM TRANS. MATH. SOFTWARE, MARCH, 1977. C C HART, J.F., ET. AL. COMPUTER APPROXIMATIONS, WILEY, NEW YORK. C PP. 130-136, 1968. C C ABSTRACT C GAMLN COMPUTES THE NATURAL LOG OF THE GAMMA FUNCTION FOR C X.GT.0. A RATIONAL CHEBYSHEV APPROXIMATION IS USED ON C 8.LT.X.LT.1000., THE ASYMPTOTIC EXPANSION FOR X.GE.1000. AND C BACKWARD RECURSION FOR 0.LT.X.LT.8 FOR NON-INTEGRAL X. FOR C X=1.,...,8., GAMLN IS SET TO NATURAL LOGS OF FACTORIALS. C C DESCRIPTION OF ARGUMENTS C C INPUT C X - X.GT.0 C C OUTPUT C GAMLN - NATURAL LOG OF THE GAMMA FUNCTION AT X C C ERROR CONDITIONS C IMPROPER INPUT ARGUMENT - A FATAL ERROR DOUBLE PRECISION DXZ, RXZ, XK DIMENSION G(8), P(5), Q(2) DATA XLIM1,XLIM2,RTWPIL/ 8. , 1000. , 9.18938533204673E-01/ DATA G / 8.52516136106541E+00, 6.57925121201010E+00, 1 4.78749174278205E+00, 3.17805383034795E+00, 1.79175946922806E+00, 2 6.93147180559945E-01, 2(0.) / DATA P / 7.66345188000000E-04,-5.94095610520000E-04, 1 7.93643110484500E-04,-2.77777775657725E-03, 8.33333333333169E-02/ DATA Q /-2.77777777777778E-03, 8.33333333333333E-02/ IF (X) 140, 140, 10 10 DX = X - XLIM1 IF (DX) 20, 110, 80 20 IF (X-1.) 30, 130, 40 30 XZ = X + 8. TX = X FK = -.5 NDX = 7 GO TO 50 40 DX = ABS(DX) NDX = DX DNDX = NDX NDX = NDX + 1 IF ((DNDX-DX).EQ.0.) GO TO 120 XZ = X + DNDX + 1. TX = 1. FK = .5 50 DXZ = XZ RXZ = 1.D+0/DXZ RX = RXZ RXX = RX*RX XK = 1.D+0 DO 60 I=1,NDX XK = XK - RXZ SXK = XK TX = TX*SXK 60 CONTINUE SUM = (X-FK)*ALOG(XZ) - ALOG(TX) - XZ PX = P(1) DO 70 I=2,5 PX = PX*RXX + P(I) 70 CONTINUE GAMLN = PX*RX + SUM + RTWPIL RETURN 80 RX = 1./X RXX = RX*RX IF ((X-XLIM2).LT.0.) GO TO 90 PX = Q(1)*RXX + Q(2) GAMLN = PX*RX + (X-.5)*ALOG(X) - X + RTWPIL RETURN 90 PX = P(1) SUM = (X-.5)*ALOG(X) - X DO 100 I=2,5 PX = PX*RXX + P(I) 100 CONTINUE GAMLN = PX*RX + SUM + RTWPIL RETURN 110 GAMLN = G(1) RETURN 120 GAMLN = G(NDX) RETURN 130 GAMLN = G(8) RETURN 140 PRINT 99999, X STOP 99999 FORMAT (50H ARGUMENT FOR GAMLN IS LESS THAN OR EQUAL TO ZERO,, * 3H X=,E25.14) END SUBROUTINE IBESS(KODE, ALPHA, N, X, Y) IBE 10 C C A CDC 6600 SUBROUTINE C C AUTHORS C D.E. AMOS AND S.L. DANIEL C SANDIA LABORATORIES C JANUARY, 1975 C C REFERENCES C ABRAMOWITZ, M. AND STEGUN, I.A. HANDBOOK OF MATHEMATICAL C FUNCTIONS. NBS APPLIED MATHEMATICS SERIES 55, U.S. GOVERNMENT C PRINTING OFFICE, WASHINGTON, D.C., CHAPTERS 9 AND 10. C C AMOS, D.E., DANIEL, S.L. AND WESTON, M.K. CDC 6600 C SUBROUTINES IBESS AND JBESS FOR BESSEL FUNCTIONS C I/SUB(NU)/(X) AND J/SUB(NU)/(X), X.GE.0, NU.GE.0. C ACM TRANS. MATH. SOFTWARE, MARCH, 1977. C C OLVER, F.W.J. TABLES FOR BESSEL FUNCTIONS OF MODERATE OR C LARGE ORDERS. NPL MATHEMATICAL TABLES, VOL 6. HER MAJESTY-S C STATIONERY OFFICE, LONDON, 1962. C C OLVER, F.W.J. THE ASYMPTOTIC EXPANSION OF BESSEL FUNCTIONS OF C LARGE ORDER. PHIL. TRANS. A, 247, PP. 328-368, 1954. C C ABSTRACT C IBESS COMPUTES AN N MEMBER SEQUENCE OF I BESSEL FUNCTIONS C I/SUB(ALPHA+K-1)/(X), K=1,...,N OR SCALED BESSEL FUNCTIONS C EXP(-X)*I/SUB(ALPHA*K-1)/(X), K=1,...,N FOR NON-NEGATIVE ALPHA C AND X. A COMBINATION OF THE POWER SERIES, THE ASYMPTOTIC C EXPANSION FOR X TO INFINITY, AND THE UNIFORM ASYMPTOTIC C EXPANSION FOR NU TO INFINITY ARE APPLIED OVER SUBDIVISIONS OF C THE (NU,X) PLANE. FOR VALUES NOT COVERED BY ONE OF THESE C FORMULAE, THE ORDER IS INCREMENTED BY AN INTEGER SO THAT ONE C OF THESE FORMULAE APPLY. BACKWARD RECURSION IS USED TO REDUCE C ORDERS BY INTEGER VALUES. THE ASYMPTOTIC EXPANSION FOR X TO C INFINITY IS USED ONLY WHEN THE ENTIRE SEQUENCE (SPECIFICALLY C THE LAST MEMBER) LIES WITHIN THE REGION COVERED BY THE C EXPANSION. LEADING TERMS OF THESE EXPANSIONS ARE USED TO TEST C FOR OVER OR UNDERFLOW WHERE APPROPRIATE. IF A SEQUENCE IS C REQUESTED AND THE LAST MEMBER WOULD UNDERFLOW, THE RESULT IS C SET TO ZERO AND THE NEXT LOWER ORDER TRIED, ETC., UNTIL A C MEMBER COMES ON SCALE OR ALL ARE SET TO ZERO. AN OVERFLOW C CANNOT OCCUR WITH SCALING. IBESS CALLS FUNCTION GAMLN. C C DESCRIPTION OF ARGUMENTS C C INPUT C KODE - A PARAMETER TO INDICATE THE SCALING OPTION C KODE=1 RETURNS C Y(K)= I/SUB(ALPHA+K-1)/(X), C K=1,...,N C KODE=2 RETURNS C Y(K)=EXP(-X)*I/SUB(ALPHA+K-1)/(X), C K=1,...,N C ALPHA - ORDER OF FIRST MEMBER OF THE SEQUENCE, ALPHA.GE.0 C N - NUMBER OF MEMBERS IN THE SEQUENCE, N.GE.1 C X - X.GE.0 C C OUTPUT C Y - A VECTOR WHOSE FIRST N COMPONENTS CONTAIN C VALUES FOR I/SUB(ALPHA+K-1)/(X) OR SCALED C VALUES FOR EXP(-X)*I/SUB(ALPHA+K-1)/(X), C K=1,...,N DEPENDING ON KODE C C ERROR CONDITIONS C IMPROPER INPUT ARGUMENTS - A FATAL ERROR C OVERFLOW WITH KODE=1 - A FATAL ERROR C UNDERFLOW - A NON-FATAL ERROR C DOUBLE PRECISION DX, TRX, DTM, DFN DIMENSION Y(1), TEMP(3) DIMENSION C(11,10) DIMENSION C1(11,8), C2(11,2) EQUIVALENCE (C(1,1),C1(1,1)) EQUIVALENCE (C(1,9),C2(1,1)) DATA ELIM,TOL / 667. , 1.E-15 / DATA RTPI,RTTPI / 1.59154943091895E-01, 3.98942280401433E-01/ DATA CE / 3.45387763900000E+01/ DATA INLIM / 80 / DATA C1 /-2.08333333333333E-01, 1.25000000000000E-01, 1 9(0.) , 3.34201388888889E-01,-4.01041666666667E-01, 2 7.03125000000000E-02, 8(0.) ,-1.02581259645062E+00, 3 1.84646267361111E+00,-8.91210937500000E-01, 7.32421875000000E-02, 4 7(0.) , 4.66958442342625E+00,-1.12070026162230E+01, 5 8.78912353515625E+00,-2.36408691406250E+00, 1.12152099609375E-01, 6 6(0.) ,-2.82120725582002E+01, 8.46362176746007E+01, 7-9.18182415432400E+01, 4.25349987453885E+01,-7.36879435947963E+00, 8 2.27108001708984E-01, 5(0.) , 2.12570130039217E+02, 9-7.65252468141182E+02, 1.05999045252800E+03,-6.99579627376133E+02, A 2.18190511744212E+02,-2.64914304869516E+01, 5.72501420974731E-01, B 4(0.) ,-1.91945766231841E+03, 8.06172218173731E+03, C-1.35865500064341E+04, 1.16553933368645E+04,-5.30564697861340E+03, D 1.20090291321635E+03,-1.08090919788395E+02, 1.72772750258446E+00, E 3(0.) , 2.02042913309661E+04,-9.69805983886375E+04, F 1.92547001232532E+05,-2.03400177280416E+05, 1.22200464983017E+05, G-4.11926549688976E+04, 7.10951430248936E+03,-4.93915304773088E+02, H 6.07404200127348E+00, 2(0.) / DATA C2 /-2.42919187900551E+05, 1.31176361466298E+06, 1-2.99801591853811E+06, 3.76327129765640E+06,-2.81356322658653E+06, 2 1.26836527332162E+06,-3.31645172484564E+05, 4.52187689813627E+04, 3-2.49983048181121E+03, 2.43805296995561E+01, 1(0.) , 4 3.28446985307204E+06,-1.97068191184322E+07, 5.09526024926646E+07, 5-7.41051482115327E+07, 6.63445122747290E+07,-3.75671766607634E+07, 6 1.32887671664218E+07,-2.78561812808645E+06, 3.08186404612662E+05, 7-1.38860897537170E+04, 1.10017140269247E+02/ C TEST INPUT ARGUMENTS KT = 1 C TEST INPUT ARGUMENTS IF (N-1) 580, 10, 20 10 KT = 2 20 NN = N IF (KODE.LT.1 .OR. KODE.GT.2) GO TO 560 IF (X) 590, 30, 80 30 IF (ALPHA) 570, 40, 50 40 Y(1) = 1. IF (N.EQ.1) RETURN I1 = 2 GO TO 60 50 I1 = 1 60 DO 70 I=I1,N Y(I) = 0. 70 CONTINUE RETURN 80 CONTINUE IF (ALPHA.LT.0.) GO TO 570 DFN = DBLE(FLOAT(N)) + DBLE(ALPHA) - 1.D+0 FNU = DFN IN = 0 XO2 = X*.5 SXO2 = XO2*XO2 ETX = KODE - 1 SX = ETX*X C DECISION TREE FOR REGION WHERE SERIES, ASYMPTOTIC EXPANSION FOR X C TO INFINITY AND ASYMPTOTIC EXPANSION FOR NU TO INFINITY ARE C APPLIED. IF (SXO2.LE.(FNU+1.)) GO TO 90 IF (X.LE.12.) GO TO 110 FN = 0.55*FNU*FNU FN = AMAX1(17.,FN) IF (X.GE.FN) GO TO 430 NS = AMAX1(36.-FNU,0.) DFN = DFN + DBLE(FLOAT(NS)) FN = DFN IS = KT KM = N - 1 + NS IF (KM.GT.0) IS = 3 GO TO 120 90 FN = FNU FNP1 = FN + 1. XO2L = ALOG(XO2) IS = KT IF (X.LE.0.5) GO TO 230 NS = 0 100 DFN = DFN + DBLE(FLOAT(NS)) FN = DFN FNP1 = FN + 1. IS = KT IF (N-1+NS.GT.0) IS = 3 GO TO 230 110 XO2L = ALOG(XO2) NS = SXO2 - FNU GO TO 100 120 CONTINUE C OVERFLOW TEST ON UNIFORM ASYMPTOTIC EXPANSION IF (KODE.EQ.2) GO TO 130 IF (ALPHA.LT.1.) GO TO 150 Z = X/ALPHA RA = SQRT(1.+Z*Z) GLN = ALOG((1.+RA)/Z) T = RA*(1.-ETX) + ETX/(Z+RA) ARG = ALPHA*(T-GLN) IF (ARG.GT.ELIM) GO TO 600 IF (KM.EQ.0) GO TO 140 130 CONTINUE C UNDERFLOW TEST ON UNIFORM ASYMPTOTIC EXPANSION Z = X/FN RA = SQRT(1.+Z*Z) GLN = ALOG((1.+RA)/Z) T = RA*(1.-ETX) + ETX/(Z+RA) ARG = FN*(T-GLN) 140 IF (ARG.LT.-ELIM) GO TO 280 GO TO 190 150 IF (X.GT.ELIM) GO TO 600 GO TO 130 C UNIFORM ASYMPTOTIC EXPANSION FOR NU TO INFINITY 160 IF (KM.NE.0) GO TO 170 Y(1) = TEMP(3) RETURN 170 TEMP(1) = TEMP(3) IN = NS KT = 1 180 CONTINUE IS = 2 DFN = DFN - 1.D+0 FN = DFN Z = X/FN RA = SQRT(1.+Z*Z) GLN = ALOG((1.+RA)/Z) T = RA*(1.-ETX) + ETX/(Z+RA) ARG = FN*(T-GLN) 190 COEF = EXP(ARG) T = 1./RA T2 = T*T T = T/FN S2 = 1. AP = 1. DO 210 K=1,10 KP1 = K + 1 S1 = C(1,K) DO 200 J=2,KP1 S1 = S1*T2 + C(J,K) 200 CONTINUE AP = AP*T AK = AP*S1 S2 = S2 + AK IF (ABS(AK).LT.TOL) GO TO 220 210 CONTINUE 220 CONTINUE TEMP(IS) = SQRT(T*RTPI)*COEF*S2 GO TO (180, 350, 500), IS C SERIES FOR (X/2)**2.LE.NU+1 230 CONTINUE GLN = GAMLN(FNP1) ARG = FN*XO2L - GLN - SX IF (ARG.LT.-ELIM) GO TO 300 EARG = EXP(ARG) 240 CONTINUE S = 1. AK = 3. T2 = 1. T = 1. S1 = FN DO 250 K=1,17 S2 = T2 + S1 T = T*SXO2/S2 S = S + T IF (ABS(T).LT.TOL) GO TO 260 T2 = T2 + AK AK = AK + 2. S1 = S1 + FN 250 CONTINUE 260 CONTINUE TEMP(IS) = S*EARG GO TO (270, 350, 490), IS 270 EARG = EARG*FN/XO2 DFN = DFN - 1.D+0 FN = DFN IS = 2 GO TO 240 C SET UNDERFLOW VALUE AND UPDATE PARAMETERS 280 Y(NN) = 0. NN = NN - 1 DFN = DFN - 1.D+0 FN = DFN IF (NN-1) 340, 290, 130 290 KT = 2 IS = 2 GO TO 130 300 Y(NN) = 0. NN = NN - 1 FNP1 = FN DFN = DFN - 1.D+0 FN = DFN IF (NN-1) 340, 310, 320 310 KT = 2 IS = 2 320 IF (SXO2.LE.FNP1) GO TO 330 GO TO 130 330 ARG = ARG - XO2L + ALOG(FNP1) IF (ARG.LT.-ELIM) GO TO 300 GO TO 230 340 NZ = N - NN PRINT 99994, NZ, KODE, ALPHA, N, X RETURN C BACKWARD RECURSION SECTION 350 CONTINUE NZ = N - NN IF (NZ.NE.0) PRINT 99994, NZ, KODE, ALPHA, N, X 360 GO TO (370, 420), KT 370 CONTINUE S1 = TEMP(1) S2 = TEMP(2) DX = X TRX = 2.D+0/DX DTM = DFN*TRX TM = DTM IF (IN.EQ.0) GO TO 390 C BACKWARD RECUR TO INDEX ALPHA+NN-1 DO 380 I=1,IN S = S2 S2 = TM*S2 + S1 S1 = S DTM = DTM - TRX TM = DTM 380 CONTINUE Y(NN) = S1 IF (NN.EQ.1) RETURN Y(NN-1) = S2 IF (NN.EQ.2) RETURN GO TO 400 390 CONTINUE C BACKWARD RECUR FROM INDEX ALPHA+NN-1 TO ALPHA Y(NN) = S1 Y(NN-1) = S2 IF (NN.EQ.2) RETURN 400 K = NN + 1 DO 410 I=3,NN K = K - 1 Y(K-2) = TM*Y(K-1) + Y(K) DTM = DTM - TRX TM = DTM 410 CONTINUE RETURN 420 Y(1) = TEMP(2) RETURN C ASYMPTOTIC EXPANSION FOR X TO INFINITY 430 CONTINUE EARG = RTTPI/SQRT(X) IF (KODE.EQ.2) GO TO 440 IF (X.GT.ELIM) GO TO 600 EARG = EARG*EXP(X) 440 ETX = 8.*X IS = KT IN = 0 450 DX = DFN + DFN DTM = DX*DX S1 = ETX TRX = S1 DX = -(DTM-1.D+0)/TRX T = DX TRX = 1.D+0 + DX S = TRX S2 = 1. AK = 8. DO 460 K=1,25 S1 = S1 + ETX S2 = S2 + AK DX = S2 TRX = DTM - DX AP = TRX T = -T*AP/S1 S = S + T IF (ABS(T).LE.TOL) GO TO 470 AK = AK + 8. 460 CONTINUE 470 TEMP(IS) = S*EARG GO TO (480, 360), IS 480 IS = 2 DFN = DFN - 1.D+0 GO TO 450 C BACKWARD RECURSION WITH NORMALIZATION BY C ASYMPTOTIC EXPANSION FOR NU TO INFINITY OR POWER SERIES. 490 CONTINUE C COMPUTATION OF LAST ORDER FOR SERIES NORMALIZATION KM = AMAX1(3.-FN,0.) TFN = FN + FLOAT(KM) TA = (GLN+TFN-0.9189385332-0.0833333333/TFN)/(TFN+0.5) TA = XO2L - TA TB = -(1.-1./TFN)/TFN IN = CE/(-TA+SQRT(TA*TA-CE*TB)) + 1.5 IN = IN + KM GO TO 510 500 CONTINUE C COMPUTATION OF LAST ORDER FOR ASYMPTOTIC EXPANSION NORMALIZATION IN = CE/(GLN+SQRT(GLN*GLN+T*CE)) + 1.5 IF (IN.GT.INLIM) GO TO 160 510 DX = FLOAT(IN) DTM = DFN + DX DX = X TRX = 2.D+0/DX DTM = DTM*TRX TM = DTM TA = 0. TB = TOL KK = 1 520 CONTINUE C BACKWARD RECUR UNINDEXED DO 530 I=1,IN S = TB TB = TM*TB + TA TA = S DTM = DTM - TRX TM = DTM 530 CONTINUE C NORMALIZATION IF (KK.NE.1) GO TO 540 TA = (TA/TB)*TEMP(3) TB = TEMP(3) KK = 2 IN = NS IF (NS.NE.0) GO TO 520 540 Y(NN) = TB NZ = N - NN IF (NZ.NE.0) PRINT 99994, NZ, KODE, ALPHA, N, X IF (NN.EQ.1) RETURN TB = TM*TB + TA K = NN - 1 Y(K) = TB IF (NN.EQ.2) RETURN DTM = DTM - TRX TM = DTM KM = K - 1 C BACKWARD RECUR INDEXED DO 550 I=1,KM Y(K-1) = TM*Y(K) + Y(K+1) DTM = DTM - TRX TM = DTM K = K - 1 550 CONTINUE RETURN 560 PRINT 99999, KODE, ALPHA, N, X STOP 570 PRINT 99998, KODE, ALPHA, N, X STOP 580 PRINT 99997, KODE, ALPHA, N, X STOP 590 PRINT 99996, KODE, ALPHA, N, X STOP 600 PRINT 99995, KODE, ALPHA, N, X STOP 99999 FORMAT (51H0IBESS CALLED WITH SCALING OPTION, KODE, NOT 1 OR 2 * /6H KODE=,I2,7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99998 FORMAT (51H0IBESS CALLED WITH THE ORDER, ALPHA, LESS THAN ZERO * /6H KODE=,I2,7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99997 FORMAT (34H0IBESS CALLED WITH N LESS THAN ONE/6H KODE=, * I2,7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99996 FORMAT (35H0IBESS CALLED WITH X LESS THAN ZERO/6H KODE=, * I2,7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99995 FORMAT (42H0OVERFLOW IN IBESS, X TOO LARGE FOR KODE=1/6H KODE=, * I2,7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99994 FORMAT (25H0UNDERFLOW IN IBESS, LAST,I6,20H VALUE(S) OF Y ARRAY, * 17H WERE SET TO ZERO/6H KODE=,I2,7H ALPHA=,E25.14,3H N=,I6, * 3H X=,E25.14) END SUBROUTINE JAIRY(X, RX, C, AI, DAI) JAI 10 C C CDC 6600 ROUTINE C 1-2-74 C C JAIRY COMPUTES THE AIRY FUNCTION AI(X) C AND ITS DERIVATIVE DAI(X) FOR JBESS C INPUT C C X - ARGUMENT, COMPUTED BY JBESS, X.LE.(ELIM2*1.5)**(2./3.) C RX - RX=SQRT(ABS(X)), COMPUTED BY JBESS C C - C=2.*(ABS(X)**1.5)/3., COMPUTED BY JBESS C C OUTPUT C C AI - VALUE OF FUNCTION AI(X) C DAI - VALUE OF THE DERIVATIVE DAI(X) C C WRITTEN BY C C D. E. AMOS C S. L. DANIEL C M. K. WESTON C DIMENSION AJP(19), AJN(19), A(15), B(15) DIMENSION AK1(14), AK2(23), AK3(14) DIMENSION DAJP(19), DAJN(19), DA(15), DB(15) DIMENSION DAK1(14), DAK2(24), DAK3(14) DATA N1, N2, N3, N4 /14,23,19,15/ DATA M1, M2, M3, M4 /12,21,17,13/ DATA FPI12,CON2,CON3,CON4,CON5 / 1.30899693899575E+00, 1 5.03154716196777E+00, 3.80004589867293E-01, 8.33333333333333E-01, 2 8.66025403784439E-01/ DATA AK1 / 2.20423090987793E-01,-1.25290242787700E-01, 1 1.03881163359194E-02, 8.22844152006343E-04,-2.34614345891226E-04, 2 1.63824280172116E-05, 3.06902589573189E-07,-1.29621999359332E-07, 3 8.22908158823668E-09, 1.53963968623298E-11,-3.39165465615682E-11, 4 2.03253257423626E-12,-1.10679546097884E-14,-5.16169497785080E-15/ DATA AK2 / 2.74366150869598E-01, 5.39790969736903E-03, 1-1.57339220621190E-03, 4.27427528248750E-04,-1.12124917399925E-04, 2 2.88763171318904E-05,-7.36804225370554E-06, 1.87290209741024E-06, 3-4.75892793962291E-07, 1.21130416955909E-07,-3.09245374270614E-08, 4 7.92454705282654E-09,-2.03902447167914E-09, 5.26863056595742E-10, 5-1.36704767639569E-10, 3.56141039013708E-11,-9.31388296548430E-12, 6 2.44464450473635E-12,-6.43840261990955E-13, 1.70106030559349E-13, 7-4.50760104503281E-14, 1.19774799164811E-14,-3.19077040865066E-15/ DATA AK3 / 2.80271447340791E-01,-1.78127042844379E-03, 1 4.03422579628999E-05,-1.63249965269003E-06, 9.21181482476768E-08, 2-6.52294330229155E-09, 5.47138404576546E-10,-5.24408251800260E-11, 3 5.60477904117209E-12,-6.56375244639313E-13, 8.31285761966247E-14, 4-1.12705134691063E-14, 1.62267976598129E-15,-2.46480324312426E-16/ DATA AJP / 7.78952966437581E-02,-1.84356363456801E-01, 1 3.01412605216174E-02, 3.05342724277608E-02,-4.95424702513079E-03, 2-1.72749552563952E-03, 2.43137637839190E-04, 5.04564777517082E-05, 3-6.16316582695208E-06,-9.03986745510768E-07, 9.70243778355884E-08, 4 1.09639453305205E-08,-1.04716330588766E-09,-9.60359441344646E-11, 5 8.25358789454134E-12, 6.36123439018768E-13,-4.96629614116015E-14, 6-3.29810288929615E-15, 2.35798252031104E-16/ DATA AJN / 3.80497887617242E-02,-2.45319541845546E-01, 1 1.65820623702696E-01, 7.49330045818789E-02,-2.63476288106641E-02, 2-5.92535597304981E-03, 1.44744409589804E-03, 2.18311831322215E-04, 3-4.10662077680304E-05,-4.66874994171766E-06, 7.15218807277160E-07, 4 6.52964770854633E-08,-8.44284027565946E-09,-6.44186158976978E-10, 5 7.20802286505285E-11, 4.72465431717846E-12,-4.66022632547045E-13, 6-2.67762710389189E-14, 2.36161316570019E-15/ DATA A / 4.90275424742791E-01, 1.57647277946204E-03, 1-9.66195963140306E-05, 1.35916080268815E-07, 2.98157342654859E-07, 2-1.86824767559979E-08,-1.03685737667141E-09, 3.28660818434328E-10, 3-2.57091410632780E-11,-2.32357655300677E-12, 9.57523279048255E-13, 4-1.20340828049719E-13,-2.90907716770715E-15, 4.55656454580149E-15, 5-9.99003874810259E-16/ DATA B / 2.78593552803079E-01,-3.52915691882584E-03, 1-2.31149677384994E-05, 4.71317842263560E-06,-1.12415907931333E-07, 2-2.00100301184339E-08, 2.60948075302193E-09,-3.55098136101216E-11, 3-3.50849978423875E-11, 5.83007187954202E-12,-2.04644828753326E-13, 4-1.10529179476742E-13, 2.87724778038775E-14,-2.88205111009939E-15, 5-3.32656311696166E-16/ DATA N1D, N2D, N3D, N4D /14,24,19,15/ DATA M1D, M2D, M3D, M4D /12,22,17,13/ DATA DAK1 / 2.04567842307887E-01,-6.61322739905664E-02, 1-8.49845800989287E-03, 3.12183491556289E-03,-2.70016489829432E-04, 2-6.35636298679387E-06, 3.02397712409509E-06,-2.18311195330088E-07, 3-5.36194289332826E-10, 1.13098035622310E-09,-7.43023834629073E-11, 4 4.28804170826891E-13, 2.23810925754539E-13,-1.39140135641182E-14/ DATA DAK2 / 2.93332343883230E-01,-8.06196784743112E-03, 1 2.42540172333140E-03,-6.82297548850235E-04, 1.85786427751181E-04, 2-4.97457447684059E-05, 1.32090681239497E-05,-3.49528240444943E-06, 3 9.24362451078835E-07,-2.44732671521867E-07, 6.49307837648910E-08, 4-1.72717621501538E-08, 4.60725763604656E-09,-1.23249055291550E-09, 5 3.30620409488102E-10,-8.89252099772401E-11, 2.39773319878298E-11, 6-6.48013921153450E-12, 1.75510132023731E-12,-4.76303829833637E-13, 7 1.29498241100810E-13,-3.52679622210430E-14, 9.62005151585923E-15, 8-2.62786914342292E-15/ DATA DAK3 / 2.84675828811349E-01, 2.53073072619080E-03, 1-4.83481130337976E-05, 1.84907283946343E-06,-1.01418491178576E-07, 2 7.05925634457153E-09,-5.85325291400382E-10, 5.56357688831339E-11, 3-5.90889094779500E-12, 6.88574353784436E-13,-8.68588256452194E-14, 4 1.17374762617213E-14,-1.68523146510923E-15, 2.55374773097056E-16/ DATA DAJP / 6.53219131311457E-02,-1.20262933688823E-01, 1 9.78010236263823E-03, 1.67948429230505E-02,-1.97146140182132E-03, 2-8.45560295098867E-04, 9.42889620701976E-05, 2.25827860945475E-05, 3-2.29067870915987E-06,-3.76343991136919E-07, 3.45663933559565E-08, 4 4.29611332003007E-09,-3.58673691214989E-10,-3.57245881361895E-11, 5 2.72696091066336E-12, 2.26120653095771E-13,-1.58763205238303E-14, 6-1.12604374485125E-15, 7.31327529515367E-17/ DATA DAJN / 1.08594539632967E-02, 8.53313194857091E-02, 1-3.15277068113058E-01,-8.78420725294257E-02, 5.53251906976048E-02, 2 9.41674060503241E-03,-3.32187026018996E-03,-4.11157343156826E-04, 3 1.01297326891346E-04, 9.87633682208396E-06,-1.87312969812393E-06, 4-1.50798500131468E-07, 2.32687669525394E-08, 1.59599917419225E-09, 5-2.07665922668385E-10,-1.24103350500302E-11, 1.39631765331043E-12, 6 7.39400971155740E-14,-7.32887475627500E-15/ DATA DA / 4.91627321104601E-01, 3.11164930427489E-03, 1 8.23140762854081E-05,-4.61769776172142E-06,-6.13158880534626E-08, 2 2.87295804656520E-08,-1.81959715372117E-09,-1.44752826642035E-10, 3 4.53724043420422E-11,-3.99655065847223E-12,-3.24089119830323E-13, 4 1.62098952568741E-13,-2.40765247974057E-14, 1.69384811284491E-16, 5 8.17900786477396E-16/ DATA DB /-2.77571356944231E-01, 4.44212833419920E-03, 1-8.42328522190089E-05,-2.58040318418710E-06, 3.42389720217621E-07, 2-6.24286894709776E-09,-2.36377836844577E-09, 3.16991042656673E-10, 3-4.40995691658191E-12,-5.18674221093575E-12, 9.64874015137022E-13, 4-4.90190576608710E-14,-1.77253430678112E-14, 5.55950610442662E-15, 5-7.11793337579530E-16/ IF (X.LT.0.) GO TO 90 IF (C.GT.5.) GO TO 60 IF (X.GT.1.2) GO TO 30 T = (X+X-1.2)*CON4 TT = T + T J = N1 F1 = AK1(J) F2 = 0. DO 10 I=1,M1 J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + AK1(J) F2 = TEMP1 10 CONTINUE AI = T*F1 - F2 + AK1(1) J = N1D F1 = DAK1(J) F2 = 0. DO 20 I=1,M1D J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + DAK1(J) F2 = TEMP1 20 CONTINUE DAI = -(T*F1-F2+DAK1(1)) RETURN 30 CONTINUE T = (X+X-CON2)*CON3 TT = T + T J = N2 F1 = AK2(J) F2 = 0. DO 40 I=1,M2 J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + AK2(J) F2 = TEMP1 40 CONTINUE RTRX = SQRT(RX) EC = EXP(-C) AI = EC*(T*F1-F2+AK2(1))/RTRX J = N2D F1 = DAK2(J) F2 = 0. DO 50 I=1,M2D J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + DAK2(J) F2 = TEMP1 50 CONTINUE DAI = -EC*(T*F1-F2+DAK2(1))*RTRX RETURN 60 CONTINUE T = 10./C - 1. TT = T + T J = N1 F1 = AK3(J) F2 = 0. DO 70 I=1,M1 J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + AK3(J) F2 = TEMP1 70 CONTINUE RTRX = SQRT(RX) EC = EXP(-C) AI = EC*(T*F1-F2+AK3(1))/RTRX J = N1D F1 = DAK3(J) F2 = 0. DO 80 I=1,M1D J = J - 1 TEMP1 = F1 F1 = TT*F1 - F2 + DAK3(J) F2 = TEMP1 80 CONTINUE DAI = -RTRX*EC*(T*F1-F2+DAK3(1)) RETURN 90 CONTINUE IF (C.GT.5.) GO TO 120 T = .4*C - 1. TT = T + T J = N3 F1 = AJP(J) E1 = AJN(J) F2 = 0. E2 = 0. DO 100 I=1,M3 J = J - 1 TEMP1 = F1 TEMP2 = E1 F1 = TT*F1 - F2 + AJP(J) E1 = TT*E1 - E2 + AJN(J) F2 = TEMP1 E2 = TEMP2 100 CONTINUE AI = (T*E1-E2+AJN(1)) - X*(T*F1-F2+AJP(1)) J = N3D F1 = DAJP(J) E1 = DAJN(J) F2 = 0. E2 = 0. DO 110 I=1,M3D J = J - 1 TEMP1 = F1 TEMP2 = E1 F1 = TT*F1 - F2 + DAJP(J) E1 = TT*E1 - E2 + DAJN(J) F2 = TEMP1 E2 = TEMP2 110 CONTINUE DAI = X*X*(T*F1-F2+DAJP(1)) + (T*E1-E2+DAJN(1)) RETURN 120 CONTINUE T = 10./C - 1. TT = T + T J = N4 F1 = A(J) E1 = B(J) F2 = 0. E2 = 0. DO 130 I=1,M4 J = J - 1 TEMP1 = F1 TEMP2 = E1 F1 = TT*F1 - F2 + A(J) E1 = TT*E1 - E2 + B(J) F2 = TEMP1 E2 = TEMP2 130 CONTINUE TEMP1 = T*F1 - F2 + A(1) TEMP2 = T*E1 - E2 + B(1) RTRX = SQRT(RX) CV = C - FPI12 CCV = COS(CV) SCV = SIN(CV) AI = (TEMP1*CCV-TEMP2*SCV)/RTRX J = N4D F1 = DA(J) E1 = DB(J) F2 = 0. E2 = 0. DO 140 I=1,M4D J = J - 1 TEMP1 = F1 TEMP2 = E1 F1 = TT*F1 - F2 + DA(J) E1 = TT*E1 - E2 + DB(J) F2 = TEMP1 E2 = TEMP2 140 CONTINUE TEMP1 = T*F1 - F2 + DA(1) TEMP2 = T*E1 - E2 + DB(1) E1 = CCV*CON5 + .5*SCV E2 = SCV*CON5 - .5*CCV DAI = (TEMP1*E1-TEMP2*E2)*RTRX RETURN END SUBROUTINE JBESS(ALPHA, N, X, Y) JBE 10 C C A CDC 6600 SUBROUTINE C C AUTHORS C D.E. AMOS, S.L. DANIEL, AND M.K. WESTON C SANDIA LABORATORIES C JANUARY, 1975 C C REFERENCES C ABRAMOWITZ, M. AND STEGUN, I.A. HANDBOOK OF MATHEMATICAL C FUNCTIONS. NBS APPLIED MATHEMATICS SERIES 55, U.S. GOVERNMENT C PRINTING OFFICE, WASHINGTON, D.C., CHAPTERS 9 AND 10. C C AMOS, D.E., DANIEL, S.L. AND WESTON, M.K. CDC 6600 C SUBROUTINES IBESS AND JBESS FOR BESSEL FUNCTIONS C I/SUB(NU)/(X) AND J/SUB(NU)/(X), X.GE.0, NU.GE.0. C ACM TRANS. MATH. SOFTWARE, MARCH, 1977. C C OLVER, F.W.J. TABLES FOR BESSEL FUNCTIONS OF MODERATE OR C LARGE ORDERS. NPL MATHEMATICAL TABLES, VOL 6. HER MAJESTY-S C STATIONERY OFFICE, LONDON, 1962. C C OLVER, F.W.J. THE ASYMPTOTIC EXPANSION OF BESSEL FUNCTIONS OF C LARGE ORDER. PHIL. TRANS. A, 247, PP. 328-368, 1954. C C ABSTRACT C JBESS COMPUTES AN N MEMBER SEQUENCE OF J BESSEL FUNCTIONS C J/SUB(ALPHA+K-1)/(X), K=1,...,N FOR NON-NEGATIVE ALPHA AND X. C A COMBINATION OF THE POWER SERIES, THE ASYMPTOTIC EXPANSION C FOR X TO INFINITY AND THE UNIFORM ASYMPTOTIC EXPANSION FOR C NU TO INFINITY ARE APPLIED OVER SUBDIVISIONS OF THE (NU,X) C PLANE. FOR VALUES OF (NU,X) NOT COVERED BY ONE OF THESE C FORMULAE, THE ORDER IS INCREMENTED OR DECREMENTED BY INTEGER C VALUES INTO A REGION WHERE ONE OF THE FORMULAE APPLY. BACKWARD C RECURSION IS APPLIED TO REDUCE ORDERS BY INTEGER VALUES EXCEPT C WHERE THE ENTIRE SEQUENCE LIES IN THE OSCILLATORY REGION. IN C THIS CASE FORWARD RECURSION IS STABLE AND VALUES FROM THE C ASYMPTOTIC EXPANSION FOR X TO INFINITY START THE RECURSION C WHEN IT IS EFFICIENT TO DO SO. LEADING TERMS OF THE SERIES AND C UNIFORM EXPANSION ARE TESTED FOR UNDERFLOW. IF A SEQUENCE IS C REQUESTED AND THE LAST MEMBER WOULD UNDERFLOW, THE RESULT IS C SET TO ZERO AND THE NEXT LOWER ORDER TRIED, ETC., UNTIL A C MEMBER COMES ON SCALE OR ALL MEMBERS ARE SET TO ZERO. OVERFLOW C CANNOT OCCUR. JBESS CALLS SUBROUTINE JAIRY AND FUNCTION GAMLN. C C DESCRIPTION OF ARGUMENTS C C INPUT C ALPHA - ORDER OF FIRST MEMBER OF THE SEQUENCE, ALPHA.GE.0 C N - NUMBER OF MEMBERS IN THE SEQUENCE, N.GE.1 C X - X.GE.0 C C OUTPUT C Y - A VECTOR WHOSE FIRST N COMPONENTS CONTAIN C VALUES FOR J/SUB(ALPHA+K-1)/(X), K=1,...,N C C ERROR CONDITIONS C IMPROPER INPUT ARGUMENTS - A FATAL ERROR C UNDERFLOW - A NON-FATAL ERROR C DOUBLE PRECISION DX, TRX, DTM, DFN DIMENSION Y(1) DIMENSION C(11,10), ALFA(26,4), BETA(26,5) DIMENSION C1(11,8), C2(11,2), ALFA1(26,2), ALFA2(26,2) DIMENSION BETA1(26,2), BETA2(26,2), BETA3(26,1) DIMENSION GAMA(26), TEMP(3), KMAX(5), AR(8), BR(10), UPOL(10) DIMENSION FNULIM(2), PP(4) DIMENSION CR(10), DR(10) EQUIVALENCE (C(1,1),C1(1,1)) EQUIVALENCE (C(1,9),C2(1,1)) EQUIVALENCE (ALFA(1,1),ALFA1(1,1)) EQUIVALENCE (ALFA(1,3),ALFA2(1,1)) EQUIVALENCE (BETA(1,1),BETA1(1,1)) EQUIVALENCE (BETA(1,3),BETA2(1,1)) EQUIVALENCE (BETA(1,5),BETA3(1,1)) DATA ELIM1,ELIM2,TOL / 667. , 644. , 1.E-15 / C DATA PP / 8.72909153935547E+00, 2.65693932265030E-01, 1 1.24578576865586E-01, 7.70133747430388E-04/ C TOLS=LN(1.E-3) DATA TOLS /-6.90775527898214E+00/ DATA CON1,CON2,CON548/ 6.66666666666667E-01, 3.33333333333333E-01, 1 1.04166666666667E-01/ DATA RTWO,PDF,RTTP,PIDT / 1.34839972492648E+00, 1 7.85398163397448E-01, 7.97884560802865E-01, 1.57079632679490E+00/ DATA FNULIM / 100. , 60. / C CE=-ALOG(TOL) , TCE=-0.75*ALOG(TOL) DATA CE , TCE / 3.45387763949107E+01, 2.59040822961830E+01/ DATA INLIM / 150 / DATA AR / 8.35503472222222E-02, 1.28226574556327E-01, 1 2.91849026464140E-01, 8.81627267443758E-01, 3.32140828186277E+00, 2 1.49957629868626E+01, 7.89230130115865E+01, 4.74451538868264E+02/ DATA BR /-1.45833333333333E-01,-9.87413194444444E-02, 1-1.43312053915895E-01,-3.17227202678414E-01,-9.42429147957120E-01, 2-3.51120304082635E+00,-1.57272636203680E+01,-8.22814390971859E+01, 3-4.92355370523671E+02,-3.31621856854797E+03/ DATA C1 /-2.08333333333333E-01, 1.25000000000000E-01, 1 9(0.) , 3.34201388888889E-01,-4.01041666666667E-01, 2 7.03125000000000E-02, 8(0.) ,-1.02581259645062E+00, 3 1.84646267361111E+00,-8.91210937500000E-01, 7.32421875000000E-02, 4 7(0.) , 4.66958442342625E+00,-1.12070026162230E+01, 5 8.78912353515625E+00,-2.36408691406250E+00, 1.12152099609375E-01, 6 6(0.) ,-2.82120725582002E+01, 8.46362176746007E+01, 7-9.18182415432400E+01, 4.25349987453885E+01,-7.36879435947963E+00, 8 2.27108001708984E-01, 5(0.) , 2.12570130039217E+02, 9-7.65252468141182E+02, 1.05999045252800E+03,-6.99579627376133E+02, A 2.18190511744212E+02,-2.64914304869516E+01, 5.72501420974731E-01, B 4(0.) ,-1.91945766231841E+03, 8.06172218173731E+03, C-1.35865500064341E+04, 1.16553933368645E+04,-5.30564697861340E+03, D 1.20090291321635E+03,-1.08090919788395E+02, 1.72772750258446E+00, E 3(0.) , 2.02042913309661E+04,-9.69805983886375E+04, F 1.92547001232532E+05,-2.03400177280416E+05, 1.22200464983017E+05, G-4.11926549688976E+04, 7.10951430248936E+03,-4.93915304773088E+02, H 6.07404200127348E+00, 2(0.) / DATA C2 /-2.42919187900551E+05, 1.31176361466298E+06, 1-2.99801591853811E+06, 3.76327129765640E+06,-2.81356322658653E+06, 2 1.26836527332162E+06,-3.31645172484564E+05, 4.52187689813627E+04, 3-2.49983048181121E+03, 2.43805296995561E+01, 1(0.) , 4 3.28446985307204E+06,-1.97068191184322E+07, 5.09526024926646E+07, 5-7.41051482115327E+07, 6.63445122747290E+07,-3.75671766607634E+07, 6 1.32887671664218E+07,-2.78561812808645E+06, 3.08186404612662E+05, 7-1.38860897537170E+04, 1.10017140269247E+02/ DATA ALFA1 /-4.44444444444444E-03,-9.22077922077922E-04, 1-8.84892884892885E-05, 1.65927687832450E-04, 2.46691372741793E-04, 2 2.65995589346255E-04, 2.61824297061501E-04, 2.48730437344656E-04, 3 2.32721040083232E-04, 2.16362485712365E-04, 2.00738858762752E-04, 4 1.86267636637545E-04, 1.73060775917876E-04, 1.61091705929016E-04, 5 1.50274774160908E-04, 1.40503497391270E-04, 1.31668816545923E-04, 6 1.23667445598253E-04, 1.16405271474738E-04, 1.09798298372713E-04, 7 1.03772410422993E-04, 9.82626078369363E-05, 9.32120517249503E-05, 8 8.85710852478712E-05, 8.42963105715700E-05, 8.03497548407791E-05, 9 6.93735541354589E-04, 2.32241745182922E-04,-1.41986273556691E-05, A-1.16444931672049E-04,-1.50803558053049E-04,-1.55121924918096E-04, B-1.46809756646466E-04,-1.33815503867491E-04,-1.19744975684254E-04, C-1.06184319207974E-04,-9.37699549891194E-05,-8.26923045588193E-05, D-7.29374348155221E-05,-6.44042357721016E-05,-5.69611566009369E-05, E-5.04731044303562E-05,-4.48134868008883E-05,-3.98688727717599E-05, F-3.55400532972042E-05,-3.17414256609022E-05,-2.83996793904175E-05, G-2.54522720634871E-05,-2.28459297164725E-05,-2.05352753106481E-05, H-1.84816217627666E-05,-1.66519330021394E-05/ DATA ALFA2 /-3.54211971457744E-04,-1.56161263945159E-04, 1 3.04465503594936E-05, 1.30198655773243E-04, 1.67471106699712E-04, 2 1.70222587683593E-04, 1.56501427608595E-04, 1.36339170977445E-04, 3 1.14886692029825E-04, 9.45869093034688E-05, 7.64498419250898E-05, 4 6.07570334965197E-05, 4.74394299290509E-05, 3.62757512005344E-05, 5 2.69939714979225E-05, 1.93210938247939E-05, 1.30056674793963E-05, 6 7.82620866744497E-06, 3.59257485819352E-06, 1.44040049814252E-07, 7-2.65396769697939E-06,-4.91346867098486E-06,-6.72739296091248E-06, 8-8.17269379678658E-06,-9.31304715093561E-06,-1.02011418798016E-05, 9 3.78194199201773E-04, 2.02471952761816E-04,-6.37938506318862E-05, A-2.38598230603006E-04,-3.10916256027362E-04,-3.13680115247576E-04, B-2.78950273791323E-04,-2.28564082619141E-04,-1.75245280340847E-04, C-1.25544063060690E-04,-8.22982872820208E-05,-4.62860730588116E-05, D-1.72334302366962E-05, 5.60690482304602E-06, 2.31395443148287E-05, E 3.62642745856794E-05, 4.58006124490189E-05, 5.24595294959114E-05, F 5.68396208545815E-05, 5.94349820393104E-05, 6.06478527578422E-05, G 6.08023907788436E-05, 6.01577894539460E-05, 5.89199657344698E-05, H 5.72515823777593E-05, 5.52804375585853E-05/ DATA BETA1 / 1.79988721413553E-02, 5.59964911064388E-03, 1 2.88501402231133E-03, 1.80096606761054E-03, 1.24753110589199E-03, 2 9.22878876572938E-04, 7.14430421727287E-04, 5.71787281789705E-04, 3 4.69431007606482E-04, 3.93232835462917E-04, 3.34818889318298E-04, 4 2.88952148495752E-04, 2.52211615549573E-04, 2.22280580798883E-04, 5 1.97541838033063E-04, 1.76836855019718E-04, 1.59316899661821E-04, 6 1.44347930197334E-04, 1.31448068119965E-04, 1.20245444949303E-04, 7 1.10449144504599E-04, 1.01828770740567E-04, 9.41998224204238E-05, 8 8.74130545753834E-05, 8.13466262162801E-05, 7.59002269646219E-05, 9-1.49282953213429E-03,-8.78204709546389E-04,-5.02916549572035E-04, A-2.94822138512746E-04,-1.75463996970783E-04,-1.04008550460816E-04, B-5.96141953046458E-05,-3.12038929076098E-05,-1.26089735980230E-05, C-2.42892608575730E-07, 8.05996165414274E-06, 1.36507009262147E-05, D 1.73964125472926E-05, 1.98672978842134E-05, 2.14463263790823E-05, E 2.23954659232457E-05, 2.28967783814713E-05, 2.30785389811178E-05, F 2.30321976080909E-05, 2.28236073720349E-05, 2.25005881105292E-05, G 2.20981015361991E-05, 2.16418427448104E-05, 2.11507649256221E-05, H 2.06388749782171E-05, 2.01165241997082E-05/ DATA BETA2 / 5.52213076721293E-04, 4.47932581552385E-04, 1 2.79520653992021E-04, 1.52468156198447E-04, 6.93271105657044E-05, 2 1.76258683069991E-05,-1.35744996343269E-05,-3.17972413350427E-05, 3-4.18861861696693E-05,-4.69004889379141E-05,-4.87665447413787E-05, 4-4.87010031186735E-05,-4.74755620890087E-05,-4.55813058138628E-05, 5-4.33309644511266E-05,-4.09230193157750E-05,-3.84822638603221E-05, 6-3.60857167535411E-05,-3.37793306123367E-05,-3.15888560772110E-05, 7-2.95269561750807E-05,-2.75978914828336E-05,-2.58006174666884E-05, 8-2.41308356761280E-05,-2.25823509518346E-05,-2.11479656768913E-05, 9-4.74617796559960E-04,-4.77864567147321E-04,-3.20390228067038E-04, A-1.61105016119962E-04,-4.25778101285435E-05, 3.44571294294968E-05, B 7.97092684075675E-05, 1.03138236708272E-04, 1.12466775262204E-04, C 1.13103642108481E-04, 1.08651634848774E-04, 1.01437951597662E-04, D 9.29298396593364E-05, 8.40293133016090E-05, 7.52727991349134E-05, E 6.69632521975731E-05, 5.92564547323195E-05, 5.22169308826976E-05, F 4.58539485165361E-05, 4.01445513891487E-05, 3.50481730031328E-05, G 3.05157995034347E-05, 2.64956119950516E-05, 2.29363633690998E-05, H 1.97893056664022E-05, 1.70091984636413E-05/ DATA BETA3 / 7.36465810572578E-04, 8.72790805146194E-04, 1 6.22614862573135E-04, 2.85998154194304E-04, 3.84737672879366E-06, 2-1.87906003636972E-04,-2.97603646594555E-04,-3.45998126832656E-04, 3-3.53382470916038E-04,-3.35715635775049E-04,-3.04321124789040E-04, 4-2.66722723047613E-04,-2.27654214122820E-04,-1.89922611854562E-04, 5-1.55058918599094E-04,-1.23778240761874E-04,-9.62926147717644E-05, 6-7.25178327714425E-05,-5.22070028895634E-05,-3.50347750511901E-05, 7-2.06489761035552E-05,-8.70106096849767E-06, 1.13698686675100E-06, 8 9.16426474122779E-06, 1.56477785428873E-05, 2.08223629482467E-05/ DATA GAMA / 6.29960524947437E-01, 2.51984209978975E-01, 1 1.54790300415656E-01, 1.10713062416159E-01, 8.57309395527395E-02, 2 6.97161316958684E-02, 5.86085671893714E-02, 5.04698873536311E-02, 3 4.42600580689155E-02, 3.93720661543510E-02, 3.54283195924455E-02, 4 3.21818857502098E-02, 2.94646240791158E-02, 2.71581677112934E-02, 5 2.51768272973862E-02, 2.34570755306079E-02, 2.19508390134907E-02, 6 2.06210828235646E-02, 1.94388240897881E-02, 1.83810633800683E-02, 7 1.74293213231963E-02, 1.65685837786612E-02, 1.57865285987918E-02, 8 1.50729501494096E-02, 1.44193250839955E-02, 1.38184805735342E-02/ C TEST INPUT ARGUMENTS KT = 1 IF (N-1) 710, 10, 20 10 KT = 2 20 NN = N IF (X) 720, 30, 80 30 IF (ALPHA) 700, 40, 50 40 Y(1) = 1. IF (N.EQ.1) RETURN I1 = 2 GO TO 60 50 I1 = 1 60 DO 70 I=I1,N Y(I) = 0. 70 CONTINUE RETURN 80 CONTINUE IF (ALPHA.LT.0.) GO TO 700 DFN = DBLE(FLOAT(N)) + DBLE(ALPHA) - 1.D+0 FNU = DFN XO2 = X*.5 SXO2 = XO2*XO2 C DECISION TREE FOR REGION WHERE SERIES, ASYMPTOTIC EXPANSION FOR X C TO INFINITY AND ASYMPTOTIC EXPANSION FOR NU TO INFINITY ARE C APPLIED. IF (SXO2.LE.(FNU+1.)) GO TO 90 TA = AMAX1(20.,FNU) IF (X.GT.TA) GO TO 120 IF (X.GT.12.) GO TO 110 XO2L = ALOG(XO2) NS = SXO2 - FNU GO TO 100 90 FN = FNU FNP1 = FN + 1. XO2L = ALOG(XO2) IS = KT IF (X.LE.0.5) GO TO 330 NS = 0 100 DFN = DFN + DBLE(FLOAT(NS)) FN = DFN FNP1 = FN + 1. IS = KT IF (N-1+NS.GT.0) IS = 3 GO TO 330 110 NS = AMAX1(36.-FNU,0.) DFN = DFN + DBLE(FLOAT(NS)) FN = DFN IS = KT IF (N-1+NS.GT.0) IS = 3 GO TO 130 120 CONTINUE RTX = SQRT(X) TAU = RTWO*RTX TA = TAU + FNULIM(KT) IF (FNU.LE.TA) GO TO 480 FN = FNU IS = KT C UNIFORM ASYMPTOTIC EXPANSION FOR NU TO INFINITY 130 CONTINUE XX = X/FN W2 = 1. - XX*XX ABW2 = ABS(W2) RA = SQRT(ABW2) IF (ABW2.GT.0.2775) GO TO 220 C CASES NEAR X=FN, ABS(1.-(X/FN)**2).LE.0.2775 C COEFFICIENTS OF ASYMPTOTIC EXPANSION BY SERIES C ZETA AND TRUNCATION FOR A(ZETA) AND B(ZETA) SERIES C KMAX IS TRUNCATION INDEX FOR A(ZETA) AND B(ZETA) SERIES=MAX(2,SA) SA = 0. IF (ABW2.EQ.0.) GO TO 140 SA = TOLS/ALOG(ABW2) 140 SB = SA DO 150 I=1,5 KMAX(I) = AMAX1(SA,2.) SA = SA + SB 150 CONTINUE KB = KMAX(5) KLAST = KB - 1 SA = GAMA(KB) DO 160 K=1,KLAST KB = KB - 1 SA = SA*W2 + GAMA(KB) 160 CONTINUE Z = W2*SA AZ = ABS(Z) RTZ = SQRT(AZ) FN13 = FN**CON2 RTARY = RTZ*FN13 ARY = -RTARY*RTARY AZ32 = AZ*RTZ*CON1 ACZ = FN*AZ32 IF (Z.LE.0.) GO TO 170 C TEST FOR UNDERFLOW, 1.E-280=EXP(-644.), ONE WORD LENGTH C UP FROM UNDERFLOW LIMIT OF CDC 6600 IF (ACZ.GT.ELIM2) GO TO 380 ARY = -ARY 170 PHI = SQRT(SQRT(SA+SA+SA+SA)) C B(ZETA) FOR S=0 KB = KMAX(5) KLAST = KB - 1 SB = BETA(KB,1) DO 180 K=1,KLAST KB = KB - 1 SB = SB*W2 + BETA(KB,1) 180 CONTINUE KSP1 = 1 FN2 = FN*FN RFN2 = 1./FN2 RDEN = 1. ASUM = 1. RELB = TOL*ABS(SB) BSUM = SB DO 200 KS=1,4 KSP1 = KSP1 + 1 RDEN = RDEN*RFN2 C A(ZETA) AND B(ZETA) FOR S=1,2,3,4 KB = KMAX(5-KS) KLAST = KB - 1 SA = ALFA(KB,KS) SB = BETA(KB,KSP1) DO 190 K=1,KLAST KB = KB - 1 SA = SA*W2 + ALFA(KB,KS) SB = SB*W2 + BETA(KB,KSP1) 190 CONTINUE TA = SA*RDEN TB = SB*RDEN ASUM = ASUM + TA BSUM = BSUM + TB IF (ABS(TA).LE.TOL .AND. ABS(TB).LE.RELB) GO TO 210 200 CONTINUE 210 CONTINUE BSUM = BSUM/(FN*FN13) GO TO 300 220 CONTINUE TAU = 1./RA T2 = 1./W2 IF (W2.GE.0.) GO TO 230 C CASES FOR (X/FN).GT.SQRT(1.2775) AZ32 = ABS(RA-ATAN(RA)) ACZ = AZ32*FN CZ = -ACZ Z32 = 1.5*AZ32 RTZ = Z32**CON2 FN13 = FN**CON2 RTARY = RTZ*FN13 ARY = -RTARY*RTARY GO TO 240 230 CONTINUE C CASES FOR (X/FN).LT.SQRT(0.7225) AZ32 = ABS(ALOG((1.+RA)/XX)-RA) C TEST FOR UNDERFLOW, 1.E-280 = EXP(-644.), ONE WORD LENGTH C UP FROM UNDERFLOW LIMIT OF CDC 6600 ACZ = AZ32*FN CZ = ACZ IF (ACZ.GT.ELIM2) GO TO 380 Z32 = 1.5*AZ32 RTZ = Z32**CON2 FN13 = FN**CON2 RTARY = RTZ*FN13 ARY = RTARY*RTARY 240 CONTINUE PHI = SQRT((RTZ+RTZ)*TAU) TB = 1. ASUM = 1. TFN = TAU/FN UPOL(1) = 1. UPOL(2) = (C(1,1)*T2+C(2,1))*TFN RCZ = CON1/CZ CRZ32 = CON548*RCZ BSUM = UPOL(2) + CRZ32 RELB = TOL*ABS(BSUM) AP = TFN KS = 0 KP1 = 2 RZDEN = RCZ DO 280 LR=2,8,2 C COMPUTE TWO U POLYNOMIALS FOR NEXT A(ZETA) AND B(ZETA) LRP1 = LR + 1 DO 260 K=LR,LRP1 KS = KS + 1 KP1 = KP1 + 1 S1 = C(1,K) DO 250 J=2,KP1 S1 = S1*T2 + C(J,K) 250 CONTINUE AP = AP*TFN UPOL(KP1) = AP*S1 CR(KS) = BR(KS)*RZDEN RZDEN = RZDEN*RCZ DR(KS) = AR(KS)*RZDEN 260 CONTINUE SUMA = UPOL(LRP1) SUMB = UPOL(LR+2) + UPOL(LRP1)*CRZ32 JU = LRP1 DO 270 JR=1,LR JU = JU - 1 SUMA = SUMA + CR(JR)*UPOL(JU) SUMB = SUMB + DR(JR)*UPOL(JU) 270 CONTINUE TB = -TB IF (W2.GT.0.) TB = ABS(TB) ASUM = ASUM + SUMA*TB BSUM = BSUM + SUMB*TB IF (ABS(SUMA).LE.TOL .AND. ABS(SUMB).LE.RELB) GO TO 290 280 CONTINUE 290 TB = RTARY IF (W2.GT.0.) TB = -TB BSUM = BSUM/TB 300 CONTINUE CALL JAIRY(ARY, RTARY, ACZ, AI, DAI) TEMP(IS) = PHI*(AI*ASUM+DAI*BSUM)/FN13 GO TO (320, 450, 610), IS 310 TEMP(1) = TEMP(3) KT = 1 320 IS = 2 DFN = DFN - 1.D+0 FN = DFN GO TO 130 C SERIES FOR (X/2)**2.LE.NU+1 330 CONTINUE GLN = GAMLN(FNP1) ARG = FN*XO2L - GLN IF (ARG.LT.-ELIM1) GO TO 400 EARG = EXP(ARG) 340 CONTINUE S = 1. AK = 3. T2 = 1. T = 1. S1 = FN DO 350 K=1,17 S2 = T2 + S1 T = -T*SXO2/S2 S = S + T IF (ABS(T).LT.TOL) GO TO 360 T2 = T2 + AK AK = AK + 2. S1 = S1 + FN 350 CONTINUE 360 CONTINUE TEMP(IS) = S*EARG GO TO (370, 450, 600), IS 370 EARG = EARG*FN/XO2 DFN = DFN - 1.D+0 FN = DFN IS = 2 GO TO 340 C SET UNDERFLOW VALUE AND UPDATE PARAMETERS 380 Y(NN) = 0. NN = NN - 1 DFN = DFN - 1.D+0 FN = DFN IF (NN-1) 440, 390, 130 390 KT = 2 IS = 2 GO TO 130 400 Y(NN) = 0. NN = NN - 1 FNP1 = FN DFN = DFN - 1.D+0 FN = DFN IF (NN-1) 440, 410, 420 410 KT = 2 IS = 2 420 IF (SXO2.LE.FNP1) GO TO 430 GO TO 130 430 ARG = ARG - XO2L + ALOG(FNP1) IF (ARG.LT.-ELIM1) GO TO 400 GO TO 330 440 NZ = N - NN PRINT 99996, NZ, ALPHA, N, X RETURN C BACKWARD RECURSION SECTION 450 CONTINUE NZ = N - NN IF (NZ.NE.0) PRINT 99996, NZ, ALPHA, N, X IF (KT.EQ.2) GO TO 470 C BACKWARD RECUR FROM INDEX ALPHA+NN-1 TO ALPHA Y(NN) = TEMP(1) Y(NN-1) = TEMP(2) IF (NN.EQ.2) RETURN DX = X TRX = 2.D+0/DX DTM = DFN*TRX TM = DTM K = NN + 1 DO 460 I=3,NN K = K - 1 Y(K-2) = TM*Y(K-1) - Y(K) DTM = DTM - TRX TM = DTM 460 CONTINUE RETURN 470 Y(1) = TEMP(2) RETURN C ASYMPTOTIC EXPANSION FOR X TO INFINITY WITH FORWARD RECURSION IN C OSCILLATORY REGION X.GT.MAX(20, NU), PROVIDED THE LAST MEMBER C OF THE SEQUENCE IS ALSO IN THE REGION. 480 CONTINUE IN = ALPHA - TAU + 2. IF (IN.LE.0) GO TO 490 INP1 = IN + 1 DALPHA = ALPHA - FLOAT(INP1) KT = 1 GO TO 500 490 DALPHA = ALPHA IN = 0 500 IS = KT ARG = X - PIDT*DALPHA - PDF SA = SIN(ARG) SB = COS(ARG) RA = RTTP/RTX ETX = 8.*X 510 DX = DALPHA DX = DX + DX DTM = DX*DX T2 = DTM - 1.D+0 T2 = T2/ETX S2 = T2 RELB = TOL*ABS(T2) T1 = ETX S1 = 1. FN = 1. AK = 8. DO 520 K=1,13 T1 = T1 + ETX FN = FN + AK DX = FN TRX = DTM - DX AP = TRX T2 = -T2*AP/T1 S1 = S1 + T2 T1 = T1 + ETX AK = AK + 8. FN = FN + AK DX = FN TRX = DTM - DX AP = TRX T2 = T2*AP/T1 S2 = S2 + T2 IF (ABS(T2).LE.RELB) GO TO 530 AK = AK + 8. 520 CONTINUE 530 TEMP(IS) = RA*(S1*SB-S2*SA) GO TO (540, 550), IS 540 DALPHA = DALPHA + 1. IS = 2 TB = SA SA = -SB SB = TB GO TO 510 C FORWARD RECURSION SECTION 550 IF (KT.EQ.2) GO TO 470 S1 = TEMP(1) S2 = TEMP(2) TX = 2./X TM = DALPHA*TX IF (IN.EQ.0) GO TO 570 C FORWARD RECUR TO INDEX ALPHA DO 560 I=1,IN S = S2 S2 = TM*S2 - S1 TM = TM + TX S1 = S 560 CONTINUE IF (NN.EQ.1) GO TO 590 S = S2 S2 = TM*S2 - S1 TM = TM + TX S1 = S 570 CONTINUE C FORWARD RECUR FROM INDEX ALPHA TO ALPHA+N-1 Y(1) = S1 Y(2) = S2 IF (NN.EQ.2) RETURN DO 580 I=3,NN Y(I) = TM*Y(I-1) - Y(I-2) TM = TM + TX 580 CONTINUE RETURN 590 Y(1) = S2 RETURN C BACKWARD RECURSION WITH NORMALIZATION BY C ASYMPTOTIC EXPANSION FOR NU TO INFINITY OR POWER SERIES. 600 CONTINUE C COMPUTATION OF LAST ORDER FOR SERIES NORMALIZATION KM = AMAX1(3.-FN,0.) TFN = FN + FLOAT(KM) TA = (GLN+TFN-0.9189385332-0.0833333333/TFN)/(TFN+0.5) TA = XO2L - TA TB = -(1.-1.5/TFN)/TFN IN = CE/(-TA+SQRT(TA*TA-CE*TB)) + 1.5 IN = IN + KM GO TO 650 610 CONTINUE C COMPUTATION OF LAST ORDER FOR ASYMPTOTIC EXPANSION NORMALIZATION GLN = AZ32 + RA IF (ARY.GT.30.) GO TO 630 RDEN = (PP(4)*ARY+PP(3))*ARY + 1. RZDEN = PP(1) + PP(2)*ARY TA = RZDEN/RDEN IF (W2.LT.0.10) GO TO 620 TB = GLN/RTARY GO TO 640 620 TB = (1.259921049+0.1679894730*W2)/FN13 GO TO 640 630 CONTINUE TA = CON1*TCE/ACZ TA = ((0.0493827160*TA-0.1111111111)*TA+0.6666666667)*TA*ARY IF (W2.LT.0.10) GO TO 620 TB = GLN/RTARY 640 IN = TA/TB + 1.5 IF (IN.GT.INLIM) GO TO 310 650 DX = FLOAT(IN) DTM = DFN + DX DX = X TRX = 2.D+0/DX DTM = DTM*TRX TM = DTM TA = 0. TB = TOL KK = 1 660 CONTINUE C BACKWARD RECUR UNINDEXED DO 670 I=1,IN S = TB TB = TM*TB - TA TA = S DTM = DTM - TRX TM = DTM 670 CONTINUE C NORMALIZATION IF (KK.NE.1) GO TO 680 TA = (TA/TB)*TEMP(3) TB = TEMP(3) KK = 2 IN = NS IF (NS.NE.0) GO TO 660 680 Y(NN) = TB NZ = N - NN IF (NZ.NE.0) PRINT 99996, NZ, ALPHA, N, X IF (NN.EQ.1) RETURN TB = TM*TB - TA DTM = DTM - TRX TM = DTM K = NN - 1 Y(K) = TB IF (NN.EQ.2) RETURN KM = K - 1 C BACKWARD RECUR INDEXED DO 690 I=1,KM Y(K-1) = TM*Y(K) - Y(K+1) DTM = DTM - TRX TM = DTM K = K - 1 690 CONTINUE RETURN 700 PRINT 99999, ALPHA, N, X STOP 710 PRINT 99998, ALPHA, N, X STOP 720 PRINT 99997, ALPHA, N, X STOP 99999 FORMAT (51H0JBESS CALLED WITH THE ORDER, ALPHA, LESS THAN ZERO * /7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) 99998 FORMAT (34H0JBESS CALLED WITH N LESS THAN ONE/7H ALPHA=, * E25.14,3H N=,I6,3H X=,E25.14) 99997 FORMAT (35H0JBESS CALLED WITH X LESS THAN ZERO/7H ALPHA=, * E25.14,3H N=,I6,3H X=,E25.14) 99996 FORMAT (25H0UNDERFLOW IN JBESS, LAST,I6,20H VALUE(S) OF Y ARRAY, * 17H WERE SET TO ZERO/7H ALPHA=,E25.14,3H N=,I6,3H X=,E25.14) END .