casin.f 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. *DECK CASIN
  2. COMPLEX FUNCTION CASIN (ZINP)
  3. C***BEGIN PROLOGUE CASIN
  4. C***PURPOSE Compute the complex arc sine.
  5. C***LIBRARY SLATEC (FNLIB)
  6. C***CATEGORY C4A
  7. C***TYPE COMPLEX (CASIN-C)
  8. C***KEYWORDS ARC SINE, ELEMENTARY FUNCTIONS, FNLIB, TRIGONOMETRIC
  9. C***AUTHOR Fullerton, W., (LANL)
  10. C***DESCRIPTION
  11. C
  12. C CASIN(ZINP) calculates the complex trigonometric arc sine of ZINP.
  13. C The result is in units of radians, and the real part is in the first
  14. C or fourth quadrant.
  15. C
  16. C***REFERENCES (NONE)
  17. C***ROUTINES CALLED R1MACH
  18. C***REVISION HISTORY (YYMMDD)
  19. C 770701 DATE WRITTEN
  20. C 890531 Changed all specific intrinsics to generic. (WRB)
  21. C 890531 REVISION DATE from Version 3.2
  22. C 891214 Prologue converted to Version 4.0 format. (BAB)
  23. C***END PROLOGUE CASIN
  24. COMPLEX ZINP, Z, Z2, SQZP1, CI
  25. LOGICAL FIRST
  26. SAVE PI2, PI, CI, NTERMS, RMIN, FIRST
  27. DATA PI2 /1.5707963267 9489661923E0/
  28. DATA PI /3.1415926535 8979324E0/
  29. DATA CI /(0.,1.)/
  30. DATA FIRST /.TRUE./
  31. C***FIRST EXECUTABLE STATEMENT CASIN
  32. IF (FIRST) THEN
  33. C NTERMS = LOG(EPS)/LOG(RMAX) WHERE RMAX = 0.1
  34. NTERMS = -0.4343*LOG(R1MACH(3))
  35. RMIN = SQRT (6.0*R1MACH(3))
  36. ENDIF
  37. FIRST = .FALSE.
  38. C
  39. Z = ZINP
  40. R = ABS (Z)
  41. IF (R.GT.0.1) GO TO 30
  42. C
  43. CASIN = Z
  44. IF (R.LT.RMIN) RETURN
  45. C
  46. CASIN = (0.0, 0.0)
  47. Z2 = Z*Z
  48. DO 20 I=1,NTERMS
  49. TWOI = 2*(NTERMS-I) + 1
  50. CASIN = 1.0/TWOI + TWOI*CASIN*Z2/(TWOI+1.0)
  51. 20 CONTINUE
  52. CASIN = Z*CASIN
  53. RETURN
  54. C
  55. 30 IF (REAL(ZINP).LT.0.0) Z = -ZINP
  56. C
  57. SQZP1 = SQRT (Z+1.0)
  58. IF (AIMAG(SQZP1).LT.0.) SQZP1 = -SQZP1
  59. CASIN = PI2 - CI * LOG (Z + SQZP1*SQRT(Z-1.0))
  60. C
  61. IF (REAL(CASIN).GT.PI2) CASIN = PI - CASIN
  62. IF (REAL(CASIN).LE.(-PI2)) CASIN = -PI - CASIN
  63. IF (REAL(ZINP).LT.0.) CASIN = -CASIN
  64. C
  65. RETURN
  66. END