hwsss1.f 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. *DECK HWSSS1
  2. SUBROUTINE HWSSS1 (TS, TF, M, MBDCND, BDTS, BDTF, PS, PF, N,
  3. + NBDCND, BDPS, BDPF, ELMBDA, F, IDIMF, PERTRB, AM, BM, CM, SN,
  4. + SS, SINT, D)
  5. C***BEGIN PROLOGUE HWSSS1
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to HWSSSP
  8. C***LIBRARY SLATEC
  9. C***TYPE SINGLE PRECISION (HWSSS1-S)
  10. C***AUTHOR (UNKNOWN)
  11. C***SEE ALSO HWSSSP
  12. C***ROUTINES CALLED GENBUN
  13. C***REVISION HISTORY (YYMMDD)
  14. C 801001 DATE WRITTEN
  15. C 891009 Removed unreferenced variables. (WRB)
  16. C 891214 Prologue converted to Version 4.0 format. (BAB)
  17. C 900402 Added TYPE section. (WRB)
  18. C***END PROLOGUE HWSSS1
  19. DIMENSION F(IDIMF,*) ,BDTS(*) ,BDTF(*) ,BDPS(*) ,
  20. 1 BDPF(*) ,AM(*) ,BM(*) ,CM(*) ,
  21. 2 SS(*) ,SN(*) ,D(*) ,SINT(*)
  22. C
  23. C***FIRST EXECUTABLE STATEMENT HWSSS1
  24. MP1 = M+1
  25. NP1 = N+1
  26. FN = N
  27. FM = M
  28. DTH = (TF-TS)/FM
  29. HDTH = DTH/2.
  30. TDT = DTH+DTH
  31. DPHI = (PF-PS)/FN
  32. TDP = DPHI+DPHI
  33. DPHI2 = DPHI*DPHI
  34. DTH2 = DTH*DTH
  35. CP = 4./(FN*DTH2)
  36. WP = FN*SIN(HDTH)/4.
  37. DO 102 I=1,MP1
  38. FIM1 = I-1
  39. THETA = FIM1*DTH+TS
  40. SINT(I) = SIN(THETA)
  41. IF (SINT(I)) 101,102,101
  42. 101 T1 = 1./(DTH2*SINT(I))
  43. AM(I) = T1*SIN(THETA-HDTH)
  44. CM(I) = T1*SIN(THETA+HDTH)
  45. BM(I) = -AM(I)-CM(I)+ELMBDA
  46. 102 CONTINUE
  47. INP = 0
  48. ISP = 0
  49. C
  50. C BOUNDARY CONDITION AT THETA=TS
  51. C
  52. MBR = MBDCND+1
  53. GO TO (103,104,104,105,105,106,106,104,105,106),MBR
  54. 103 ITS = 1
  55. GO TO 107
  56. 104 AT = AM(2)
  57. ITS = 2
  58. GO TO 107
  59. 105 AT = AM(1)
  60. ITS = 1
  61. CM(1) = AM(1)+CM(1)
  62. GO TO 107
  63. 106 AT = AM(2)
  64. INP = 1
  65. ITS = 2
  66. C
  67. C BOUNDARY CONDITION THETA=TF
  68. C
  69. 107 GO TO (108,109,110,110,109,109,110,111,111,111),MBR
  70. 108 ITF = M
  71. GO TO 112
  72. 109 CT = CM(M)
  73. ITF = M
  74. GO TO 112
  75. 110 CT = CM(M+1)
  76. AM(M+1) = AM(M+1)+CM(M+1)
  77. ITF = M+1
  78. GO TO 112
  79. 111 ITF = M
  80. ISP = 1
  81. CT = CM(M)
  82. C
  83. C COMPUTE HOMOGENEOUS SOLUTION WITH SOLUTION AT POLE EQUAL TO ONE
  84. C
  85. 112 ITSP = ITS+1
  86. ITFM = ITF-1
  87. WTS = SINT(ITS+1)*AM(ITS+1)/CM(ITS)
  88. WTF = SINT(ITF-1)*CM(ITF-1)/AM(ITF)
  89. MUNK = ITF-ITS+1
  90. IF (ISP) 116,116,113
  91. 113 D(ITS) = CM(ITS)/BM(ITS)
  92. DO 114 I=ITSP,M
  93. D(I) = CM(I)/(BM(I)-AM(I)*D(I-1))
  94. 114 CONTINUE
  95. SS(M) = -D(M)
  96. IID = M-ITS
  97. DO 115 II=1,IID
  98. I = M-II
  99. SS(I) = -D(I)*SS(I+1)
  100. 115 CONTINUE
  101. SS(M+1) = 1.
  102. 116 IF (INP) 120,120,117
  103. 117 SN(1) = 1.
  104. D(ITF) = AM(ITF)/BM(ITF)
  105. IID = ITF-2
  106. DO 118 II=1,IID
  107. I = ITF-II
  108. D(I) = AM(I)/(BM(I)-CM(I)*D(I+1))
  109. 118 CONTINUE
  110. SN(2) = -D(2)
  111. DO 119 I=3,ITF
  112. SN(I) = -D(I)*SN(I-1)
  113. 119 CONTINUE
  114. C
  115. C BOUNDARY CONDITIONS AT PHI=PS
  116. C
  117. 120 NBR = NBDCND+1
  118. WPS = 1.
  119. WPF = 1.
  120. GO TO (121,122,122,123,123),NBR
  121. 121 JPS = 1
  122. GO TO 124
  123. 122 JPS = 2
  124. GO TO 124
  125. 123 JPS = 1
  126. WPS = .5
  127. C
  128. C BOUNDARY CONDITION AT PHI=PF
  129. C
  130. 124 GO TO (125,126,127,127,126),NBR
  131. 125 JPF = N
  132. GO TO 128
  133. 126 JPF = N
  134. GO TO 128
  135. 127 WPF = .5
  136. JPF = N+1
  137. 128 JPSP = JPS+1
  138. JPFM = JPF-1
  139. NUNK = JPF-JPS+1
  140. FJJ = JPFM-JPSP+1
  141. C
  142. C SCALE COEFFICIENTS FOR SUBROUTINE GENBUN
  143. C
  144. DO 129 I=ITS,ITF
  145. CF = DPHI2*SINT(I)*SINT(I)
  146. AM(I) = CF*AM(I)
  147. BM(I) = CF*BM(I)
  148. CM(I) = CF*CM(I)
  149. 129 CONTINUE
  150. AM(ITS) = 0.
  151. CM(ITF) = 0.
  152. ISING = 0
  153. GO TO (130,138,138,130,138,138,130,138,130,130),MBR
  154. 130 GO TO (131,138,138,131,138),NBR
  155. 131 IF (ELMBDA) 138,132,132
  156. 132 ISING = 1
  157. SUM = WTS*WPS+WTS*WPF+WTF*WPS+WTF*WPF
  158. IF (INP) 134,134,133
  159. 133 SUM = SUM+WP
  160. 134 IF (ISP) 136,136,135
  161. 135 SUM = SUM+WP
  162. 136 SUM1 = 0.
  163. DO 137 I=ITSP,ITFM
  164. SUM1 = SUM1+SINT(I)
  165. 137 CONTINUE
  166. SUM = SUM+FJJ*(SUM1+WTS+WTF)
  167. SUM = SUM+(WPS+WPF)*SUM1
  168. HNE = SUM
  169. 138 GO TO (146,142,142,144,144,139,139,142,144,139),MBR
  170. 139 IF (NBDCND-3) 146,140,146
  171. 140 YHLD = F(1,JPS)-4./(FN*DPHI*DTH2)*(BDPF(2)-BDPS(2))
  172. DO 141 J=1,NP1
  173. F(1,J) = YHLD
  174. 141 CONTINUE
  175. GO TO 146
  176. 142 DO 143 J=JPS,JPF
  177. F(2,J) = F(2,J)-AT*F(1,J)
  178. 143 CONTINUE
  179. GO TO 146
  180. 144 DO 145 J=JPS,JPF
  181. F(1,J) = F(1,J)+TDT*BDTS(J)*AT
  182. 145 CONTINUE
  183. 146 GO TO (154,150,152,152,150,150,152,147,147,147),MBR
  184. 147 IF (NBDCND-3) 154,148,154
  185. 148 YHLD = F(M+1,JPS)-4./(FN*DPHI*DTH2)*(BDPF(M)-BDPS(M))
  186. DO 149 J=1,NP1
  187. F(M+1,J) = YHLD
  188. 149 CONTINUE
  189. GO TO 154
  190. 150 DO 151 J=JPS,JPF
  191. F(M,J) = F(M,J)-CT*F(M+1,J)
  192. 151 CONTINUE
  193. GO TO 154
  194. 152 DO 153 J=JPS,JPF
  195. F(M+1,J) = F(M+1,J)-TDT*BDTF(J)*CT
  196. 153 CONTINUE
  197. 154 GO TO (159,155,155,157,157),NBR
  198. 155 DO 156 I=ITS,ITF
  199. F(I,2) = F(I,2)-F(I,1)/(DPHI2*SINT(I)*SINT(I))
  200. 156 CONTINUE
  201. GO TO 159
  202. 157 DO 158 I=ITS,ITF
  203. F(I,1) = F(I,1)+TDP*BDPS(I)/(DPHI2*SINT(I)*SINT(I))
  204. 158 CONTINUE
  205. 159 GO TO (164,160,162,162,160),NBR
  206. 160 DO 161 I=ITS,ITF
  207. F(I,N) = F(I,N)-F(I,N+1)/(DPHI2*SINT(I)*SINT(I))
  208. 161 CONTINUE
  209. GO TO 164
  210. 162 DO 163 I=ITS,ITF
  211. F(I,N+1) = F(I,N+1)-TDP*BDPF(I)/(DPHI2*SINT(I)*SINT(I))
  212. 163 CONTINUE
  213. 164 CONTINUE
  214. PERTRB = 0.
  215. IF (ISING) 165,176,165
  216. 165 SUM = WTS*WPS*F(ITS,JPS)+WTS*WPF*F(ITS,JPF)+WTF*WPS*F(ITF,JPS)+
  217. 1 WTF*WPF*F(ITF,JPF)
  218. IF (INP) 167,167,166
  219. 166 SUM = SUM+WP*F(1,JPS)
  220. 167 IF (ISP) 169,169,168
  221. 168 SUM = SUM+WP*F(M+1,JPS)
  222. 169 DO 171 I=ITSP,ITFM
  223. SUM1 = 0.
  224. DO 170 J=JPSP,JPFM
  225. SUM1 = SUM1+F(I,J)
  226. 170 CONTINUE
  227. SUM = SUM+SINT(I)*SUM1
  228. 171 CONTINUE
  229. SUM1 = 0.
  230. SUM2 = 0.
  231. DO 172 J=JPSP,JPFM
  232. SUM1 = SUM1+F(ITS,J)
  233. SUM2 = SUM2+F(ITF,J)
  234. 172 CONTINUE
  235. SUM = SUM+WTS*SUM1+WTF*SUM2
  236. SUM1 = 0.
  237. SUM2 = 0.
  238. DO 173 I=ITSP,ITFM
  239. SUM1 = SUM1+SINT(I)*F(I,JPS)
  240. SUM2 = SUM2+SINT(I)*F(I,JPF)
  241. 173 CONTINUE
  242. SUM = SUM+WPS*SUM1+WPF*SUM2
  243. PERTRB = SUM/HNE
  244. DO 175 J=1,NP1
  245. DO 174 I=1,MP1
  246. F(I,J) = F(I,J)-PERTRB
  247. 174 CONTINUE
  248. 175 CONTINUE
  249. C
  250. C SCALE RIGHT SIDE FOR SUBROUTINE GENBUN
  251. C
  252. 176 DO 178 I=ITS,ITF
  253. CF = DPHI2*SINT(I)*SINT(I)
  254. DO 177 J=JPS,JPF
  255. F(I,J) = CF*F(I,J)
  256. 177 CONTINUE
  257. 178 CONTINUE
  258. CALL GENBUN (NBDCND,NUNK,1,MUNK,AM(ITS),BM(ITS),CM(ITS),IDIMF,
  259. 1 F(ITS,JPS),IERROR,D)
  260. IF (ISING) 186,186,179
  261. 179 IF (INP) 183,183,180
  262. 180 IF (ISP) 181,181,186
  263. 181 DO 182 J=1,NP1
  264. F(1,J) = 0.
  265. 182 CONTINUE
  266. GO TO 209
  267. 183 IF (ISP) 186,186,184
  268. 184 DO 185 J=1,NP1
  269. F(M+1,J) = 0.
  270. 185 CONTINUE
  271. GO TO 209
  272. 186 IF (INP) 193,193,187
  273. 187 SUM = WPS*F(ITS,JPS)+WPF*F(ITS,JPF)
  274. DO 188 J=JPSP,JPFM
  275. SUM = SUM+F(ITS,J)
  276. 188 CONTINUE
  277. DFN = CP*SUM
  278. DNN = CP*((WPS+WPF+FJJ)*(SN(2)-1.))+ELMBDA
  279. DSN = CP*(WPS+WPF+FJJ)*SN(M)
  280. IF (ISP) 189,189,194
  281. 189 CNP = (F(1,1)-DFN)/DNN
  282. DO 191 I=ITS,ITF
  283. HLD = CNP*SN(I)
  284. DO 190 J=JPS,JPF
  285. F(I,J) = F(I,J)+HLD
  286. 190 CONTINUE
  287. 191 CONTINUE
  288. DO 192 J=1,NP1
  289. F(1,J) = CNP
  290. 192 CONTINUE
  291. GO TO 209
  292. 193 IF (ISP) 209,209,194
  293. 194 SUM = WPS*F(ITF,JPS)+WPF*F(ITF,JPF)
  294. DO 195 J=JPSP,JPFM
  295. SUM = SUM+F(ITF,J)
  296. 195 CONTINUE
  297. DFS = CP*SUM
  298. DSS = CP*((WPS+WPF+FJJ)*(SS(M)-1.))+ELMBDA
  299. DNS = CP*(WPS+WPF+FJJ)*SS(2)
  300. IF (INP) 196,196,200
  301. 196 CSP = (F(M+1,1)-DFS)/DSS
  302. DO 198 I=ITS,ITF
  303. HLD = CSP*SS(I)
  304. DO 197 J=JPS,JPF
  305. F(I,J) = F(I,J)+HLD
  306. 197 CONTINUE
  307. 198 CONTINUE
  308. DO 199 J=1,NP1
  309. F(M+1,J) = CSP
  310. 199 CONTINUE
  311. GO TO 209
  312. 200 RTN = F(1,1)-DFN
  313. RTS = F(M+1,1)-DFS
  314. IF (ISING) 202,202,201
  315. 201 CSP = 0.
  316. CNP = RTN/DNN
  317. GO TO 205
  318. 202 IF (ABS(DNN)-ABS(DSN)) 204,204,203
  319. 203 DEN = DSS-DNS*DSN/DNN
  320. RTS = RTS-RTN*DSN/DNN
  321. CSP = RTS/DEN
  322. CNP = (RTN-CSP*DNS)/DNN
  323. GO TO 205
  324. 204 DEN = DNS-DSS*DNN/DSN
  325. RTN = RTN-RTS*DNN/DSN
  326. CSP = RTN/DEN
  327. CNP = (RTS-DSS*CSP)/DSN
  328. 205 DO 207 I=ITS,ITF
  329. HLD = CNP*SN(I)+CSP*SS(I)
  330. DO 206 J=JPS,JPF
  331. F(I,J) = F(I,J)+HLD
  332. 206 CONTINUE
  333. 207 CONTINUE
  334. DO 208 J=1,NP1
  335. F(1,J) = CNP
  336. F(M+1,J) = CSP
  337. 208 CONTINUE
  338. 209 IF (NBDCND) 212,210,212
  339. 210 DO 211 I=1,MP1
  340. F(I,JPF+1) = F(I,JPS)
  341. 211 CONTINUE
  342. 212 RETURN
  343. END