c9ln2r.f 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. *DECK C9LN2R
  2. COMPLEX FUNCTION C9LN2R (Z)
  3. C***BEGIN PROLOGUE C9LN2R
  4. C***SUBSIDIARY
  5. C***PURPOSE Evaluate LOG(1+Z) from second order relative accuracy so
  6. C that LOG(1+Z) = Z - Z**2/2 + Z**3*C9LN2R(Z).
  7. C***LIBRARY SLATEC (FNLIB)
  8. C***CATEGORY C4B
  9. C***TYPE COMPLEX (R9LN2R-S, D9LN2R-D, C9LN2R-C)
  10. C***KEYWORDS ELEMENTARY FUNCTIONS, FNLIB, LOGARITHM, SECOND ORDER
  11. C***AUTHOR Fullerton, W., (LANL)
  12. C***DESCRIPTION
  13. C
  14. C Evaluate LOG(1+Z) from 2-nd order with relative error accuracy so
  15. C that LOG(1+Z) = Z - Z**2/2 + Z**3*C9LN2R(Z).
  16. C
  17. C Now LOG(1+Z) = 0.5*LOG(1+2*X+ABS(Z)**2) + I*CARG(1+Z),
  18. C where X = REAL(Z) and Y = AIMAG(Z).
  19. C We find
  20. C Z**3 * C9LN2R(Z) = -X*ABS(Z)**2 - 0.25*ABS(Z)**4
  21. C + (2*X+ABS(Z)**2)**3 * R9LN2R(2*X+ABS(Z)**2)
  22. C + I * (CARG(1+Z) + (X-1)*Y)
  23. C The imaginary part must be evaluated carefully as
  24. C (ATAN(Y/(1+X)) - Y/(1+X)) + Y/(1+X) - (1-X)*Y
  25. C = (Y/(1+X))**3 * R9ATN1(Y/(1+X)) + X**2*Y/(1+X)
  26. C
  27. C Now we divide through by Z**3 carefully. Write
  28. C 1/Z**3 = (X-I*Y)/ABS(Z)**3 * (1/ABS(Z)**3)
  29. C then C9LN2R(Z) = ((X-I*Y)/ABS(Z))**3 * (-X/ABS(Z) - ABS(Z)/4
  30. C + 0.5*((2*X+ABS(Z)**2)/ABS(Z))**3 * R9LN2R(2*X+ABS(Z)**2)
  31. C + I*Y/(ABS(Z)*(1+X)) * ((X/ABS(Z))**2 +
  32. C + (Y/(ABS(Z)*(1+X)))**2 * R9ATN1(Y/(1+X)) ) )
  33. C
  34. C If we let XZ = X/ABS(Z) and YZ = Y/ABS(Z) we may write
  35. C C9LN2R(Z) = (XZ-I*YZ)**3 * (-XZ - ABS(Z)/4
  36. C + 0.5*(2*XZ+ABS(Z))**3 * R9LN2R(2*X+ABS(Z)**2)
  37. C + I*YZ/(1+X) * (XZ**2 + (YZ/(1+X))**2*R9ATN1(Y/(1+X)) ))
  38. C
  39. C***REFERENCES (NONE)
  40. C***ROUTINES CALLED R9ATN1, R9LN2R
  41. C***REVISION HISTORY (YYMMDD)
  42. C 780401 DATE WRITTEN
  43. C 890531 Changed all specific intrinsics to generic. (WRB)
  44. C 890531 REVISION DATE from Version 3.2
  45. C 891214 Prologue converted to Version 4.0 format. (BAB)
  46. C 900720 Routine changed from user-callable to subsidiary. (WRB)
  47. C***END PROLOGUE C9LN2R
  48. COMPLEX Z
  49. C***FIRST EXECUTABLE STATEMENT C9LN2R
  50. X = REAL (Z)
  51. Y = AIMAG (Z)
  52. C
  53. CABSZ = ABS(Z)
  54. IF (CABSZ.GT.0.8125) GO TO 20
  55. C
  56. C9LN2R = CMPLX (1.0/3.0, 0.0)
  57. IF (CABSZ.EQ.0.0) RETURN
  58. C
  59. XZ = X/CABSZ
  60. YZ = Y/CABSZ
  61. C
  62. ARG = 2.0*XZ + CABSZ
  63. RPART = 0.5*ARG**3*R9LN2R(CABSZ*ARG) - XZ - 0.25*CABSZ
  64. Y1X = YZ/(1.0+X)
  65. AIPART = Y1X * (XZ**2 + Y1X**2*R9ATN1(CABSZ*Y1X) )
  66. C
  67. C9LN2R = CMPLX(XZ,-YZ)**3 * CMPLX(RPART,AIPART)
  68. RETURN
  69. C
  70. 20 C9LN2R = (LOG(1.0+Z) - Z*(1.0-0.5*Z)) / Z**3
  71. RETURN
  72. C
  73. END