29 lines
1.1 KiB
Fortran
29 lines
1.1 KiB
Fortran
FUNCTION bessy0(x)
|
|
REAL bessy0,x
|
|
CU USES bessj0
|
|
REAL xx,z,bessj0
|
|
DOUBLE PRECISION p1,p2,p3,p4,p5,q1,q2,q3,q4,q5,r1,r2,r3,r4,r5,r6,
|
|
*s1,s2,s3,s4,s5,s6,y
|
|
SAVE p1,p2,p3,p4,p5,q1,q2,q3,q4,q5,r1,r2,r3,r4,r5,r6,s1,s2,s3,s4,
|
|
*s5,s6
|
|
DATA p1,p2,p3,p4,p5/1.d0,-.1098628627d-2,.2734510407d-4,
|
|
*-.2073370639d-5,.2093887211d-6/, q1,q2,q3,q4,q5/-.1562499995d-1,
|
|
*.1430488765d-3,-.6911147651d-5,.7621095161d-6,-.934945152d-7/
|
|
DATA r1,r2,r3,r4,r5,r6/-2957821389.d0,7062834065.d0,
|
|
*-512359803.6d0,10879881.29d0,-86327.92757d0,228.4622733d0/,s1,s2,
|
|
*s3,s4,s5,s6/40076544269.d0,745249964.8d0,7189466.438d0,
|
|
*47447.26470d0,226.1030244d0,1.d0/
|
|
if(x.lt.8.)then
|
|
y=x**2
|
|
bessy0=(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6)))))/(s1+y*(s2+y*(s3+y*
|
|
*(s4+y*(s5+y*s6)))))+.636619772*bessj0(x)*log(x)
|
|
else
|
|
z=8./x
|
|
y=z**2
|
|
xx=x-.785398164
|
|
bessy0=sqrt(.636619772/x)*(sin(xx)*(p1+y*(p2+y*(p3+y*(p4+y*
|
|
*p5))))+z*cos(xx)*(q1+y*(q2+y*(q3+y*(q4+y*q5)))))
|
|
endif
|
|
return
|
|
END
|