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