123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- SUBROUTINE ZUOIK (ZR, ZI, FNU, KODE, IKFLG, N, YR, YI, NUF, TOL,
- + ELIM, ALIM)
- C***BEGIN PROLOGUE ZUOIK
- C***SUBSIDIARY
- C***PURPOSE Subsidiary to ZBESH, ZBESI and ZBESK
- C***LIBRARY SLATEC
- C***TYPE ALL (CUOIK-A, ZUOIK-A)
- C***AUTHOR Amos, D. E., (SNL)
- C***DESCRIPTION
- C
- C ZUOIK COMPUTES THE LEADING TERMS OF THE UNIFORM ASYMPTOTIC
- C EXPANSIONS FOR THE I AND K FUNCTIONS AND COMPARES THEM
- C (IN LOGARITHMIC FORM) TO ALIM AND ELIM FOR OVER AND UNDERFLOW
- C WHERE ALIM.LT.ELIM. IF THE MAGNITUDE, BASED ON THE LEADING
- C EXPONENTIAL, IS LESS THAN ALIM OR GREATER THAN -ALIM, THEN
- C THE RESULT IS ON SCALE. IF NOT, THEN A REFINED TEST USING OTHER
- C MULTIPLIERS (IN LOGARITHMIC FORM) IS MADE BASED ON ELIM. HERE
- C EXP(-ELIM)=SMALLEST MACHINE NUMBER*1.0E+3 AND EXP(-ALIM)=
- C EXP(-ELIM)/TOL
- C
- C IKFLG=1 MEANS THE I SEQUENCE IS TESTED
- C =2 MEANS THE K SEQUENCE IS TESTED
- C NUF = 0 MEANS THE LAST MEMBER OF THE SEQUENCE IS ON SCALE
- C =-1 MEANS AN OVERFLOW WOULD OCCUR
- C IKFLG=1 AND NUF.GT.0 MEANS THE LAST NUF Y VALUES WERE SET TO
- C
- C
- C
- C
- C
- C***SEE
- C***ROUTINES
- C***REVISION
- C
- C
- C
- C***END
- C
- C
- DOUBLE
- * ASCLE, AX, AY, BSUMI, BSUMR, CWRKI, CWRKR, CZI, CZR, ELIM, FNN,
- * FNU, GNN, GNU, PHII, PHIR, RCZ, STR, STI, SUMI, SUMR, TOL, YI,
- * YR, ZBI, ZBR, ZEROI, ZEROR, ZETA1I, ZETA1R, ZETA2I, ZETA2R, ZI,
- * ZNI, ZNR, ZR, ZRI, ZRR, D1MACH, ZABS
- INTEGER
- DIMENSION
- EXTERNAL
- DATA / 0.0D0, 0.0D0 /
- DATA / 1.265512123484645396D+00 /
- C***FIRST
- NUF
- NN
- ZRR
- ZRI
- IF
- ZRR
- ZRI
- 10 CONTINUE
- ZBR
- ZBI
- AX
- AY
- IFORM
- IF
- GNU
- IF
- FNN
- GNN
- GNU
- 20 CONTINUE
- C-----------------------------------------------------------------------
- C
- C
- C
- C-----------------------------------------------------------------------
- IF
- INIT
- CALL
- * ZETA1R, ZETA1I, ZETA2R, ZETA2I, SUMR, SUMI, CWRKR, CWRKI)
- CZR
- CZI
- GO
- 30 CONTINUE
- ZNR
- ZNI
- IF
- ZNR
- 40 CONTINUE
- CALL
- * ZETA1I, ZETA2R, ZETA2I, ASUMR, ASUMI, BSUMR, BSUMI)
- CZR
- CZI
- AARG
- 50 CONTINUE
- IF
- CZR
- CZI
- 60 CONTINUE
- IF
- CZR
- CZI
- 70 CONTINUE
- APHI
- RCZ
- C-----------------------------------------------------------------------
- C
- C-----------------------------------------------------------------------
- IF
- IF
- RCZ
- IF
- IF
- GO
- 80 CONTINUE
- C-----------------------------------------------------------------------
- C
- C-----------------------------------------------------------------------
- IF
- IF
- RCZ
- IF
- IF
- 90 CONTINUE
- DO
- YR(I)
- YI(I)
- 100 CONTINUE
- NUF
- RETURN
- 110 CONTINUE
- ASCLE /TOL
- CALL ZLOG(PHIR, PHII, STR, STI, IDUM)
- CZR = CZR + STR
- CZI = CZI + STI
- IF (IFORM.EQ.1) GO TO 120
- CALL ZLOG(ARGR, ARGI, STR, STI, IDUM)
- CZR = CZR - 0.25D0*STR - AIC
- CZI = CZI - 0.25D0*STI
- 120 CONTINUE
- AX = EXP(RCZ)/
- AY
- CZR
- CZI
- CALL
- IF
- 130 CONTINUE
- IF
- IF
- C-----------------------------------------------------------------------
- C
- C-----------------------------------------------------------------------
- 140 CONTINUE
- GNU
- IF
- INIT
- CALL
- * ZETA1R, ZETA1I, ZETA2R, ZETA2I, SUMR, SUMI, CWRKR, CWRKI)
- CZR
- CZI
- GO
- 150 CONTINUE
- CALL
- * ZETA1I, ZETA2R, ZETA2I, ASUMR, ASUMI, BSUMR, BSUMI)
- CZR
- CZI
- AARG
- 160 CONTINUE
- IF
- CZR
- CZI
- 170 CONTINUE
- APHI
- RCZ
- IF
- IF
- RCZ
- IF
- IF
- 180 CONTINUE
- YR(NN)
- YI(NN)
- NN
- NUF
- IF
- GO
- 190 CONTINUE
- ASCLE /TOL
- CALL ZLOG(PHIR, PHII, STR, STI, IDUM)
- CZR = CZR + STR
- CZI = CZI + STI
- IF (IFORM.EQ.1) GO TO 200
- CALL ZLOG(ARGR, ARGI, STR, STI, IDUM)
- CZR = CZR - 0.25D0*STR - AIC
- CZI = CZI - 0.25D0*STI
- 200 CONTINUE
- AX = EXP(RCZ)/
- AY
- CZR
- CZI
- CALL
- IF
- RETURN
- 210 CONTINUE
- NUF
- RETURN
- END
|