FUNCTION bessj(n,x) INTEGER n,IACC REAL bessj,x,BIGNO,BIGNI PARAMETER (IACC=40,BIGNO=1.e10,BIGNI=1.e-10) CU USES bessj0,bessj1 INTEGER j,jsum,m REAL ax,bj,bjm,bjp,sum,tox,bessj0,bessj1 if(n.lt.2)pause 'bad argument n in bessj' ax=abs(x) if(ax.eq.0.)then bessj=0. else if(ax.gt.float(n))then tox=2./ax bjm=bessj0(ax) bj=bessj1(ax) do 11 j=1,n-1 bjp=j*tox*bj-bjm bjm=bj bj=bjp 11 continue bessj=bj else tox=2./ax m=2*((n+int(sqrt(float(IACC*n))))/2) bessj=0. jsum=0 sum=0. bjp=0. bj=1. do 12 j=m,1,-1 bjm=j*tox*bj-bjp bjp=bj bj=bjm if(abs(bj).gt.BIGNO)then bj=bj*BIGNI bjp=bjp*BIGNI bessj=bessj*BIGNI sum=sum*BIGNI endif if(jsum.ne.0)sum=sum+bj jsum=1-jsum if(j.eq.n)bessj=bjp 12 continue sum=2.*sum-bj bessj=bessj/sum endif if(x.lt.0..and.mod(n,2).eq.1)bessj=-bessj return END