home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE BESJ
- C
- C PURPOSE
- C COMPUTE THE J BESSEL FUNCTION FOR A GIVEN ARGUMENT AND ORDER
- C
- C USAGE
- C CALL BESJ(X,N,BJ,D,IER)
- C
- C DESCRIPTION OF PARAMETERS
- C X -THE ARGUMENT OF THE J BESSEL FUNCTION DESIRED
- C N -THE ORDER OF THE J BESSEL FUNCTION DESIRED
- C BJ -THE RESULTANT J BESSEL FUNCTION
- C D -REQUIRED ACCURACY
- 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 REQUIRED ACCURACY NOT OBTAINED
- C IER=4 RANGE OF N COMPARED TO X NOT CORRECT (SEE REMARKS)
- C
- C REMARKS
- C N MUST BE GREATER THAN OR EQUAL TO ZERO, BUT IT MUST BE
- C LESS THAN
- C 20+10*X-X** 2/3 FOR X LESS THAN OR EQUAL TO 15
- C 90+X/2 FOR X GREATER THAN 15
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C NONE
- C
- C METHOD
- C RECURRENCE RELATION TECHNIQUE DESCRIBED BY H. GOLDSTEIN AND
- C R.M. THALER,'RECURRENCE TECHNIQUES FOR THE CALCULATION OF
- C BESSEL FUNCTIONS',M.T.A.C.,V.13,PP.102-108 AND I.A. STEGUN
- C AND M. ABRAMOWITZ,'GENERATION OF BESSEL FUNCTIONS ON HIGH
- C SPEED COMPUTERS',M.T.A.C.,V.11,1957,PP.255-257
- C
- C ..................................................................
- C
- SUBROUTINE BESJ(X,N,BJ,D,IER)
- C
- BJ=.0
- IF(N)10,20,20
- 10 IER=1
- RETURN
- 20 IF(X)30,30,31
- 30 IER=2
- RETURN
- 31 IF(X-15.)32,32,34
- 32 NTEST=20.+10.*X-X** 2/3
- GO TO 36
- 34 NTEST=90.+X/2.
- 36 IF(N-NTEST)40,38,38
- 38 IER=4
- RETURN
- 40 IER=0
- N1=N+1
- BPREV=.0
- C
- C COMPUTE STARTING VALUE OF M
- C
- IF(X-5.)50,60,60
- 50 MA=X+6.
- GO TO 70
- 60 MA=1.4*X+60./X
- 70 MB=N+IFIX(X)/4+2
- MZERO=MAX0(MA,MB)
- C
- C SET UPPER LIMIT OF M
- C
- MMAX=NTEST
- 100 DO 190 M=MZERO,MMAX,3
- C
- C SET F(M),F(M-1)
- C
- FM1=1.0E-28
- FM=.0
- ALPHA=.0
- IF(M-(M/2)*2)120,110,120
- 110 JT=-1
- GO TO 130
- 120 JT=1
- 130 M2=M-2
- DO 160 K=1,M2
- MK=M-K
- BMK=2.*FLOAT(MK)*FM1/X-FM
- FM=FM1
- FM1=BMK
- IF(MK-N-1)150,140,150
- 140 BJ=BMK
- 150 JT=-JT
- S=1+JT
- 160 ALPHA=ALPHA+BMK*S
- BMK=2.*FM1/X-FM
- IF(N)180,170,180
- 170 BJ=BMK
- 180 ALPHA=ALPHA+BMK
- BJ=BJ/ALPHA
- IF(ABS(BJ-BPREV)-ABS(D*BJ))200,200,190
- 190 BPREV=BJ
- IER=3
- 200 RETURN
- END