C C .................................................................. C C SUBROUTINE BESY C C PURPOSE C COMPUTE THE Y BESSEL FUNCTION FOR A GIVEN ARGUMENT AND ORDER C C USAGE C CALL BESY(X,N,BY,IER) C C DESCRIPTION OF PARAMETERS C X -THE ARGUMENT OF THE Y BESSEL FUNCTION DESIRED C N -THE ORDER OF THE Y BESSEL FUNCTION DESIRED C BY -THE RESULTANT Y BESSEL FUNCTION C IER-RESULTANT ERROR CODE WHERE C IER=0 NO ERROR C IER=1 N IS NEGATIVE C IER=2 X IS NEGATIVE OR ZERO C IER=3 BY HAS EXCEEDED MAGNITUDE OF 10**70 C C REMARKS C VERY SMALL VALUES OF X MAY CAUSE THE RANGE OF THE LIBRARY C FUNCTION ALOG TO BE EXCEEDED C X MUST BE GREATER THAN ZERO C N MUST BE GREATER THAN OR EQUAL TO ZERO C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C NONE C C METHOD C RECURRENCE RELATION AND POLYNOMIAL APPROXIMATION TECHNIQUE C AS DESCRIBED BY A.J.M.HITCHCOCK,'POLYNOMIAL APPROXIMATIONS C TO BESSEL FUNCTIONS OF ORDER ZERO AND ONE AND TO RELATED C FUNCTIONS', M.T.A.C., V.11,1957,PP.86-88, AND G.N. WATSON, C 'A TREATISE ON THE THEORY OF BESSEL FUNCTIONS', CAMBRIDGE C UNIVERSITY PRESS, 1958, P. 62 C C .................................................................. C SUBROUTINE BESY(X,N,BY,IER) C C CHECK FOR ERRORS IN N AND X C IF(N)180,10,10 10 IER=0 IF(X)190,190,20 C C BRANCH IF X LESS THAN OR EQUAL 4 C 20 IF(X-4.0)40,40,30 C C COMPUTE Y0 AND Y1 FOR X GREATER THAN 4 C 30 T1=4.0/X T2=T1*T1 P0=((((-.0000037043*T2+.0000173565)*T2-.0000487613)*T2 1 +.00017343)*T2-.001753062)*T2+.3989423 Q0=((((.0000032312*T2-.0000142078)*T2+.0000342468)*T2 1 -.0000869791)*T2+.0004564324)*T2-.01246694 P1=((((.0000042414*T2-.0000200920)*T2+.0000580759)*T2 1 -.000223203)*T2+.002921826)*T2+.3989423 Q1=((((-.0000036594*T2+.00001622)*T2-.0000398708)*T2 1 +.0001064741)*T2-.0006390400)*T2+.03740084 A=2.0/SQRT(X) B=A*T1 C=X-.7853982 Y0=A*P0*SIN(C)+B*Q0*COS(C) Y1=-A*P1*COS(C)+B*Q1*SIN(C) GO TO 90 C C COMPUTE Y0 AND Y1 FOR X LESS THAN OR EQUAL TO 4 C 40 XX=X/2. X2=XX*XX T=ALOG(XX)+.5772157 SUM=0. TERM=T Y0=T DO 70 L=1,15 IF(L-1)50,60,50 50 SUM=SUM+1./FLOAT(L-1) 60 FL=L TS=T-SUM TERM=(TERM*(-X2)/FL**2)*(1.-1./(FL*TS)) 70 Y0=Y0+TERM TERM = XX*(T-.5) SUM=0. Y1=TERM DO 80 L=2,16 SUM=SUM+1./FLOAT(L-1) FL=L FL1=FL-1. TS=T-SUM TERM=(TERM*(-X2)/(FL1*FL))*((TS-.5/FL)/(TS+.5/FL1)) 80 Y1=Y1+TERM PI2=.6366198 Y0=PI2*Y0 Y1=-PI2/X+PI2*Y1 C C CHECK IF ONLY Y0 OR Y1 IS DESIRED C 90 IF(N-1)100,100,130 C C RETURN EITHER Y0 OR Y1 AS REQUIRED C 100 IF(N)110,120,110 110 BY=Y1 GO TO 170 120 BY=Y0 GO TO 170 C C PERFORM RECURRENCE OPERATIONS TO FIND YN(X) C 130 YA=Y0 YB=Y1 K=1 140 T=FLOAT(2*K)/X YC=T*YB-YA IF(ABS(YC)-1.7E33)145,145,141 141 IER=3 RETURN 145 K=K+1 IF(K-N)150,160,150 150 YA=YB YB=YC GO TO 140 160 BY=YC 170 RETURN 180 IER=1 RETURN 190 IER=2 RETURN END