zs1s2.f 1.5 KB

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