dspenc.f 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. *DECK DSPENC
  2. DOUBLE PRECISION FUNCTION DSPENC (X)
  3. C***BEGIN PROLOGUE DSPENC
  4. C***PURPOSE Compute a form of Spence's integral due to K. Mitchell.
  5. C***LIBRARY SLATEC (FNLIB)
  6. C***CATEGORY C5
  7. C***TYPE DOUBLE PRECISION (SPENC-S, DSPENC-D)
  8. C***KEYWORDS FNLIB, SPECIAL FUNCTIONS, SPENCE'S INTEGRAL
  9. C***AUTHOR Fullerton, W., (LANL)
  10. C***DESCRIPTION
  11. C
  12. C DSPENC(X) calculates the double precision Spence's integral
  13. C for double precision argument X. Spence's function defined by
  14. C integral from 0 to X of -LOG(1-Y)/Y DY.
  15. C For ABS(X) .LE. 1, the uniformly convergent expansion
  16. C DSPENC = sum K=1,infinity X**K / K**2 is valid.
  17. C This is a form of Spence's integral due to K. Mitchell which differs
  18. C from the definition in the NBS Handbook of Mathematical Functions.
  19. C
  20. C Spence's function can be used to evaluate much more general integral
  21. C forms. For example,
  22. C integral from 0 to Z of LOG(A*X+B)/(C*X+D) DX =
  23. C LOG(ABS(B-A*D/C))*LOG(ABS(A*(C*X+D)/(A*D-B*C)))/C
  24. C - DSPENC (A*(C*Z+D)/(A*D-B*C)) / C.
  25. C
  26. C Ref -- K. Mitchell, Philosophical Magazine, 40, p.351 (1949).
  27. C Stegun and Abromowitz, AMS 55, p.1004.
  28. C
  29. C
  30. C Series for SPEN on the interval 0. to 5.00000E-01
  31. C with weighted error 4.74E-32
  32. C log weighted error 31.32
  33. C significant figures required 30.37
  34. C decimal places required 32.11
  35. C
  36. C***REFERENCES (NONE)
  37. C***ROUTINES CALLED D1MACH, DCSEVL, INITDS
  38. C***REVISION HISTORY (YYMMDD)
  39. C 780201 DATE WRITTEN
  40. C 890531 Changed all specific intrinsics to generic. (WRB)
  41. C 891115 Corrected third argument in reference to INITDS. (WRB)
  42. C 891115 REVISION DATE from Version 3.2
  43. C 891214 Prologue converted to Version 4.0 format. (BAB)
  44. C***END PROLOGUE DSPENC
  45. DOUBLE PRECISION X, SPENCS(38), ALN, PI26, XBIG, D1MACH, DCSEVL
  46. LOGICAL FIRST
  47. SAVE SPENCS, PI26, NSPENC, XBIG, FIRST
  48. DATA SPENCS( 1) / +.1527365598 8924058729 4668491002 8 D+0 /
  49. DATA SPENCS( 2) / +.8169658058 0510144035 0183818527 1 D-1 /
  50. DATA SPENCS( 3) / +.5814157140 7787308729 7735064118 2 D-2 /
  51. DATA SPENCS( 4) / +.5371619814 5415275422 4788900531 9 D-3 /
  52. DATA SPENCS( 5) / +.5724704675 1858262332 1060305478 2 D-4 /
  53. DATA SPENCS( 6) / +.6674546121 6493363436 0783543858 9 D-5 /
  54. DATA SPENCS( 7) / +.8276467339 7156769815 8439168901 1 D-6 /
  55. DATA SPENCS( 8) / +.1073315673 0306789512 7000587335 4 D-6 /
  56. DATA SPENCS( 9) / +.1440077294 3032394023 3459033151 3 D-7 /
  57. DATA SPENCS( 10) / +.1984442029 9659063678 9887713960 8 D-8 /
  58. DATA SPENCS( 11) / +.2794005822 1636387202 0199482161 5 D-9 /
  59. DATA SPENCS( 12) / +.4003991310 8833118230 7258044590 8 D-10 /
  60. DATA SPENCS( 13) / +.5823462892 0446384713 6813583575 7 D-11 /
  61. DATA SPENCS( 14) / +.8576708692 6386892780 9791477122 4 D-12 /
  62. DATA SPENCS( 15) / +.1276862586 2801930459 8948303343 3 D-12 /
  63. DATA SPENCS( 16) / +.1918826209 0425170811 6238041606 2 D-13 /
  64. DATA SPENCS( 17) / +.2907319206 9771381777 9579971967 3 D-14 /
  65. DATA SPENCS( 18) / +.4437112685 2767804625 5747364174 5 D-15 /
  66. DATA SPENCS( 19) / +.6815727787 4145995278 6735913560 7 D-16 /
  67. DATA SPENCS( 20) / +.1053017386 0155744295 4701941664 4 D-16 /
  68. DATA SPENCS( 21) / +.1635389806 7523771000 5182173457 0 D-17 /
  69. DATA SPENCS( 22) / +.2551852874 9404639323 1090164258 1 D-18 /
  70. DATA SPENCS( 23) / +.3999020621 9993601127 7047037951 9 D-19 /
  71. DATA SPENCS( 24) / +.6291501645 2168118765 1414917119 9 D-20 /
  72. DATA SPENCS( 25) / +.9933827435 6756776438 0388775253 3 D-21 /
  73. DATA SPENCS( 26) / +.1573679570 7499648167 2176380586 6 D-21 /
  74. DATA SPENCS( 27) / +.2500595316 8494761293 6927095466 6 D-22 /
  75. DATA SPENCS( 28) / +.3984740918 3838111392 1066325333 3 D-23 /
  76. DATA SPENCS( 29) / +.6366473210 0828438926 9132629333 3 D-24 /
  77. DATA SPENCS( 30) / +.1019674287 2396783670 7706197333 3 D-24 /
  78. DATA SPENCS( 31) / +.1636881058 9135188411 1107413333 3 D-25 /
  79. DATA SPENCS( 32) / +.2633310439 4176501173 4527999999 9 D-26 /
  80. DATA SPENCS( 33) / +.4244811560 1239768172 2436266666 6 D-27 /
  81. DATA SPENCS( 34) / +.6855411983 6800529168 2474666666 6 D-28 /
  82. DATA SPENCS( 35) / +.1109122433 4380564340 1898666666 6 D-28 /
  83. DATA SPENCS( 36) / +.1797431304 9998914573 6533333333 3 D-29 /
  84. DATA SPENCS( 37) / +.2917505845 9760951732 9066666666 6 D-30 /
  85. DATA SPENCS( 38) / +.4742646808 9286710613 3333333333 3 D-31 /
  86. DATA PI26 / +1.644934066 8482264364 7241516664 6025189219 D0 /
  87. DATA FIRST /.TRUE./
  88. C***FIRST EXECUTABLE STATEMENT DSPENC
  89. IF (FIRST) THEN
  90. NSPENC = INITDS (SPENCS, 38, 0.1*REAL(D1MACH(3)))
  91. XBIG = 1.0D0/D1MACH(3)
  92. ENDIF
  93. FIRST = .FALSE.
  94. C
  95. IF (X.GT.2.0D0) GO TO 60
  96. IF (X.GT.1.0D0) GO TO 50
  97. IF (X.GT.0.5D0) GO TO 40
  98. IF (X.GE.0.0D0) GO TO 30
  99. IF (X.GT.(-1.D0)) GO TO 20
  100. C
  101. C HERE IF X .LE. -1.0
  102. C
  103. ALN = LOG(1.0D0-X)
  104. DSPENC = -PI26 - 0.5D0*ALN*(2.0D0*LOG(-X)-ALN)
  105. IF (X.GT.(-XBIG)) DSPENC = DSPENC
  106. 1 + (1.D0 + DCSEVL (4.D0/(1.D0-X)-1.D0, SPENCS, NSPENC))/(1.D0-X)
  107. RETURN
  108. C
  109. C -1.0 .LT. X .LT. 0.0
  110. C
  111. 20 DSPENC = -0.5D0*LOG(1.0D0-X)**2
  112. 1 - X*(1.D0+DCSEVL(4.D0*X/(X-1.D0)-1.D0, SPENCS, NSPENC))/(X-1.D0)
  113. RETURN
  114. C
  115. C 0.0 .LE. X .LE. 0.5
  116. C
  117. 30 DSPENC = X*(1.D0 + DCSEVL (4.D0*X-1.D0, SPENCS, NSPENC))
  118. RETURN
  119. C
  120. C 0.5 .LT. X .LE. 1.0
  121. C
  122. 40 DSPENC = PI26
  123. IF (X.NE.1.D0) DSPENC = PI26 - LOG(X)*LOG(1.0D0-X)
  124. 1 - (1.D0-X)*(1.D0+DCSEVL(4.D0*(1.D0-X)-1.D0, SPENCS, NSPENC))
  125. RETURN
  126. C
  127. C 1.0 .LT. X .LE. 2.0
  128. C
  129. 50 DSPENC = PI26 - 0.5D0*LOG(X)*LOG((X-1.D0)**2/X)
  130. 1 + (X-1.D0)*(1.D0+DCSEVL(4.D0*(X-1.D0)/X-1.D0, SPENCS, NSPENC))/X
  131. RETURN
  132. C
  133. C X .GT. 2.0
  134. C
  135. 60 DSPENC = 2.0D0*PI26 - 0.5D0*LOG(X)**2
  136. IF (X.LT.XBIG) DSPENC = DSPENC
  137. 1 - (1.D0 + DCSEVL (4.D0/X-1.D0, SPENCS, NSPENC))/X
  138. RETURN
  139. C
  140. END