1*DECK ZBINU
2      SUBROUTINE ZBINU (ZR, ZI, FNU, KODE, N, CYR, CYI, NZ, RL, FNUL,
3     +   TOL, ELIM, ALIM)
4C***BEGIN PROLOGUE  ZBINU
5C***SUBSIDIARY
6C***PURPOSE  Subsidiary to ZAIRY, ZBESH, ZBESI, ZBESJ, ZBESK and ZBIRY
7C***LIBRARY   SLATEC
8C***TYPE      ALL (CBINU-A, ZBINU-A)
9C***AUTHOR  Amos, D. E., (SNL)
10C***DESCRIPTION
11C
12C     ZBINU COMPUTES THE I FUNCTION IN THE RIGHT HALF Z PLANE
13C
14C***SEE ALSO  ZAIRY, ZBESH, ZBESI, ZBESJ, ZBESK, ZBIRY
15C***ROUTINES CALLED  ZABS, ZASYI, ZBUNI, ZMLRI, ZSERI, ZUOIK, ZWRSK
16C***REVISION HISTORY  (YYMMDD)
17C   830501  DATE WRITTEN
18C   910415  Prologue converted to Version 4.0 format.  (BAB)
19C***END PROLOGUE  ZBINU
20      DOUBLE PRECISION ALIM, AZ, CWI, CWR, CYI, CYR, DFNU, ELIM, FNU,
21     * FNUL, RL, TOL, ZEROI, ZEROR, ZI, ZR, ZABS
22      INTEGER I, INW, KODE, N, NLAST, NN, NUI, NW, NZ
23      DIMENSION CYR(N), CYI(N), CWR(2), CWI(2)
24      EXTERNAL ZABS
25      DATA ZEROR,ZEROI / 0.0D0, 0.0D0 /
26C***FIRST EXECUTABLE STATEMENT  ZBINU
27      NZ = 0
28      AZ = ZABS(ZR,ZI)
29      NN = N
30      DFNU = FNU + (N-1)
31      IF (AZ.LE.2.0D0) GO TO 10
32      IF (AZ*AZ*0.25D0.GT.DFNU+1.0D0) GO TO 20
33   10 CONTINUE
34C-----------------------------------------------------------------------
35C     POWER SERIES
36C-----------------------------------------------------------------------
37      CALL ZSERI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL, ELIM, ALIM)
38      INW = ABS(NW)
39      NZ = NZ + INW
40      NN = NN - INW
41      IF (NN.EQ.0) RETURN
42      IF (NW.GE.0) GO TO 120
43      DFNU = FNU + (NN-1)
44   20 CONTINUE
45      IF (AZ.LT.RL) GO TO 40
46      IF (DFNU.LE.1.0D0) GO TO 30
47      IF (AZ+AZ.LT.DFNU*DFNU) GO TO 50
48C-----------------------------------------------------------------------
49C     ASYMPTOTIC EXPANSION FOR LARGE Z
50C-----------------------------------------------------------------------
51   30 CONTINUE
52      CALL ZASYI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, RL, TOL, ELIM,
53     * ALIM)
54      IF (NW.LT.0) GO TO 130
55      GO TO 120
56   40 CONTINUE
57      IF (DFNU.LE.1.0D0) GO TO 70
58   50 CONTINUE
59C-----------------------------------------------------------------------
60C     OVERFLOW AND UNDERFLOW TEST ON I SEQUENCE FOR MILLER ALGORITHM
61C-----------------------------------------------------------------------
62      CALL ZUOIK(ZR, ZI, FNU, KODE, 1, NN, CYR, CYI, NW, TOL, ELIM,
63     * ALIM)
64      IF (NW.LT.0) GO TO 130
65      NZ = NZ + NW
66      NN = NN - NW
67      IF (NN.EQ.0) RETURN
68      DFNU = FNU+(NN-1)
69      IF (DFNU.GT.FNUL) GO TO 110
70      IF (AZ.GT.FNUL) GO TO 110
71   60 CONTINUE
72      IF (AZ.GT.RL) GO TO 80
73   70 CONTINUE
74C-----------------------------------------------------------------------
75C     MILLER ALGORITHM NORMALIZED BY THE SERIES
76C-----------------------------------------------------------------------
77      CALL ZMLRI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, TOL)
78      IF(NW.LT.0) GO TO 130
79      GO TO 120
80   80 CONTINUE
81C-----------------------------------------------------------------------
82C     MILLER ALGORITHM NORMALIZED BY THE WRONSKIAN
83C-----------------------------------------------------------------------
84C-----------------------------------------------------------------------
85C     OVERFLOW TEST ON K FUNCTIONS USED IN WRONSKIAN
86C-----------------------------------------------------------------------
87      CALL ZUOIK(ZR, ZI, FNU, KODE, 2, 2, CWR, CWI, NW, TOL, ELIM,
88     * ALIM)
89      IF (NW.GE.0) GO TO 100
90      NZ = NN
91      DO 90 I=1,NN
92        CYR(I) = ZEROR
93        CYI(I) = ZEROI
94   90 CONTINUE
95      RETURN
96  100 CONTINUE
97      IF (NW.GT.0) GO TO 130
98      CALL ZWRSK(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, CWR, CWI, TOL,
99     * ELIM, ALIM)
100      IF (NW.LT.0) GO TO 130
101      GO TO 120
102  110 CONTINUE
103C-----------------------------------------------------------------------
104C     INCREMENT FNU+NN-1 UP TO FNUL, COMPUTE AND RECUR BACKWARD
105C-----------------------------------------------------------------------
106      NUI = FNUL-DFNU + 1
107      NUI = MAX(NUI,0)
108      CALL ZBUNI(ZR, ZI, FNU, KODE, NN, CYR, CYI, NW, NUI, NLAST, FNUL,
109     * TOL, ELIM, ALIM)
110      IF (NW.LT.0) GO TO 130
111      NZ = NZ + NW
112      IF (NLAST.EQ.0) GO TO 120
113      NN = NLAST
114      GO TO 60
115  120 CONTINUE
116      RETURN
117  130 CONTINUE
118      NZ = -1
119      IF(NW.EQ.(-2)) NZ=-2
120      RETURN
121      END
122