postg2.f 13 KB

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