1      SUBROUTINE ZS1S2(ZRR, ZRI, S1R, S1I, S2R, S2I, NZ, ASCLE, ALIM,
2     * IUF)
3C***BEGIN PROLOGUE  ZS1S2
4C***REFER TO  ZBESK,ZAIRY
5C
6C     ZS1S2 TESTS FOR A POSSIBLE UNDERFLOW RESULTING FROM THE
7C     ADDITION OF THE I AND K FUNCTIONS IN THE ANALYTIC CON-
8C     TINUATION FORMULA WHERE S1=K FUNCTION AND S2=I FUNCTION.
9C     ON KODE=1 THE I AND K FUNCTIONS ARE DIFFERENT ORDERS OF
10C     MAGNITUDE, BUT FOR KODE=2 THEY CAN BE OF THE SAME ORDER
11C     OF MAGNITUDE AND THE MAXIMUM MUST BE AT LEAST ONE
12C     PRECISION ABOVE THE UNDERFLOW LIMIT.
13C
14C***ROUTINES CALLED  ZABS,ZEXPAMOS,ZLOG
15C***END PROLOGUE  ZS1S2
16C     COMPLEX CZERO,C1,S1,S1D,S2,ZR
17      EXTERNAL ZABS
18      DOUBLE PRECISION AA, ALIM, ALN, ASCLE, AS1, AS2, C1I, C1R, S1DI,
19     * S1DR, S1I, S1R, S2I, S2R, ZEROI, ZEROR, ZRI, ZRR, ZABS
20      INTEGER IUF, IDUM, NZ
21      DATA ZEROR,ZEROI  / 0.0D0 , 0.0D0 /
22      NZ = 0
23      AS1 = ZABS(S1R,S1I)
24      AS2 = ZABS(S2R,S2I)
25      IF (S1R.EQ.0.0D0 .AND. S1I.EQ.0.0D0) GO TO 10
26      IF (AS1.EQ.0.0D0) GO TO 10
27      ALN = -ZRR - ZRR + DLOG(AS1)
28      S1DR = S1R
29      S1DI = S1I
30      S1R = ZEROR
31      S1I = ZEROI
32      AS1 = ZEROR
33      IF (ALN.LT.(-ALIM)) GO TO 10
34      CALL ZLOG(S1DR, S1DI, C1R, C1I, IDUM)
35      C1R = C1R - ZRR - ZRR
36      C1I = C1I - ZRI - ZRI
37      CALL ZEXPAMOS(C1R, C1I, S1R, S1I)
38      AS1 = ZABS(S1R,S1I)
39      IUF = IUF + 1
40   10 CONTINUE
41      AA = DMAX1(AS1,AS2)
42      IF (AA.GT.ASCLE) RETURN
43      S1R = ZEROR
44      S1I = ZEROI
45      S2R = ZEROR
46      S2I = ZEROI
47      NZ = 1
48      IUF = 0
49      RETURN
50      END
51