cacai.f 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. *DECK CACAI
  2. SUBROUTINE CACAI (Z, FNU, KODE, MR, N, Y, NZ, RL, TOL, ELIM, ALIM)
  3. C***BEGIN PROLOGUE CACAI
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to CAIRY
  6. C***LIBRARY SLATEC
  7. C***TYPE ALL (CACAI-A, ZACAI-A)
  8. C***AUTHOR Amos, D. E., (SNL)
  9. C***DESCRIPTION
  10. C
  11. C CACAI APPLIES THE ANALYTIC CONTINUATION FORMULA
  12. C
  13. C K(FNU,ZN*EXP(MP))=K(FNU,ZN)*EXP(-MP*FNU) - MP*I(FNU,ZN)
  14. C MP=PI*MR*CMPLX(0.0,1.0)
  15. C
  16. C TO CONTINUE THE K FUNCTION FROM THE RIGHT HALF TO THE LEFT
  17. C HALF Z PLANE FOR USE WITH CAIRY WHERE FNU=1/3 OR 2/3 AND N=1.
  18. C CACAI IS THE SAME AS CACON WITH THE PARTS FOR LARGER ORDERS AND
  19. C RECURRENCE REMOVED. A RECURSIVE CALL TO CACON CAN RESULT IF CACON
  20. C IS CALLED FROM CAIRY.
  21. C
  22. C***SEE ALSO CAIRY
  23. C***ROUTINES CALLED CASYI, CBKNU, CMLRI, CS1S2, CSERI, R1MACH
  24. C***REVISION HISTORY (YYMMDD)
  25. C 830501 DATE WRITTEN
  26. C 910415 Prologue converted to Version 4.0 format. (BAB)
  27. C***END PROLOGUE CACAI
  28. COMPLEX CSGN, CSPN, C1, C2, Y, Z, ZN, CY
  29. REAL ALIM, ARG, ASCLE, AZ, CPN, DFNU, ELIM, FMR, FNU, PI, RL,
  30. * SGN, SPN, TOL, YY, R1MACH
  31. INTEGER INU, IUF, KODE, MR, N, NN, NW, NZ
  32. DIMENSION Y(N), CY(2)
  33. DATA PI / 3.14159265358979324E0 /
  34. C***FIRST EXECUTABLE STATEMENT CACAI
  35. NZ = 0
  36. ZN = -Z
  37. AZ = ABS(Z)
  38. NN = N
  39. DFNU = FNU + (N-1)
  40. IF (AZ.LE.2.0E0) GO TO 10
  41. IF (AZ*AZ*0.25E0.GT.DFNU+1.0E0) GO TO 20
  42. 10 CONTINUE
  43. C-----------------------------------------------------------------------
  44. C POWER SERIES FOR THE I FUNCTION
  45. C-----------------------------------------------------------------------
  46. CALL CSERI(ZN, FNU, KODE, NN, Y, NW, TOL, ELIM, ALIM)
  47. GO TO 40
  48. 20 CONTINUE
  49. IF (AZ.LT.RL) GO TO 30
  50. C-----------------------------------------------------------------------
  51. C ASYMPTOTIC EXPANSION FOR LARGE Z FOR THE I FUNCTION
  52. C-----------------------------------------------------------------------
  53. CALL CASYI(ZN, FNU, KODE, NN, Y, NW, RL, TOL, ELIM, ALIM)
  54. IF (NW.LT.0) GO TO 70
  55. GO TO 40
  56. 30 CONTINUE
  57. C-----------------------------------------------------------------------
  58. C MILLER ALGORITHM NORMALIZED BY THE SERIES FOR THE I FUNCTION
  59. C-----------------------------------------------------------------------
  60. CALL CMLRI(ZN, FNU, KODE, NN, Y, NW, TOL)
  61. IF(NW.LT.0) GO TO 70
  62. 40 CONTINUE
  63. C-----------------------------------------------------------------------
  64. C ANALYTIC CONTINUATION TO THE LEFT HALF PLANE FOR THE K FUNCTION
  65. C-----------------------------------------------------------------------
  66. CALL CBKNU(ZN, FNU, KODE, 1, CY, NW, TOL, ELIM, ALIM)
  67. IF (NW.NE.0) GO TO 70
  68. FMR = MR
  69. SGN = -SIGN(PI,FMR)
  70. CSGN = CMPLX(0.0E0,SGN)
  71. IF (KODE.EQ.1) GO TO 50
  72. YY = -AIMAG(ZN)
  73. CPN = COS(YY)
  74. SPN = SIN(YY)
  75. CSGN = CSGN*CMPLX(CPN,SPN)
  76. 50 CONTINUE
  77. C-----------------------------------------------------------------------
  78. C CALCULATE CSPN=EXP(FNU*PI*I) TO MINIMIZE LOSSES OF SIGNIFICANCE
  79. C WHEN FNU IS LARGE
  80. C-----------------------------------------------------------------------
  81. INU = FNU
  82. ARG = (FNU-INU)*SGN
  83. CPN = COS(ARG)
  84. SPN = SIN(ARG)
  85. CSPN = CMPLX(CPN,SPN)
  86. IF (MOD(INU,2).EQ.1) CSPN = -CSPN
  87. C1 = CY(1)
  88. C2 = Y(1)
  89. IF (KODE.EQ.1) GO TO 60
  90. IUF = 0
  91. ASCLE = 1.0E+3*R1MACH(1)/TOL
  92. CALL CS1S2(ZN, C1, C2, NW, ASCLE, ALIM, IUF)
  93. NZ = NZ + NW
  94. 60 CONTINUE
  95. Y(1) = CSPN*C1 + CSGN*C2
  96. RETURN
  97. 70 CONTINUE
  98. NZ = -1
  99. IF(NW.EQ.(-2)) NZ=-2
  100. RETURN
  101. END