qc25s.f 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. *DECK QC25S
  2. SUBROUTINE QC25S (F, A, B, BL, BR, ALFA, BETA, RI, RJ, RG, RH,
  3. + RESULT, ABSERR, RESASC, INTEGR, NEV)
  4. C***BEGIN PROLOGUE QC25S
  5. C***PURPOSE To compute I = Integral of F*W over (BL,BR), with error
  6. C estimate, where the weight function W has a singular
  7. C behaviour of ALGEBRAICO-LOGARITHMIC type at the points
  8. C A and/or B. (BL,BR) is a part of (A,B).
  9. C***LIBRARY SLATEC (QUADPACK)
  10. C***CATEGORY H2A2A2
  11. C***TYPE SINGLE PRECISION (QC25S-S, DQC25S-D)
  12. C***KEYWORDS 25-POINT CLENSHAW-CURTIS INTEGRATION, QUADPACK, QUADRATURE
  13. C***AUTHOR Piessens, Robert
  14. C Applied Mathematics and Programming Division
  15. C K. U. Leuven
  16. C de Doncker, Elise
  17. C Applied Mathematics and Programming Division
  18. C K. U. Leuven
  19. C***DESCRIPTION
  20. C
  21. C Integration rules for integrands having ALGEBRAICO-LOGARITHMIC
  22. C end point singularities
  23. C Standard fortran subroutine
  24. C Real version
  25. C
  26. C PARAMETERS
  27. C F - Real
  28. C Function subprogram defining the integrand
  29. C F(X). The actual name for F needs to be declared
  30. C E X T E R N A L in the driver program.
  31. C
  32. C A - Real
  33. C Left end point of the original interval
  34. C
  35. C B - Real
  36. C Right end point of the original interval, B.GT.A
  37. C
  38. C BL - Real
  39. C Lower limit of integration, BL.GE.A
  40. C
  41. C BR - Real
  42. C Upper limit of integration, BR.LE.B
  43. C
  44. C ALFA - Real
  45. C PARAMETER IN THE WEIGHT FUNCTION
  46. C
  47. C BETA - Real
  48. C Parameter in the weight function
  49. C
  50. C RI,RJ,RG,RH - Real
  51. C Modified CHEBYSHEV moments for the application
  52. C of the generalized CLENSHAW-CURTIS
  53. C method (computed in subroutine DQMOMO)
  54. C
  55. C RESULT - Real
  56. C Approximation to the integral
  57. C RESULT is computed by using a generalized
  58. C CLENSHAW-CURTIS method if B1 = A or BR = B.
  59. C in all other cases the 15-POINT KRONROD
  60. C RULE is applied, obtained by optimal addition of
  61. C Abscissae to the 7-POINT GAUSS RULE.
  62. C
  63. C ABSERR - Real
  64. C Estimate of the modulus of the absolute error,
  65. C which should equal or exceed ABS(I-RESULT)
  66. C
  67. C RESASC - Real
  68. C Approximation to the integral of ABS(F*W-I/(B-A))
  69. C
  70. C INTEGR - Integer
  71. C Which determines the weight function
  72. C = 1 W(X) = (X-A)**ALFA*(B-X)**BETA
  73. C = 2 W(X) = (X-A)**ALFA*(B-X)**BETA*LOG(X-A)
  74. C = 3 W(X) = (X-A)**ALFA*(B-X)**BETA*LOG(B-X)
  75. C = 4 W(X) = (X-A)**ALFA*(B-X)**BETA*LOG(X-A)*
  76. C LOG(B-X)
  77. C
  78. C NEV - Integer
  79. C Number of integrand evaluations
  80. C
  81. C***REFERENCES (NONE)
  82. C***ROUTINES CALLED QCHEB, QK15W, QWGTS
  83. C***REVISION HISTORY (YYMMDD)
  84. C 810101 DATE WRITTEN
  85. C 890531 Changed all specific intrinsics to generic. (WRB)
  86. C 890531 REVISION DATE from Version 3.2
  87. C 891214 Prologue converted to Version 4.0 format. (BAB)
  88. C***END PROLOGUE QC25S
  89. C
  90. REAL A,ABSERR,ALFA,B,BETA,BL,BR,CENTR,CHEB12,CHEB24,
  91. 1 DC,F,FACTOR,FIX,FVAL,HLGTH,RESABS,RESASC,
  92. 2 RESULT,RES12,RES24,RG,RH,RI,RJ,U,QWGTS,X
  93. INTEGER I,INTEGR,ISYM,NEV
  94. C
  95. DIMENSION CHEB12(13),CHEB24(25),FVAL(25),RG(25),RH(25),RI(25),
  96. 1 RJ(25),X(11)
  97. C
  98. EXTERNAL F, QWGTS
  99. C
  100. C THE VECTOR X CONTAINS THE VALUES COS(K*PI/24)
  101. C K = 1, ..., 11, TO BE USED FOR THE COMPUTATION OF THE
  102. C CHEBYSHEV SERIES EXPANSION OF F.
  103. C
  104. SAVE X
  105. DATA X(1),X(2),X(3),X(4),X(5),X(6),X(7),X(8),X(9),X(10),
  106. 1 X(11)/
  107. 2 0.9914448613738104E+00, 0.9659258262890683E+00,
  108. 3 0.9238795325112868E+00, 0.8660254037844386E+00,
  109. 4 0.7933533402912352E+00, 0.7071067811865475E+00,
  110. 5 0.6087614290087206E+00, 0.5000000000000000E+00,
  111. 6 0.3826834323650898E+00, 0.2588190451025208E+00,
  112. 7 0.1305261922200516E+00/
  113. C
  114. C LIST OF MAJOR VARIABLES
  115. C -----------------------
  116. C
  117. C FVAL - VALUE OF THE FUNCTION F AT THE POINTS
  118. C (BR-BL)*0.5*COS(K*PI/24)+(BR+BL)*0.5
  119. C K = 0, ..., 24
  120. C CHEB12 - COEFFICIENTS OF THE CHEBYSHEV SERIES EXPANSION
  121. C OF DEGREE 12, FOR THE FUNCTION F, IN THE
  122. C INTERVAL (BL,BR)
  123. C CHEB24 - COEFFICIENTS OF THE CHEBYSHEV SERIES EXPANSION
  124. C OF DEGREE 24, FOR THE FUNCTION F, IN THE
  125. C INTERVAL (BL,BR)
  126. C RES12 - APPROXIMATION TO THE INTEGRAL OBTAINED FROM CHEB12
  127. C RES24 - APPROXIMATION TO THE INTEGRAL OBTAINED FROM CHEB24
  128. C QWGTS - EXTERNAL FUNCTION SUBPROGRAM DEFINING
  129. C THE FOUR POSSIBLE WEIGHT FUNCTIONS
  130. C HLGTH - HALF-LENGTH OF THE INTERVAL (BL,BR)
  131. C CENTR - MID POINT OF THE INTERVAL (BL,BR)
  132. C
  133. C***FIRST EXECUTABLE STATEMENT QC25S
  134. NEV = 25
  135. IF(BL.EQ.A.AND.(ALFA.NE.0.0E+00.OR.INTEGR.EQ.2.OR.INTEGR.EQ.4))
  136. 1 GO TO 10
  137. IF(BR.EQ.B.AND.(BETA.NE.0.0E+00.OR.INTEGR.EQ.3.OR.INTEGR.EQ.4))
  138. 1 GO TO 140
  139. C
  140. C IF A.GT.BL AND B.LT.BR, APPLY THE 15-POINT GAUSS-KRONROD
  141. C SCHEME.
  142. C
  143. C
  144. CALL QK15W(F,QWGTS,A,B,ALFA,BETA,INTEGR,BL,BR,
  145. 1 RESULT,ABSERR,RESABS,RESASC)
  146. NEV = 15
  147. GO TO 270
  148. C
  149. C THIS PART OF THE PROGRAM IS EXECUTED ONLY IF A = BL.
  150. C ----------------------------------------------------
  151. C
  152. C COMPUTE THE CHEBYSHEV SERIES EXPANSION OF THE
  153. C FOLLOWING FUNCTION
  154. C F1 = (0.5*(B+B-BR-A)-0.5*(BR-A)*X)**BETA
  155. C *F(0.5*(BR-A)*X+0.5*(BR+A))
  156. C
  157. 10 HLGTH = 0.5E+00*(BR-BL)
  158. CENTR = 0.5E+00*(BR+BL)
  159. FIX = B-CENTR
  160. FVAL(1) = 0.5E+00*F(HLGTH+CENTR)*(FIX-HLGTH)**BETA
  161. FVAL(13) = F(CENTR)*(FIX**BETA)
  162. FVAL(25) = 0.5E+00*F(CENTR-HLGTH)*(FIX+HLGTH)**BETA
  163. DO 20 I=2,12
  164. U = HLGTH*X(I-1)
  165. ISYM = 26-I
  166. FVAL(I) = F(U+CENTR)*(FIX-U)**BETA
  167. FVAL(ISYM) = F(CENTR-U)*(FIX+U)**BETA
  168. 20 CONTINUE
  169. FACTOR = HLGTH**(ALFA+0.1E+01)
  170. RESULT = 0.0E+00
  171. ABSERR = 0.0E+00
  172. RES12 = 0.0E+00
  173. RES24 = 0.0E+00
  174. IF(INTEGR.GT.2) GO TO 70
  175. CALL QCHEB(X,FVAL,CHEB12,CHEB24)
  176. C
  177. C INTEGR = 1 (OR 2)
  178. C
  179. DO 30 I=1,13
  180. RES12 = RES12+CHEB12(I)*RI(I)
  181. RES24 = RES24+CHEB24(I)*RI(I)
  182. 30 CONTINUE
  183. DO 40 I=14,25
  184. RES24 = RES24+CHEB24(I)*RI(I)
  185. 40 CONTINUE
  186. IF(INTEGR.EQ.1) GO TO 130
  187. C
  188. C INTEGR = 2
  189. C
  190. DC = LOG(BR-BL)
  191. RESULT = RES24*DC
  192. ABSERR = ABS((RES24-RES12)*DC)
  193. RES12 = 0.0E+00
  194. RES24 = 0.0E+00
  195. DO 50 I=1,13
  196. RES12 = RES12+CHEB12(I)*RG(I)
  197. RES24 = RES12+CHEB24(I)*RG(I)
  198. 50 CONTINUE
  199. DO 60 I=14,25
  200. RES24 = RES24+CHEB24(I)*RG(I)
  201. 60 CONTINUE
  202. GO TO 130
  203. C
  204. C COMPUTE THE CHEBYSHEV SERIES EXPANSION OF THE
  205. C FOLLOWING FUNCTION
  206. C F4 = F1*LOG(0.5*(B+B-BR-A)-0.5*(BR-A)*X)
  207. C
  208. 70 FVAL(1) = FVAL(1)*LOG(FIX-HLGTH)
  209. FVAL(13) = FVAL(13)*LOG(FIX)
  210. FVAL(25) = FVAL(25)*LOG(FIX+HLGTH)
  211. DO 80 I=2,12
  212. U = HLGTH*X(I-1)
  213. ISYM = 26-I
  214. FVAL(I) = FVAL(I)*LOG(FIX-U)
  215. FVAL(ISYM) = FVAL(ISYM)*LOG(FIX+U)
  216. 80 CONTINUE
  217. CALL QCHEB(X,FVAL,CHEB12,CHEB24)
  218. C
  219. C INTEGR = 3 (OR 4)
  220. C
  221. DO 90 I=1,13
  222. RES12 = RES12+CHEB12(I)*RI(I)
  223. RES24 = RES24+CHEB24(I)*RI(I)
  224. 90 CONTINUE
  225. DO 100 I=14,25
  226. RES24 = RES24+CHEB24(I)*RI(I)
  227. 100 CONTINUE
  228. IF(INTEGR.EQ.3) GO TO 130
  229. C
  230. C INTEGR = 4
  231. C
  232. DC = LOG(BR-BL)
  233. RESULT = RES24*DC
  234. ABSERR = ABS((RES24-RES12)*DC)
  235. RES12 = 0.0E+00
  236. RES24 = 0.0E+00
  237. DO 110 I=1,13
  238. RES12 = RES12+CHEB12(I)*RG(I)
  239. RES24 = RES24+CHEB24(I)*RG(I)
  240. 110 CONTINUE
  241. DO 120 I=14,25
  242. RES24 = RES24+CHEB24(I)*RG(I)
  243. 120 CONTINUE
  244. 130 RESULT = (RESULT+RES24)*FACTOR
  245. ABSERR = (ABSERR+ABS(RES24-RES12))*FACTOR
  246. GO TO 270
  247. C
  248. C THIS PART OF THE PROGRAM IS EXECUTED ONLY IF B = BR.
  249. C ----------------------------------------------------
  250. C
  251. C COMPUTE THE CHEBYSHEV SERIES EXPANSION OF THE
  252. C FOLLOWING FUNCTION
  253. C F2 = (0.5*(B+BL-A-A)+0.5*(B-BL)*X)**ALFA
  254. C *F(0.5*(B-BL)*X+0.5*(B+BL))
  255. C
  256. 140 HLGTH = 0.5E+00*(BR-BL)
  257. CENTR = 0.5E+00*(BR+BL)
  258. FIX = CENTR-A
  259. FVAL(1) = 0.5E+00*F(HLGTH+CENTR)*(FIX+HLGTH)**ALFA
  260. FVAL(13) = F(CENTR)*(FIX**ALFA)
  261. FVAL(25) = 0.5E+00*F(CENTR-HLGTH)*(FIX-HLGTH)**ALFA
  262. DO 150 I=2,12
  263. U = HLGTH*X(I-1)
  264. ISYM = 26-I
  265. FVAL(I) = F(U+CENTR)*(FIX+U)**ALFA
  266. FVAL(ISYM) = F(CENTR-U)*(FIX-U)**ALFA
  267. 150 CONTINUE
  268. FACTOR = HLGTH**(BETA+0.1E+01)
  269. RESULT = 0.0E+00
  270. ABSERR = 0.0E+00
  271. RES12 = 0.0E+00
  272. RES24 = 0.0E+00
  273. IF(INTEGR.EQ.2.OR.INTEGR.EQ.4) GO TO 200
  274. C
  275. C INTEGR = 1 (OR 3)
  276. C
  277. CALL QCHEB(X,FVAL,CHEB12,CHEB24)
  278. DO 160 I=1,13
  279. RES12 = RES12+CHEB12(I)*RJ(I)
  280. RES24 = RES24+CHEB24(I)*RJ(I)
  281. 160 CONTINUE
  282. DO 170 I=14,25
  283. RES24 = RES24+CHEB24(I)*RJ(I)
  284. 170 CONTINUE
  285. IF(INTEGR.EQ.1) GO TO 260
  286. C
  287. C INTEGR = 3
  288. C
  289. DC = LOG(BR-BL)
  290. RESULT = RES24*DC
  291. ABSERR = ABS((RES24-RES12)*DC)
  292. RES12 = 0.0E+00
  293. RES24 = 0.0E+00
  294. DO 180 I=1,13
  295. RES12 = RES12+CHEB12(I)*RH(I)
  296. RES24 = RES24+CHEB24(I)*RH(I)
  297. 180 CONTINUE
  298. DO 190 I=14,25
  299. RES24 = RES24+CHEB24(I)*RH(I)
  300. 190 CONTINUE
  301. GO TO 260
  302. C
  303. C COMPUTE THE CHEBYSHEV SERIES EXPANSION OF THE
  304. C FOLLOWING FUNCTION
  305. C F3 = F2*LOG(0.5*(B-BL)*X+0.5*(B+BL-A-A))
  306. C
  307. 200 FVAL(1) = FVAL(1)*LOG(FIX+HLGTH)
  308. FVAL(13) = FVAL(13)*LOG(FIX)
  309. FVAL(25) = FVAL(25)*LOG(FIX-HLGTH)
  310. DO 210 I=2,12
  311. U = HLGTH*X(I-1)
  312. ISYM = 26-I
  313. FVAL(I) = FVAL(I)*LOG(FIX+U)
  314. FVAL(ISYM) = FVAL(ISYM)*LOG(FIX-U)
  315. 210 CONTINUE
  316. CALL QCHEB(X,FVAL,CHEB12,CHEB24)
  317. C
  318. C INTEGR = 2 (OR 4)
  319. C
  320. DO 220 I=1,13
  321. RES12 = RES12+CHEB12(I)*RJ(I)
  322. RES24 = RES24+CHEB24(I)*RJ(I)
  323. 220 CONTINUE
  324. DO 230 I=14,25
  325. RES24 = RES24+CHEB24(I)*RJ(I)
  326. 230 CONTINUE
  327. IF(INTEGR.EQ.2) GO TO 260
  328. DC = LOG(BR-BL)
  329. RESULT = RES24*DC
  330. ABSERR = ABS((RES24-RES12)*DC)
  331. RES12 = 0.0E+00
  332. RES24 = 0.0E+00
  333. C
  334. C INTEGR = 4
  335. C
  336. DO 240 I=1,13
  337. RES12 = RES12+CHEB12(I)*RH(I)
  338. RES24 = RES24+CHEB24(I)*RH(I)
  339. 240 CONTINUE
  340. DO 250 I=14,25
  341. RES24 = RES24+CHEB24(I)*RH(I)
  342. 250 CONTINUE
  343. 260 RESULT = (RESULT+RES24)*FACTOR
  344. ABSERR = (ABSERR+ABS(RES24-RES12))*FACTOR
  345. 270 RETURN
  346. END