2
SUBROUTINE CWRSK (ZR, FNU, KODE, N, Y, NZ, CW, TOL, ELIM, ALIM)
3
C***BEGIN PROLOGUE CWRSK
5
C***PURPOSE Subsidiary to CBESI and CBESK
7
C***TYPE ALL (CWRSK-A, ZWRSK-A)
8
C***AUTHOR Amos, D. E., (SNL)
11
C CWRSK COMPUTES THE I BESSEL FUNCTION FOR RE(Z).GE.0.0 BY
12
C NORMALIZING THE I FUNCTION RATIOS FROM CRATI BY THE WRONSKIAN
14
C***SEE ALSO CBESI, CBESK
15
C***ROUTINES CALLED CBKNU, CRATI, R1MACH
16
C***REVISION HISTORY (YYMMDD)
18
C 910415 Prologue converted to Version 4.0 format. (BAB)
19
C***END PROLOGUE CWRSK
20
COMPLEX CINU, CSCL, CT, CW, C1, C2, RCT, ST, Y, ZR
21
REAL ACT, ACW, ALIM, ASCLE, ELIM, FNU, S1, S2, TOL, YY, R1MACH
22
INTEGER I, KODE, N, NW, NZ
24
C***FIRST EXECUTABLE STATEMENT CWRSK
25
C-----------------------------------------------------------------------
26
C I(FNU+I-1,Z) BY BACKWARD RECURRENCE FOR RATIOS
27
C Y(I)=I(FNU+I,Z)/I(FNU+I-1,Z) FROM CRATI NORMALIZED BY THE
28
C WRONSKIAN WITH K(FNU,Z) AND K(FNU+1,Z) FROM CBKNU.
29
C-----------------------------------------------------------------------
31
CALL CBKNU(ZR, FNU, KODE, 2, CW, NW, TOL, ELIM, ALIM)
33
CALL CRATI(ZR, FNU, N, Y, TOL)
34
C-----------------------------------------------------------------------
35
C RECUR FORWARD ON I(FNU+1,Z) = R(FNU,Z)*I(FNU,Z),
36
C R(FNU+J-1,Z)=Y(J), J=1,...,N
37
C-----------------------------------------------------------------------
38
CINU = CMPLX(1.0E0,0.0E0)
39
IF (KODE.EQ.1) GO TO 10
45
C-----------------------------------------------------------------------
46
C ON LOW EXPONENT MACHINES THE K FUNCTIONS CAN BE CLOSE TO BOTH
47
C THE UNDER AND OVERFLOW LIMITS AND THE NORMALIZATION MUST BE
48
C SCALED TO PREVENT OVER OR UNDERFLOW. CUOIK HAS DETERMINED THAT
49
C THE RESULT IS ON SCALE.
50
C-----------------------------------------------------------------------
52
ASCLE = 1.0E+3*R1MACH(1)/TOL
53
CSCL = CMPLX(1.0E0,0.0E0)
54
IF (ACW.GT.ASCLE) GO TO 20
55
CSCL = CMPLX(1.0E0/TOL,0.0E0)
59
IF (ACW.LT.ASCLE) GO TO 30
60
CSCL = CMPLX(TOL,0.0E0)
65
C-----------------------------------------------------------------------
66
C CINU=CINU*(CONJG(CT)/ABS(CT))*(1.0E0/ABS(CT) PREVENTS
67
C UNDER- OR OVERFLOW PREMATURELY BY SQUARING ABS(CT)
68
C-----------------------------------------------------------------------
71
RCT = CMPLX(1.0E0/ACT,0.0E0)