cmposn.f 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. *DECK CMPOSN
  2. SUBROUTINE CMPOSN (M, N, ISTAG, MIXBND, A, BB, C, Q, IDIMQ, B, B2,
  3. + B3, W, W2, W3, D, TCOS, P)
  4. C***BEGIN PROLOGUE CMPOSN
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CMGNBN
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (POISN2-S, CMPOSN-C)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C Subroutine to solve Poisson's equation with Neumann boundary
  13. C conditions.
  14. C
  15. C ISTAG = 1 if the last diagonal block is A.
  16. C ISTAG = 2 if the last diagonal block is A-I.
  17. C MIXBND = 1 if have Neumann boundary conditions at both boundaries.
  18. C MIXBND = 2 if have Neumann boundary conditions at bottom and
  19. C Dirichlet condition at top. (For this case, must have ISTAG = 1)
  20. C
  21. C***SEE ALSO CMGNBN
  22. C***ROUTINES CALLED C1MERG, CMPCSG, CMPTR3, CMPTRX
  23. C***REVISION HISTORY (YYMMDD)
  24. C 801001 DATE WRITTEN
  25. C 890531 Changed all specific intrinsics to generic. (WRB)
  26. C 891214 Prologue converted to Version 4.0 format. (BAB)
  27. C 900402 Added TYPE section. (WRB)
  28. C 920130 Modified to use merge routine C1MERG rather than deleted
  29. C routine CMPMRG. (WRB)
  30. C***END PROLOGUE CMPOSN
  31. C
  32. COMPLEX A ,BB ,C ,Q ,
  33. 1 B ,B2 ,B3 ,W ,
  34. 2 W2 ,W3 ,D ,TCOS ,
  35. 3 P ,FI ,T
  36. DIMENSION A(*) ,BB(*) ,C(*) ,Q(IDIMQ,*) ,
  37. 1 B(*) ,B2(*) ,B3(*) ,W(*) ,
  38. 2 W2(*) ,W3(*) ,D(*) ,TCOS(*) ,
  39. 3 K(4) ,P(*)
  40. EQUIVALENCE (K(1),K1) ,(K(2),K2) ,(K(3),K3) ,(K(4),K4)
  41. C***FIRST EXECUTABLE STATEMENT CMPOSN
  42. FISTAG = 3-ISTAG
  43. FNUM = 1./ISTAG
  44. FDEN = 0.5*(ISTAG-1)
  45. MR = M
  46. IP = -MR
  47. IPSTOR = 0
  48. I2R = 1
  49. JR = 2
  50. NR = N
  51. NLAST = N
  52. KR = 1
  53. LR = 0
  54. GO TO (101,103),ISTAG
  55. 101 CONTINUE
  56. DO 102 I=1,MR
  57. Q(I,N) = .5*Q(I,N)
  58. 102 CONTINUE
  59. GO TO (103,104),MIXBND
  60. 103 IF (N .LE. 3) GO TO 155
  61. 104 CONTINUE
  62. JR = 2*I2R
  63. NROD = 1
  64. IF ((NR/2)*2 .EQ. NR) NROD = 0
  65. GO TO (105,106),MIXBND
  66. 105 JSTART = 1
  67. GO TO 107
  68. 106 JSTART = JR
  69. NROD = 1-NROD
  70. 107 CONTINUE
  71. JSTOP = NLAST-JR
  72. IF (NROD .EQ. 0) JSTOP = JSTOP-I2R
  73. CALL CMPCSG (I2R,1,0.5,0.0,TCOS)
  74. I2RBY2 = I2R/2
  75. IF (JSTOP .GE. JSTART) GO TO 108
  76. J = JR
  77. GO TO 116
  78. 108 CONTINUE
  79. C
  80. C REGULAR REDUCTION.
  81. C
  82. DO 115 J=JSTART,JSTOP,JR
  83. JP1 = J+I2RBY2
  84. JP2 = J+I2R
  85. JP3 = JP2+I2RBY2
  86. JM1 = J-I2RBY2
  87. JM2 = J-I2R
  88. JM3 = JM2-I2RBY2
  89. IF (J .NE. 1) GO TO 109
  90. JM1 = JP1
  91. JM2 = JP2
  92. JM3 = JP3
  93. 109 CONTINUE
  94. IF (I2R .NE. 1) GO TO 111
  95. IF (J .EQ. 1) JM2 = JP2
  96. DO 110 I=1,MR
  97. B(I) = 2.*Q(I,J)
  98. Q(I,J) = Q(I,JM2)+Q(I,JP2)
  99. 110 CONTINUE
  100. GO TO 113
  101. 111 CONTINUE
  102. DO 112 I=1,MR
  103. FI = Q(I,J)
  104. Q(I,J) = Q(I,J)-Q(I,JM1)-Q(I,JP1)+Q(I,JM2)+Q(I,JP2)
  105. B(I) = FI+Q(I,J)-Q(I,JM3)-Q(I,JP3)
  106. 112 CONTINUE
  107. 113 CONTINUE
  108. CALL CMPTRX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
  109. DO 114 I=1,MR
  110. Q(I,J) = Q(I,J)+B(I)
  111. 114 CONTINUE
  112. C
  113. C END OF REDUCTION FOR REGULAR UNKNOWNS.
  114. C
  115. 115 CONTINUE
  116. C
  117. C BEGIN SPECIAL REDUCTION FOR LAST UNKNOWN.
  118. C
  119. J = JSTOP+JR
  120. 116 NLAST = J
  121. JM1 = J-I2RBY2
  122. JM2 = J-I2R
  123. JM3 = JM2-I2RBY2
  124. IF (NROD .EQ. 0) GO TO 128
  125. C
  126. C ODD NUMBER OF UNKNOWNS
  127. C
  128. IF (I2R .NE. 1) GO TO 118
  129. DO 117 I=1,MR
  130. B(I) = FISTAG*Q(I,J)
  131. Q(I,J) = Q(I,JM2)
  132. 117 CONTINUE
  133. GO TO 126
  134. 118 DO 119 I=1,MR
  135. B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
  136. 119 CONTINUE
  137. IF (NRODPR .NE. 0) GO TO 121
  138. DO 120 I=1,MR
  139. II = IP+I
  140. Q(I,J) = Q(I,JM2)+P(II)
  141. 120 CONTINUE
  142. IP = IP-MR
  143. GO TO 123
  144. 121 CONTINUE
  145. DO 122 I=1,MR
  146. Q(I,J) = Q(I,J)-Q(I,JM1)+Q(I,JM2)
  147. 122 CONTINUE
  148. 123 IF (LR .EQ. 0) GO TO 124
  149. CALL CMPCSG (LR,1,0.5,FDEN,TCOS(KR+1))
  150. GO TO 126
  151. 124 CONTINUE
  152. DO 125 I=1,MR
  153. B(I) = FISTAG*B(I)
  154. 125 CONTINUE
  155. 126 CONTINUE
  156. CALL CMPCSG (KR,1,0.5,FDEN,TCOS)
  157. CALL CMPTRX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
  158. DO 127 I=1,MR
  159. Q(I,J) = Q(I,J)+B(I)
  160. 127 CONTINUE
  161. KR = KR+I2R
  162. GO TO 151
  163. 128 CONTINUE
  164. C
  165. C EVEN NUMBER OF UNKNOWNS
  166. C
  167. JP1 = J+I2RBY2
  168. JP2 = J+I2R
  169. IF (I2R .NE. 1) GO TO 135
  170. DO 129 I=1,MR
  171. B(I) = Q(I,J)
  172. 129 CONTINUE
  173. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  174. IP = 0
  175. IPSTOR = MR
  176. GO TO (133,130),ISTAG
  177. 130 DO 131 I=1,MR
  178. P(I) = B(I)
  179. B(I) = B(I)+Q(I,N)
  180. 131 CONTINUE
  181. TCOS(1) = CMPLX(1.,0.)
  182. TCOS(2) = CMPLX(0.,0.)
  183. CALL CMPTRX (1,1,MR,A,BB,C,B,TCOS,D,W)
  184. DO 132 I=1,MR
  185. Q(I,J) = Q(I,JM2)+P(I)+B(I)
  186. 132 CONTINUE
  187. GO TO 150
  188. 133 CONTINUE
  189. DO 134 I=1,MR
  190. P(I) = B(I)
  191. Q(I,J) = Q(I,JM2)+2.*Q(I,JP2)+3.*B(I)
  192. 134 CONTINUE
  193. GO TO 150
  194. 135 CONTINUE
  195. DO 136 I=1,MR
  196. B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
  197. 136 CONTINUE
  198. IF (NRODPR .NE. 0) GO TO 138
  199. DO 137 I=1,MR
  200. II = IP+I
  201. B(I) = B(I)+P(II)
  202. 137 CONTINUE
  203. GO TO 140
  204. 138 CONTINUE
  205. DO 139 I=1,MR
  206. B(I) = B(I)+Q(I,JP2)-Q(I,JP1)
  207. 139 CONTINUE
  208. 140 CONTINUE
  209. CALL CMPTRX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
  210. IP = IP+MR
  211. IPSTOR = MAX(IPSTOR,IP+MR)
  212. DO 141 I=1,MR
  213. II = IP+I
  214. P(II) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
  215. B(I) = P(II)+Q(I,JP2)
  216. 141 CONTINUE
  217. IF (LR .EQ. 0) GO TO 142
  218. CALL CMPCSG (LR,1,0.5,FDEN,TCOS(I2R+1))
  219. CALL C1MERG (TCOS,0,I2R,I2R,LR,KR)
  220. GO TO 144
  221. 142 DO 143 I=1,I2R
  222. II = KR+I
  223. TCOS(II) = TCOS(I)
  224. 143 CONTINUE
  225. 144 CALL CMPCSG (KR,1,0.5,FDEN,TCOS)
  226. IF (LR .NE. 0) GO TO 145
  227. GO TO (146,145),ISTAG
  228. 145 CONTINUE
  229. CALL CMPTRX (KR,KR,MR,A,BB,C,B,TCOS,D,W)
  230. GO TO 148
  231. 146 CONTINUE
  232. DO 147 I=1,MR
  233. B(I) = FISTAG*B(I)
  234. 147 CONTINUE
  235. 148 CONTINUE
  236. DO 149 I=1,MR
  237. II = IP+I
  238. Q(I,J) = Q(I,JM2)+P(II)+B(I)
  239. 149 CONTINUE
  240. 150 CONTINUE
  241. LR = KR
  242. KR = KR+JR
  243. 151 CONTINUE
  244. GO TO (152,153),MIXBND
  245. 152 NR = (NLAST-1)/JR+1
  246. IF (NR .LE. 3) GO TO 155
  247. GO TO 154
  248. 153 NR = NLAST/JR
  249. IF (NR .LE. 1) GO TO 192
  250. 154 I2R = JR
  251. NRODPR = NROD
  252. GO TO 104
  253. 155 CONTINUE
  254. C
  255. C BEGIN SOLUTION
  256. C
  257. J = 1+JR
  258. JM1 = J-I2R
  259. JP1 = J+I2R
  260. JM2 = NLAST-I2R
  261. IF (NR .EQ. 2) GO TO 184
  262. IF (LR .NE. 0) GO TO 170
  263. IF (N .NE. 3) GO TO 161
  264. C
  265. C CASE N = 3.
  266. C
  267. GO TO (156,168),ISTAG
  268. 156 CONTINUE
  269. DO 157 I=1,MR
  270. B(I) = Q(I,2)
  271. 157 CONTINUE
  272. TCOS(1) = CMPLX(0.,0.)
  273. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  274. DO 158 I=1,MR
  275. Q(I,2) = B(I)
  276. B(I) = 4.*B(I)+Q(I,1)+2.*Q(I,3)
  277. 158 CONTINUE
  278. TCOS(1) = CMPLX(-2.,0.)
  279. TCOS(2) = CMPLX(2.,0.)
  280. I1 = 2
  281. I2 = 0
  282. CALL CMPTRX (I1,I2,MR,A,BB,C,B,TCOS,D,W)
  283. DO 159 I=1,MR
  284. Q(I,2) = Q(I,2)+B(I)
  285. B(I) = Q(I,1)+2.*Q(I,2)
  286. 159 CONTINUE
  287. TCOS(1) = (0.,0.)
  288. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  289. DO 160 I=1,MR
  290. Q(I,1) = B(I)
  291. 160 CONTINUE
  292. JR = 1
  293. I2R = 0
  294. GO TO 194
  295. C
  296. C CASE N = 2**P+1
  297. C
  298. 161 CONTINUE
  299. GO TO (162,170),ISTAG
  300. 162 CONTINUE
  301. DO 163 I=1,MR
  302. B(I) = Q(I,J)+.5*Q(I,1)-Q(I,JM1)+Q(I,NLAST)-Q(I,JM2)
  303. 163 CONTINUE
  304. CALL CMPCSG (JR,1,0.5,0.0,TCOS)
  305. CALL CMPTRX (JR,0,MR,A,BB,C,B,TCOS,D,W)
  306. DO 164 I=1,MR
  307. Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))+B(I)
  308. B(I) = Q(I,1)+2.*Q(I,NLAST)+4.*Q(I,J)
  309. 164 CONTINUE
  310. JR2 = 2*JR
  311. CALL CMPCSG (JR,1,0.0,0.0,TCOS)
  312. DO 165 I=1,JR
  313. I1 = JR+I
  314. I2 = JR+1-I
  315. TCOS(I1) = -TCOS(I2)
  316. 165 CONTINUE
  317. CALL CMPTRX (JR2,0,MR,A,BB,C,B,TCOS,D,W)
  318. DO 166 I=1,MR
  319. Q(I,J) = Q(I,J)+B(I)
  320. B(I) = Q(I,1)+2.*Q(I,J)
  321. 166 CONTINUE
  322. CALL CMPCSG (JR,1,0.5,0.0,TCOS)
  323. CALL CMPTRX (JR,0,MR,A,BB,C,B,TCOS,D,W)
  324. DO 167 I=1,MR
  325. Q(I,1) = .5*Q(I,1)-Q(I,JM1)+B(I)
  326. 167 CONTINUE
  327. GO TO 194
  328. C
  329. C CASE OF GENERAL N WITH NR = 3 .
  330. C
  331. 168 DO 169 I=1,MR
  332. B(I) = Q(I,2)
  333. Q(I,2) = (0.,0.)
  334. B2(I) = Q(I,3)
  335. B3(I) = Q(I,1)
  336. 169 CONTINUE
  337. JR = 1
  338. I2R = 0
  339. J = 2
  340. GO TO 177
  341. 170 CONTINUE
  342. DO 171 I=1,MR
  343. B(I) = .5*Q(I,1)-Q(I,JM1)+Q(I,J)
  344. 171 CONTINUE
  345. IF (NROD .NE. 0) GO TO 173
  346. DO 172 I=1,MR
  347. II = IP+I
  348. B(I) = B(I)+P(II)
  349. 172 CONTINUE
  350. GO TO 175
  351. 173 DO 174 I=1,MR
  352. B(I) = B(I)+Q(I,NLAST)-Q(I,JM2)
  353. 174 CONTINUE
  354. 175 CONTINUE
  355. DO 176 I=1,MR
  356. T = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
  357. Q(I,J) = T
  358. B2(I) = Q(I,NLAST)+T
  359. B3(I) = Q(I,1)+2.*T
  360. 176 CONTINUE
  361. 177 CONTINUE
  362. K1 = KR+2*JR-1
  363. K2 = KR+JR
  364. TCOS(K1+1) = (-2.,0.)
  365. K4 = K1+3-ISTAG
  366. CALL CMPCSG (K2+ISTAG-2,1,0.0,FNUM,TCOS(K4))
  367. K4 = K1+K2+1
  368. CALL CMPCSG (JR-1,1,0.0,1.0,TCOS(K4))
  369. CALL C1MERG (TCOS,K1,K2,K1+K2,JR-1,0)
  370. K3 = K1+K2+LR
  371. CALL CMPCSG (JR,1,0.5,0.0,TCOS(K3+1))
  372. K4 = K3+JR+1
  373. CALL CMPCSG (KR,1,0.5,FDEN,TCOS(K4))
  374. CALL C1MERG (TCOS,K3,JR,K3+JR,KR,K1)
  375. IF (LR .EQ. 0) GO TO 178
  376. CALL CMPCSG (LR,1,0.5,FDEN,TCOS(K4))
  377. CALL C1MERG (TCOS,K3,JR,K3+JR,LR,K3-LR)
  378. CALL CMPCSG (KR,1,0.5,FDEN,TCOS(K4))
  379. 178 K3 = KR
  380. K4 = KR
  381. CALL CMPTR3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
  382. DO 179 I=1,MR
  383. B(I) = B(I)+B2(I)+B3(I)
  384. 179 CONTINUE
  385. TCOS(1) = (2.,0.)
  386. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  387. DO 180 I=1,MR
  388. Q(I,J) = Q(I,J)+B(I)
  389. B(I) = Q(I,1)+2.*Q(I,J)
  390. 180 CONTINUE
  391. CALL CMPCSG (JR,1,0.5,0.0,TCOS)
  392. CALL CMPTRX (JR,0,MR,A,BB,C,B,TCOS,D,W)
  393. IF (JR .NE. 1) GO TO 182
  394. DO 181 I=1,MR
  395. Q(I,1) = B(I)
  396. 181 CONTINUE
  397. GO TO 194
  398. 182 CONTINUE
  399. DO 183 I=1,MR
  400. Q(I,1) = .5*Q(I,1)-Q(I,JM1)+B(I)
  401. 183 CONTINUE
  402. GO TO 194
  403. 184 CONTINUE
  404. IF (N .NE. 2) GO TO 188
  405. C
  406. C CASE N = 2
  407. C
  408. DO 185 I=1,MR
  409. B(I) = Q(I,1)
  410. 185 CONTINUE
  411. TCOS(1) = (0.,0.)
  412. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  413. DO 186 I=1,MR
  414. Q(I,1) = B(I)
  415. B(I) = 2.*(Q(I,2)+B(I))*FISTAG
  416. 186 CONTINUE
  417. TCOS(1) = CMPLX(-FISTAG,0.)
  418. TCOS(2) = CMPLX(2.,0.)
  419. CALL CMPTRX (2,0,MR,A,BB,C,B,TCOS,D,W)
  420. DO 187 I=1,MR
  421. Q(I,1) = Q(I,1)+B(I)
  422. 187 CONTINUE
  423. JR = 1
  424. I2R = 0
  425. GO TO 194
  426. 188 CONTINUE
  427. C
  428. C CASE OF GENERAL N AND NR = 2 .
  429. C
  430. DO 189 I=1,MR
  431. II = IP+I
  432. B3(I) = (0.,0.)
  433. B(I) = Q(I,1)+2.*P(II)
  434. Q(I,1) = .5*Q(I,1)-Q(I,JM1)
  435. B2(I) = 2.*(Q(I,1)+Q(I,NLAST))
  436. 189 CONTINUE
  437. K1 = KR+JR-1
  438. TCOS(K1+1) = (-2.,0.)
  439. K4 = K1+3-ISTAG
  440. CALL CMPCSG (KR+ISTAG-2,1,0.0,FNUM,TCOS(K4))
  441. K4 = K1+KR+1
  442. CALL CMPCSG (JR-1,1,0.0,1.0,TCOS(K4))
  443. CALL C1MERG (TCOS,K1,KR,K1+KR,JR-1,0)
  444. CALL CMPCSG (KR,1,0.5,FDEN,TCOS(K1+1))
  445. K2 = KR
  446. K4 = K1+K2+1
  447. CALL CMPCSG (LR,1,0.5,FDEN,TCOS(K4))
  448. K3 = LR
  449. K4 = 0
  450. CALL CMPTR3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
  451. DO 190 I=1,MR
  452. B(I) = B(I)+B2(I)
  453. 190 CONTINUE
  454. TCOS(1) = (2.,0.)
  455. CALL CMPTRX (1,0,MR,A,BB,C,B,TCOS,D,W)
  456. DO 191 I=1,MR
  457. Q(I,1) = Q(I,1)+B(I)
  458. 191 CONTINUE
  459. GO TO 194
  460. 192 DO 193 I=1,MR
  461. B(I) = Q(I,NLAST)
  462. 193 CONTINUE
  463. GO TO 196
  464. 194 CONTINUE
  465. C
  466. C START BACK SUBSTITUTION.
  467. C
  468. J = NLAST-JR
  469. DO 195 I=1,MR
  470. B(I) = Q(I,NLAST)+Q(I,J)
  471. 195 CONTINUE
  472. 196 JM2 = NLAST-I2R
  473. IF (JR .NE. 1) GO TO 198
  474. DO 197 I=1,MR
  475. Q(I,NLAST) = (0.,0.)
  476. 197 CONTINUE
  477. GO TO 202
  478. 198 CONTINUE
  479. IF (NROD .NE. 0) GO TO 200
  480. DO 199 I=1,MR
  481. II = IP+I
  482. Q(I,NLAST) = P(II)
  483. 199 CONTINUE
  484. IP = IP-MR
  485. GO TO 202
  486. 200 DO 201 I=1,MR
  487. Q(I,NLAST) = Q(I,NLAST)-Q(I,JM2)
  488. 201 CONTINUE
  489. 202 CONTINUE
  490. CALL CMPCSG (KR,1,0.5,FDEN,TCOS)
  491. CALL CMPCSG (LR,1,0.5,FDEN,TCOS(KR+1))
  492. IF (LR .NE. 0) GO TO 204
  493. DO 203 I=1,MR
  494. B(I) = FISTAG*B(I)
  495. 203 CONTINUE
  496. 204 CONTINUE
  497. CALL CMPTRX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
  498. DO 205 I=1,MR
  499. Q(I,NLAST) = Q(I,NLAST)+B(I)
  500. 205 CONTINUE
  501. NLASTP = NLAST
  502. 206 CONTINUE
  503. JSTEP = JR
  504. JR = I2R
  505. I2R = I2R/2
  506. IF (JR .EQ. 0) GO TO 222
  507. GO TO (207,208),MIXBND
  508. 207 JSTART = 1+JR
  509. GO TO 209
  510. 208 JSTART = JR
  511. 209 CONTINUE
  512. KR = KR-JR
  513. IF (NLAST+JR .GT. N) GO TO 210
  514. KR = KR-JR
  515. NLAST = NLAST+JR
  516. JSTOP = NLAST-JSTEP
  517. GO TO 211
  518. 210 CONTINUE
  519. JSTOP = NLAST-JR
  520. 211 CONTINUE
  521. LR = KR-JR
  522. CALL CMPCSG (JR,1,0.5,0.0,TCOS)
  523. DO 221 J=JSTART,JSTOP,JSTEP
  524. JM2 = J-JR
  525. JP2 = J+JR
  526. IF (J .NE. JR) GO TO 213
  527. DO 212 I=1,MR
  528. B(I) = Q(I,J)+Q(I,JP2)
  529. 212 CONTINUE
  530. GO TO 215
  531. 213 CONTINUE
  532. DO 214 I=1,MR
  533. B(I) = Q(I,J)+Q(I,JM2)+Q(I,JP2)
  534. 214 CONTINUE
  535. 215 CONTINUE
  536. IF (JR .NE. 1) GO TO 217
  537. DO 216 I=1,MR
  538. Q(I,J) = (0.,0.)
  539. 216 CONTINUE
  540. GO TO 219
  541. 217 CONTINUE
  542. JM1 = J-I2R
  543. JP1 = J+I2R
  544. DO 218 I=1,MR
  545. Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
  546. 218 CONTINUE
  547. 219 CONTINUE
  548. CALL CMPTRX (JR,0,MR,A,BB,C,B,TCOS,D,W)
  549. DO 220 I=1,MR
  550. Q(I,J) = Q(I,J)+B(I)
  551. 220 CONTINUE
  552. 221 CONTINUE
  553. NROD = 1
  554. IF (NLAST+I2R .LE. N) NROD = 0
  555. IF (NLASTP .NE. NLAST) GO TO 194
  556. GO TO 206
  557. 222 CONTINUE
  558. C
  559. C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
  560. C
  561. W(1) = CMPLX(REAL(IPSTOR),0.)
  562. RETURN
  563. END