cblkt1.f 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. *DECK CBLKT1
  2. SUBROUTINE CBLKT1 (N, AN, BN, CN, M, AM, BM, CM, IDIMY, Y, B, W1,
  3. + W2, W3, WD, WW, WU, PRDCT, CPRDCT)
  4. C***BEGIN PROLOGUE CBLKT1
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to CBLKTR
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (BLKTR1-S, CBLKT1-C)
  9. C***AUTHOR (UNKNOWN)
  10. C***DESCRIPTION
  11. C
  12. C CBLKT1 solves the linear system of routine CBLKTR.
  13. C
  14. C B contains the roots of all the B polynomials.
  15. C W1,W2,W3,WD,WW,WU are all working arrays.
  16. C PRDCT is either PROCP or PROC depending on whether the boundary
  17. C conditions in the M direction are periodic or not.
  18. C CPRDCT is either CPROCP or CPROC which are called if some of the zeros
  19. C of the B polynomials are complex.
  20. C
  21. C***SEE ALSO CBLKTR
  22. C***ROUTINES CALLED INXCA, INXCB, INXCC
  23. C***COMMON BLOCKS CCBLK
  24. C***REVISION HISTORY (YYMMDD)
  25. C 801001 DATE WRITTEN
  26. C 891214 Prologue converted to Version 4.0 format. (BAB)
  27. C 900402 Added TYPE section. (WRB)
  28. C***END PROLOGUE CBLKT1
  29. C
  30. DIMENSION AN(*) ,BN(*) ,CN(*) ,AM(*) ,
  31. 1 BM(*) ,CM(*) ,B(*) ,W1(*) ,
  32. 2 W2(*) ,W3(*) ,WD(*) ,WW(*) ,
  33. 3 WU(*) ,Y(IDIMY,*)
  34. COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
  35. 1 NM ,NCMPLX ,IK
  36. COMPLEX AM ,BM ,CM ,Y ,
  37. 1 W1 ,W2 ,W3 ,WD ,
  38. 2 WW ,WU
  39. C***FIRST EXECUTABLE STATEMENT CBLKT1
  40. KDO = K-1
  41. DO 109 L=1,KDO
  42. IR = L-1
  43. I2 = 2**IR
  44. I1 = I2/2
  45. I3 = I2+I1
  46. I4 = I2+I2
  47. IRM1 = IR-1
  48. CALL INXCB (I2,IR,IM2,NM2)
  49. CALL INXCB (I1,IRM1,IM3,NM3)
  50. CALL INXCB (I3,IRM1,IM1,NM1)
  51. CALL PRDCT (NM2,B(IM2),NM3,B(IM3),NM1,B(IM1),0,DUM,Y(1,I2),W3,
  52. 1 M,AM,BM,CM,WD,WW,WU)
  53. IF = 2**K
  54. DO 108 I=I4,IF,I4
  55. IF (I-NM) 101,101,108
  56. 101 IPI1 = I+I1
  57. IPI2 = I+I2
  58. IPI3 = I+I3
  59. CALL INXCC (I,IR,IDXC,NC)
  60. IF (I-IF) 102,108,108
  61. 102 CALL INXCA (I,IR,IDXA,NA)
  62. CALL INXCB (I-I1,IRM1,IM1,NM1)
  63. CALL INXCB (IPI2,IR,IP2,NP2)
  64. CALL INXCB (IPI1,IRM1,IP1,NP1)
  65. CALL INXCB (IPI3,IRM1,IP3,NP3)
  66. CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W3,W1,M,AM,
  67. 1 BM,CM,WD,WW,WU)
  68. IF (IPI2-NM) 105,105,103
  69. 103 DO 104 J=1,M
  70. W3(J) = (0.,0.)
  71. W2(J) = (0.,0.)
  72. 104 CONTINUE
  73. GO TO 106
  74. 105 CALL PRDCT (NP2,B(IP2),NP1,B(IP1),NP3,B(IP3),0,DUM,
  75. 1 Y(1,IPI2),W3,M,AM,BM,CM,WD,WW,WU)
  76. CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W3,W2,M,AM,
  77. 1 BM,CM,WD,WW,WU)
  78. 106 DO 107 J=1,M
  79. Y(J,I) = W1(J)+W2(J)+Y(J,I)
  80. 107 CONTINUE
  81. 108 CONTINUE
  82. 109 CONTINUE
  83. IF (NPP) 132,110,132
  84. C
  85. C THE PERIODIC CASE IS TREATED USING THE CAPACITANCE MATRIX METHOD
  86. C
  87. 110 IF = 2**K
  88. I = IF/2
  89. I1 = I/2
  90. CALL INXCB (I-I1,K-2,IM1,NM1)
  91. CALL INXCB (I+I1,K-2,IP1,NP1)
  92. CALL INXCB (I,K-1,IZ,NZ)
  93. CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,Y(1,I),W1,M,AM,
  94. 1 BM,CM,WD,WW,WU)
  95. IZR = I
  96. DO 111 J=1,M
  97. W2(J) = W1(J)
  98. 111 CONTINUE
  99. DO 113 LL=2,K
  100. L = K-LL+1
  101. IR = L-1
  102. I2 = 2**IR
  103. I1 = I2/2
  104. I = I2
  105. CALL INXCC (I,IR,IDXC,NC)
  106. CALL INXCB (I,IR,IZ,NZ)
  107. CALL INXCB (I-I1,IR-1,IM1,NM1)
  108. CALL INXCB (I+I1,IR-1,IP1,NP1)
  109. CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W1,W1,M,AM,BM,
  110. 1 CM,WD,WW,WU)
  111. DO 112 J=1,M
  112. W1(J) = Y(J,I)+W1(J)
  113. 112 CONTINUE
  114. CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W1,W1,M,AM,
  115. 1 BM,CM,WD,WW,WU)
  116. 113 CONTINUE
  117. DO 118 LL=2,K
  118. L = K-LL+1
  119. IR = L-1
  120. I2 = 2**IR
  121. I1 = I2/2
  122. I4 = I2+I2
  123. IFD = IF-I2
  124. DO 117 I=I2,IFD,I4
  125. IF (I-I2-IZR) 117,114,117
  126. 114 IF (I-NM) 115,115,118
  127. 115 CALL INXCA (I,IR,IDXA,NA)
  128. CALL INXCB (I,IR,IZ,NZ)
  129. CALL INXCB (I-I1,IR-1,IM1,NM1)
  130. CALL INXCB (I+I1,IR-1,IP1,NP1)
  131. CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W2,W2,M,AM,
  132. 1 BM,CM,WD,WW,WU)
  133. DO 116 J=1,M
  134. W2(J) = Y(J,I)+W2(J)
  135. 116 CONTINUE
  136. CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W2,W2,M,
  137. 1 AM,BM,CM,WD,WW,WU)
  138. IZR = I
  139. IF (I-NM) 117,119,117
  140. 117 CONTINUE
  141. 118 CONTINUE
  142. 119 DO 120 J=1,M
  143. Y(J,NM+1) = Y(J,NM+1)-CN(NM+1)*W1(J)-AN(NM+1)*W2(J)
  144. 120 CONTINUE
  145. CALL INXCB (IF/2,K-1,IM1,NM1)
  146. CALL INXCB (IF,K-1,IP,NP)
  147. IF (NCMPLX) 121,122,121
  148. 121 CALL CPRDCT (NM+1,B(IP),NM1,B(IM1),0,DUM,0,DUM,Y(1,NM+1),
  149. 1 Y(1,NM+1),M,AM,BM,CM,W1,W3,WW)
  150. GO TO 123
  151. 122 CALL PRDCT (NM+1,B(IP),NM1,B(IM1),0,DUM,0,DUM,Y(1,NM+1),
  152. 1 Y(1,NM+1),M,AM,BM,CM,WD,WW,WU)
  153. 123 DO 124 J=1,M
  154. W1(J) = AN(1)*Y(J,NM+1)
  155. W2(J) = CN(NM)*Y(J,NM+1)
  156. Y(J,1) = Y(J,1)-W1(J)
  157. Y(J,NM) = Y(J,NM)-W2(J)
  158. 124 CONTINUE
  159. DO 126 L=1,KDO
  160. IR = L-1
  161. I2 = 2**IR
  162. I4 = I2+I2
  163. I1 = I2/2
  164. I = I4
  165. CALL INXCA (I,IR,IDXA,NA)
  166. CALL INXCB (I-I2,IR,IM2,NM2)
  167. CALL INXCB (I-I2-I1,IR-1,IM3,NM3)
  168. CALL INXCB (I-I1,IR-1,IM1,NM1)
  169. CALL PRDCT (NM2,B(IM2),NM3,B(IM3),NM1,B(IM1),0,DUM,W1,W1,M,AM,
  170. 1 BM,CM,WD,WW,WU)
  171. CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W1,W1,M,AM,BM,
  172. 1 CM,WD,WW,WU)
  173. DO 125 J=1,M
  174. Y(J,I) = Y(J,I)-W1(J)
  175. 125 CONTINUE
  176. 126 CONTINUE
  177. C
  178. IZR = NM
  179. DO 131 L=1,KDO
  180. IR = L-1
  181. I2 = 2**IR
  182. I1 = I2/2
  183. I3 = I2+I1
  184. I4 = I2+I2
  185. IRM1 = IR-1
  186. DO 130 I=I4,IF,I4
  187. IPI1 = I+I1
  188. IPI2 = I+I2
  189. IPI3 = I+I3
  190. IF (IPI2-IZR) 127,128,127
  191. 127 IF (I-IZR) 130,131,130
  192. 128 CALL INXCC (I,IR,IDXC,NC)
  193. CALL INXCB (IPI2,IR,IP2,NP2)
  194. CALL INXCB (IPI1,IRM1,IP1,NP1)
  195. CALL INXCB (IPI3,IRM1,IP3,NP3)
  196. CALL PRDCT (NP2,B(IP2),NP1,B(IP1),NP3,B(IP3),0,DUM,W2,W2,M,
  197. 1 AM,BM,CM,WD,WW,WU)
  198. CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W2,W2,M,AM,
  199. 1 BM,CM,WD,WW,WU)
  200. DO 129 J=1,M
  201. Y(J,I) = Y(J,I)-W2(J)
  202. 129 CONTINUE
  203. IZR = I
  204. GO TO 131
  205. 130 CONTINUE
  206. 131 CONTINUE
  207. C
  208. C BEGIN BACK SUBSTITUTION PHASE
  209. C
  210. 132 DO 144 LL=1,K
  211. L = K-LL+1
  212. IR = L-1
  213. IRM1 = IR-1
  214. I2 = 2**IR
  215. I1 = I2/2
  216. I4 = I2+I2
  217. IFD = IF-I2
  218. DO 143 I=I2,IFD,I4
  219. IF (I-NM) 133,133,143
  220. 133 IMI1 = I-I1
  221. IMI2 = I-I2
  222. IPI1 = I+I1
  223. IPI2 = I+I2
  224. CALL INXCA (I,IR,IDXA,NA)
  225. CALL INXCC (I,IR,IDXC,NC)
  226. CALL INXCB (I,IR,IZ,NZ)
  227. CALL INXCB (IMI1,IRM1,IM1,NM1)
  228. CALL INXCB (IPI1,IRM1,IP1,NP1)
  229. IF (I-I2) 134,134,136
  230. 134 DO 135 J=1,M
  231. W1(J) = (0.,0.)
  232. 135 CONTINUE
  233. GO TO 137
  234. 136 CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),Y(1,IMI2),
  235. 1 W1,M,AM,BM,CM,WD,WW,WU)
  236. 137 IF (IPI2-NM) 140,140,138
  237. 138 DO 139 J=1,M
  238. W2(J) = (0.,0.)
  239. 139 CONTINUE
  240. GO TO 141
  241. 140 CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),Y(1,IPI2),
  242. 1 W2,M,AM,BM,CM,WD,WW,WU)
  243. 141 DO 142 J=1,M
  244. W1(J) = Y(J,I)+W1(J)+W2(J)
  245. 142 CONTINUE
  246. CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W1,Y(1,I),
  247. 1 M,AM,BM,CM,WD,WW,WU)
  248. 143 CONTINUE
  249. 144 CONTINUE
  250. RETURN
  251. END