hstcs1.f 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. *DECK HSTCS1
  2. SUBROUTINE HSTCS1 (INTL, A, B, M, MBDCND, BDA, BDB, C, D, N,
  3. + NBDCND, BDC, BDD, ELMBDA, F, IDIMF, PERTRB, IERR1, AM, BM, CM,
  4. + AN, BN, CN, SNTH, RSQ, WRK)
  5. C***BEGIN PROLOGUE HSTCS1
  6. C***SUBSIDIARY
  7. C***PURPOSE Subsidiary to HSTCSP
  8. C***LIBRARY SLATEC
  9. C***TYPE SINGLE PRECISION (HSTCS1-S)
  10. C***AUTHOR (UNKNOWN)
  11. C***SEE ALSO HSTCSP
  12. C***ROUTINES CALLED BLKTRI
  13. C***REVISION HISTORY (YYMMDD)
  14. C 801001 DATE WRITTEN
  15. C 890531 Changed all specific intrinsics to generic. (WRB)
  16. C 891214 Prologue converted to Version 4.0 format. (BAB)
  17. C 900402 Added TYPE section. (WRB)
  18. C***END PROLOGUE HSTCS1
  19. DIMENSION BDA(*) ,BDB(*) ,BDC(*) ,BDD(*) ,
  20. 1 F(IDIMF,*) ,AM(*) ,BM(*) ,CM(*) ,
  21. 2 AN(*) ,BN(*) ,CN(*) ,SNTH(*) ,
  22. 3 RSQ(*) ,WRK(*)
  23. C***FIRST EXECUTABLE STATEMENT HSTCS1
  24. DTH = (B-A)/M
  25. DTHSQ = DTH*DTH
  26. DO 101 I=1,M
  27. SNTH(I) = SIN(A+(I-0.5)*DTH)
  28. 101 CONTINUE
  29. DR = (D-C)/N
  30. DO 102 J=1,N
  31. RSQ(J) = (C+(J-0.5)*DR)**2
  32. 102 CONTINUE
  33. C
  34. C MULTIPLY RIGHT SIDE BY R(J)**2
  35. C
  36. DO 104 J=1,N
  37. X = RSQ(J)
  38. DO 103 I=1,M
  39. F(I,J) = X*F(I,J)
  40. 103 CONTINUE
  41. 104 CONTINUE
  42. C
  43. C DEFINE COEFFICIENTS AM,BM,CM
  44. C
  45. X = 1./(2.*COS(DTH/2.))
  46. DO 105 I=2,M
  47. AM(I) = (SNTH(I-1)+SNTH(I))*X
  48. CM(I-1) = AM(I)
  49. 105 CONTINUE
  50. AM(1) = SIN(A)
  51. CM(M) = SIN(B)
  52. DO 106 I=1,M
  53. X = 1./SNTH(I)
  54. Y = X/DTHSQ
  55. AM(I) = AM(I)*Y
  56. CM(I) = CM(I)*Y
  57. BM(I) = ELMBDA*X*X-AM(I)-CM(I)
  58. 106 CONTINUE
  59. C
  60. C DEFINE COEFFICIENTS AN,BN,CN
  61. C
  62. X = C/DR
  63. DO 107 J=1,N
  64. AN(J) = (X+J-1)**2
  65. CN(J) = (X+J)**2
  66. BN(J) = -(AN(J)+CN(J))
  67. 107 CONTINUE
  68. ISW = 1
  69. NB = NBDCND
  70. IF (C.EQ.0. .AND. NB.EQ.2) NB = 6
  71. C
  72. C ENTER DATA ON THETA BOUNDARIES
  73. C
  74. GO TO (108,108,110,110,112,112,108,110,112),MBDCND
  75. 108 BM(1) = BM(1)-AM(1)
  76. X = 2.*AM(1)
  77. DO 109 J=1,N
  78. F(1,J) = F(1,J)-X*BDA(J)
  79. 109 CONTINUE
  80. GO TO 112
  81. 110 BM(1) = BM(1)+AM(1)
  82. X = DTH*AM(1)
  83. DO 111 J=1,N
  84. F(1,J) = F(1,J)+X*BDA(J)
  85. 111 CONTINUE
  86. 112 CONTINUE
  87. GO TO (113,115,115,113,113,115,117,117,117),MBDCND
  88. 113 BM(M) = BM(M)-CM(M)
  89. X = 2.*CM(M)
  90. DO 114 J=1,N
  91. F(M,J) = F(M,J)-X*BDB(J)
  92. 114 CONTINUE
  93. GO TO 117
  94. 115 BM(M) = BM(M)+CM(M)
  95. X = DTH*CM(M)
  96. DO 116 J=1,N
  97. F(M,J) = F(M,J)-X*BDB(J)
  98. 116 CONTINUE
  99. 117 CONTINUE
  100. C
  101. C ENTER DATA ON R BOUNDARIES
  102. C
  103. GO TO (118,118,120,120,122,122),NB
  104. 118 BN(1) = BN(1)-AN(1)
  105. X = 2.*AN(1)
  106. DO 119 I=1,M
  107. F(I,1) = F(I,1)-X*BDC(I)
  108. 119 CONTINUE
  109. GO TO 122
  110. 120 BN(1) = BN(1)+AN(1)
  111. X = DR*AN(1)
  112. DO 121 I=1,M
  113. F(I,1) = F(I,1)+X*BDC(I)
  114. 121 CONTINUE
  115. 122 CONTINUE
  116. GO TO (123,125,125,123,123,125),NB
  117. 123 BN(N) = BN(N)-CN(N)
  118. X = 2.*CN(N)
  119. DO 124 I=1,M
  120. F(I,N) = F(I,N)-X*BDD(I)
  121. 124 CONTINUE
  122. GO TO 127
  123. 125 BN(N) = BN(N)+CN(N)
  124. X = DR*CN(N)
  125. DO 126 I=1,M
  126. F(I,N) = F(I,N)-X*BDD(I)
  127. 126 CONTINUE
  128. 127 CONTINUE
  129. C
  130. C CHECK FOR SINGULAR PROBLEM. IF SINGULAR, PERTURB F.
  131. C
  132. PERTRB = 0.
  133. GO TO (137,137,128,137,137,128,137,128,128),MBDCND
  134. 128 GO TO (137,137,129,137,137,129),NB
  135. 129 IF (ELMBDA) 137,131,130
  136. 130 IERR1 = 10
  137. GO TO 137
  138. 131 CONTINUE
  139. ISW = 2
  140. DO 133 I=1,M
  141. X = 0.
  142. DO 132 J=1,N
  143. X = X+F(I,J)
  144. 132 CONTINUE
  145. PERTRB = PERTRB+X*SNTH(I)
  146. 133 CONTINUE
  147. X = 0.
  148. DO 134 J=1,N
  149. X = X+RSQ(J)
  150. 134 CONTINUE
  151. PERTRB = 2.*(PERTRB*SIN(DTH/2.))/(X*(COS(A)-COS(B)))
  152. DO 136 J=1,N
  153. X = RSQ(J)*PERTRB
  154. DO 135 I=1,M
  155. F(I,J) = F(I,J)-X
  156. 135 CONTINUE
  157. 136 CONTINUE
  158. 137 CONTINUE
  159. A2 = 0.
  160. DO 138 I=1,M
  161. A2 = A2+F(I,1)
  162. 138 CONTINUE
  163. A2 = A2/RSQ(1)
  164. C
  165. C INITIALIZE BLKTRI
  166. C
  167. IF (INTL .NE. 0) GO TO 139
  168. CALL BLKTRI (0,1,N,AN,BN,CN,1,M,AM,BM,CM,IDIMF,F,IERR1,WRK)
  169. 139 CONTINUE
  170. C
  171. C CALL BLKTRI TO SOLVE SYSTEM OF EQUATIONS.
  172. C
  173. CALL BLKTRI (1,1,N,AN,BN,CN,1,M,AM,BM,CM,IDIMF,F,IERR1,WRK)
  174. IF (ISW.NE.2 .OR. C.NE.0. .OR. NBDCND.NE.2) GO TO 143
  175. A1 = 0.
  176. A3 = 0.
  177. DO 140 I=1,M
  178. A1 = A1+SNTH(I)*F(I,1)
  179. A3 = A3+SNTH(I)
  180. 140 CONTINUE
  181. A1 = A1+RSQ(1)*A2/2.
  182. IF (MBDCND .EQ. 3)
  183. 1 A1 = A1+(SIN(B)*BDB(1)-SIN(A)*BDA(1))/(2.*(B-A))
  184. A1 = A1/A3
  185. A1 = BDC(1)-A1
  186. DO 142 I=1,M
  187. DO 141 J=1,N
  188. F(I,J) = F(I,J)+A1
  189. 141 CONTINUE
  190. 142 CONTINUE
  191. 143 CONTINUE
  192. RETURN
  193. END