qc25c.f 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. *DECK QC25C
  2. SUBROUTINE QC25C (F, A, B, C, RESULT, ABSERR, KRUL, NEVAL)
  3. C***BEGIN PROLOGUE QC25C
  4. C***PURPOSE To compute I = Integral of F*W over (A,B) with
  5. C error estimate, where W(X) = 1/(X-C)
  6. C***LIBRARY SLATEC (QUADPACK)
  7. C***CATEGORY H2A2A2, J4
  8. C***TYPE SINGLE PRECISION (QC25C-S, DQC25C-D)
  9. C***KEYWORDS 25-POINT CLENSHAW-CURTIS INTEGRATION, QUADPACK, QUADRATURE
  10. C***AUTHOR Piessens, Robert
  11. C Applied Mathematics and Programming Division
  12. C K. U. Leuven
  13. C de Doncker, Elise
  14. C Applied Mathematics and Programming Division
  15. C K. U. Leuven
  16. C***DESCRIPTION
  17. C
  18. C Integration rules for the computation of CAUCHY
  19. C PRINCIPAL VALUE integrals
  20. C Standard fortran subroutine
  21. C Real version
  22. C
  23. C PARAMETERS
  24. C F - Real
  25. C Function subprogram defining the integrand function
  26. C F(X). The actual name for F needs to be declared
  27. C E X T E R N A L in the driver program.
  28. C
  29. C A - Real
  30. C Left end point of the integration interval
  31. C
  32. C B - Real
  33. C Right end point of the integration interval, B.GT.A
  34. C
  35. C C - Real
  36. C Parameter in the WEIGHT function
  37. C
  38. C RESULT - Real
  39. C Approximation to the integral
  40. C result is computed by using a generalized
  41. C Clenshaw-Curtis method if C lies within ten percent
  42. C of the integration interval. In the other case the
  43. C 15-point Kronrod rule obtained by optimal addition
  44. C of abscissae to the 7-point Gauss rule, is applied.
  45. C
  46. C ABSERR - Real
  47. C Estimate of the modulus of the absolute error,
  48. C which should equal or exceed ABS(I-RESULT)
  49. C
  50. C KRUL - Integer
  51. C Key which is decreased by 1 if the 15-point
  52. C Gauss-Kronrod scheme has been used
  53. C
  54. C NEVAL - Integer
  55. C Number of integrand evaluations
  56. C
  57. C***REFERENCES (NONE)
  58. C***ROUTINES CALLED QCHEB, QK15W, QWGTC
  59. C***REVISION HISTORY (YYMMDD)
  60. C 810101 DATE WRITTEN
  61. C 890531 Changed all specific intrinsics to generic. (WRB)
  62. C 890531 REVISION DATE from Version 3.2
  63. C 891214 Prologue converted to Version 4.0 format. (BAB)
  64. C***END PROLOGUE QC25C
  65. C
  66. REAL A,ABSERR,AK22,AMOM0,AMOM1,AMOM2,B,C,CC,
  67. 1 CENTR,CHEB12,CHEB24,QWGTC,F,FVAL,HLGTH,P2,P3,P4,
  68. 2 RESABS,RESASC,RESULT,RES12,RES24,U,X
  69. INTEGER I,ISYM,K,KP,KRUL,NEVAL
  70. C
  71. DIMENSION X(11),FVAL(25),CHEB12(13),CHEB24(25)
  72. C
  73. EXTERNAL F, QWGTC
  74. C
  75. C THE VECTOR X CONTAINS THE VALUES COS(K*PI/24),
  76. C K = 1, ..., 11, TO BE USED FOR THE CHEBYSHEV SERIES
  77. C EXPANSION OF F
  78. C
  79. SAVE X
  80. DATA X(1),X(2),X(3),X(4),X(5),X(6),X(7),X(8),X(9),X(10),
  81. 1 X(11)/
  82. 2 0.9914448613738104E+00, 0.9659258262890683E+00,
  83. 3 0.9238795325112868E+00, 0.8660254037844386E+00,
  84. 4 0.7933533402912352E+00, 0.7071067811865475E+00,
  85. 5 0.6087614290087206E+00, 0.5000000000000000E+00,
  86. 6 0.3826834323650898E+00, 0.2588190451025208E+00,
  87. 7 0.1305261922200516E+00/
  88. C
  89. C LIST OF MAJOR VARIABLES
  90. C ----------------------
  91. C FVAL - VALUE OF THE FUNCTION F AT THE POINTS
  92. C COS(K*PI/24), K = 0, ..., 24
  93. C CHEB12 - CHEBYSHEV SERIES EXPANSION COEFFICIENTS,
  94. C FOR THE FUNCTION F, OF DEGREE 12
  95. C CHEB24 - CHEBYSHEV SERIES EXPANSION COEFFICIENTS,
  96. C FOR THE FUNCTION F, OF DEGREE 24
  97. C RES12 - APPROXIMATION TO THE INTEGRAL CORRESPONDING
  98. C TO THE USE OF CHEB12
  99. C RES24 - APPROXIMATION TO THE INTEGRAL CORRESPONDING
  100. C TO THE USE OF CHEB24
  101. C QWGTC - EXTERNAL FUNCTION SUBPROGRAM DEFINING
  102. C THE WEIGHT FUNCTION
  103. C HLGTH - HALF-LENGTH OF THE INTERVAL
  104. C CENTR - MID POINT OF THE INTERVAL
  105. C
  106. C
  107. C CHECK THE POSITION OF C.
  108. C
  109. C***FIRST EXECUTABLE STATEMENT QC25C
  110. CC = (0.2E+01*C-B-A)/(B-A)
  111. IF(ABS(CC).LT.0.11E+01) GO TO 10
  112. C
  113. C APPLY THE 15-POINT GAUSS-KRONROD SCHEME.
  114. C
  115. KRUL = KRUL-1
  116. CALL QK15W(F,QWGTC,C,P2,P3,P4,KP,A,B,RESULT,ABSERR,
  117. 1 RESABS,RESASC)
  118. NEVAL = 15
  119. IF (RESASC.EQ.ABSERR) KRUL = KRUL+1
  120. GO TO 50
  121. C
  122. C USE THE GENERALIZED CLENSHAW-CURTIS METHOD.
  123. C
  124. 10 HLGTH = 0.5E+00*(B-A)
  125. CENTR = 0.5E+00*(B+A)
  126. NEVAL = 25
  127. FVAL(1) = 0.5E+00*F(HLGTH+CENTR)
  128. FVAL(13) = F(CENTR)
  129. FVAL(25) = 0.5E+00*F(CENTR-HLGTH)
  130. DO 20 I=2,12
  131. U = HLGTH*X(I-1)
  132. ISYM = 26-I
  133. FVAL(I) = F(U+CENTR)
  134. FVAL(ISYM) = F(CENTR-U)
  135. 20 CONTINUE
  136. C
  137. C COMPUTE THE CHEBYSHEV SERIES EXPANSION.
  138. C
  139. CALL QCHEB(X,FVAL,CHEB12,CHEB24)
  140. C
  141. C THE MODIFIED CHEBYSHEV MOMENTS ARE COMPUTED
  142. C BY FORWARD RECURSION, USING AMOM0 AND AMOM1
  143. C AS STARTING VALUES.
  144. C
  145. AMOM0 = LOG(ABS((0.1E+01-CC)/(0.1E+01+CC)))
  146. AMOM1 = 0.2E+01+CC*AMOM0
  147. RES12 = CHEB12(1)*AMOM0+CHEB12(2)*AMOM1
  148. RES24 = CHEB24(1)*AMOM0+CHEB24(2)*AMOM1
  149. DO 30 K=3,13
  150. AMOM2 = 0.2E+01*CC*AMOM1-AMOM0
  151. AK22 = (K-2)*(K-2)
  152. IF((K/2)*2.EQ.K) AMOM2 = AMOM2-0.4E+01/(AK22-0.1E+01)
  153. RES12 = RES12+CHEB12(K)*AMOM2
  154. RES24 = RES24+CHEB24(K)*AMOM2
  155. AMOM0 = AMOM1
  156. AMOM1 = AMOM2
  157. 30 CONTINUE
  158. DO 40 K=14,25
  159. AMOM2 = 0.2E+01*CC*AMOM1-AMOM0
  160. AK22 = (K-2)*(K-2)
  161. IF((K/2)*2.EQ.K) AMOM2 = AMOM2-0.4E+01/
  162. 1 (AK22-0.1E+01)
  163. RES24 = RES24+CHEB24(K)*AMOM2
  164. AMOM0 = AMOM1
  165. AMOM1 = AMOM2
  166. 40 CONTINUE
  167. RESULT = RES24
  168. ABSERR = ABS(RES24-RES12)
  169. 50 RETURN
  170. END