Directory of image this file is from
This file as a plain text file
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