pos3d1.f 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. *DECK POS3D1
  2. SUBROUTINE POS3D1 (LP, L, MP, M, N, A, B, C, LDIMF, MDIMF, F, XRT,
  3. + YRT, T, D, WX, WY, C1, C2, BB)
  4. C***BEGIN PROLOGUE POS3D1
  5. C***SUBSIDIARY
  6. C***PURPOSE Subsidiary to POIS3D
  7. C***LIBRARY SLATEC
  8. C***TYPE SINGLE PRECISION (POS3D1-S)
  9. C***AUTHOR (UNKNOWN)
  10. C***SEE ALSO POIS3D
  11. C***ROUTINES CALLED COSQB, COSQF, COSQI, COST, COSTI, PIMACH, RFFTB,
  12. C RFFTF, RFFTI, SINQB, SINQF, SINQI, SINT, SINTI,
  13. C TRIDQ
  14. C***REVISION HISTORY (YYMMDD)
  15. C 801001 DATE WRITTEN
  16. C 890531 Changed all specific intrinsics to generic. (WRB)
  17. C 891009 Removed unreferenced variable. (WRB)
  18. C 891214 Prologue converted to Version 4.0 format. (BAB)
  19. C 900308 Changed call to TRID to call to TRIDQ. (WRB)
  20. C 900402 Added TYPE section. (WRB)
  21. C***END PROLOGUE POS3D1
  22. DIMENSION A(*) ,B(*) ,C(*) ,
  23. 1 F(LDIMF,MDIMF,*) ,XRT(*) ,YRT(*) ,
  24. 2 T(*) ,D(*) ,WX(*) ,WY(*) ,
  25. 3 BB(*)
  26. C***FIRST EXECUTABLE STATEMENT POS3D1
  27. PI = PIMACH(DUM)
  28. LR = L
  29. MR = M
  30. NR = N
  31. C
  32. C GENERATE TRANSFORM ROOTS
  33. C
  34. LRDEL = ((LP-1)*(LP-3)*(LP-5))/3
  35. SCALX = LR+LRDEL
  36. DX = PI/(2.*SCALX)
  37. GO TO (108,103,101,102,101),LP
  38. 101 DI = 0.5
  39. SCALX = 2.*SCALX
  40. GO TO 104
  41. 102 DI = 1.0
  42. GO TO 104
  43. 103 DI = 0.0
  44. 104 DO 105 I=1,LR
  45. XRT(I) = -4.*C1*(SIN((I-DI)*DX))**2
  46. 105 CONTINUE
  47. SCALX = 2.*SCALX
  48. GO TO (112,106,110,107,111),LP
  49. 106 CALL SINTI (LR,WX)
  50. GO TO 112
  51. 107 CALL COSTI (LR,WX)
  52. GO TO 112
  53. 108 XRT(1) = 0.
  54. XRT(LR) = -4.*C1
  55. DO 109 I=3,LR,2
  56. XRT(I-1) = -4.*C1*(SIN((I-1)*DX))**2
  57. XRT(I) = XRT(I-1)
  58. 109 CONTINUE
  59. CALL RFFTI (LR,WX)
  60. GO TO 112
  61. 110 CALL SINQI (LR,WX)
  62. GO TO 112
  63. 111 CALL COSQI (LR,WX)
  64. 112 CONTINUE
  65. MRDEL = ((MP-1)*(MP-3)*(MP-5))/3
  66. SCALY = MR+MRDEL
  67. DY = PI/(2.*SCALY)
  68. GO TO (120,115,113,114,113),MP
  69. 113 DJ = 0.5
  70. SCALY = 2.*SCALY
  71. GO TO 116
  72. 114 DJ = 1.0
  73. GO TO 116
  74. 115 DJ = 0.0
  75. 116 DO 117 J=1,MR
  76. YRT(J) = -4.*C2*(SIN((J-DJ)*DY))**2
  77. 117 CONTINUE
  78. SCALY = 2.*SCALY
  79. GO TO (124,118,122,119,123),MP
  80. 118 CALL SINTI (MR,WY)
  81. GO TO 124
  82. 119 CALL COSTI (MR,WY)
  83. GO TO 124
  84. 120 YRT(1) = 0.
  85. YRT(MR) = -4.*C2
  86. DO 121 J=3,MR,2
  87. YRT(J-1) = -4.*C2*(SIN((J-1)*DY))**2
  88. YRT(J) = YRT(J-1)
  89. 121 CONTINUE
  90. CALL RFFTI (MR,WY)
  91. GO TO 124
  92. 122 CALL SINQI (MR,WY)
  93. GO TO 124
  94. 123 CALL COSQI (MR,WY)
  95. 124 CONTINUE
  96. IFWRD = 1
  97. 125 CONTINUE
  98. C
  99. C TRANSFORM X
  100. C
  101. DO 141 J=1,MR
  102. DO 140 K=1,NR
  103. DO 126 I=1,LR
  104. T(I) = F(I,J,K)
  105. 126 CONTINUE
  106. GO TO (127,130,131,134,135),LP
  107. 127 GO TO (128,129),IFWRD
  108. 128 CALL RFFTF (LR,T,WX)
  109. GO TO 138
  110. 129 CALL RFFTB (LR,T,WX)
  111. GO TO 138
  112. 130 CALL SINT (LR,T,WX)
  113. GO TO 138
  114. 131 GO TO (132,133),IFWRD
  115. 132 CALL SINQF (LR,T,WX)
  116. GO TO 138
  117. 133 CALL SINQB (LR,T,WX)
  118. GO TO 138
  119. 134 CALL COST (LR,T,WX)
  120. GO TO 138
  121. 135 GO TO (136,137),IFWRD
  122. 136 CALL COSQF (LR,T,WX)
  123. GO TO 138
  124. 137 CALL COSQB (LR,T,WX)
  125. 138 CONTINUE
  126. DO 139 I=1,LR
  127. F(I,J,K) = T(I)
  128. 139 CONTINUE
  129. 140 CONTINUE
  130. 141 CONTINUE
  131. GO TO (142,164),IFWRD
  132. C
  133. C TRANSFORM Y
  134. C
  135. 142 CONTINUE
  136. DO 158 I=1,LR
  137. DO 157 K=1,NR
  138. DO 143 J=1,MR
  139. T(J) = F(I,J,K)
  140. 143 CONTINUE
  141. GO TO (144,147,148,151,152),MP
  142. 144 GO TO (145,146),IFWRD
  143. 145 CALL RFFTF (MR,T,WY)
  144. GO TO 155
  145. 146 CALL RFFTB (MR,T,WY)
  146. GO TO 155
  147. 147 CALL SINT (MR,T,WY)
  148. GO TO 155
  149. 148 GO TO (149,150),IFWRD
  150. 149 CALL SINQF (MR,T,WY)
  151. GO TO 155
  152. 150 CALL SINQB (MR,T,WY)
  153. GO TO 155
  154. 151 CALL COST (MR,T,WY)
  155. GO TO 155
  156. 152 GO TO (153,154),IFWRD
  157. 153 CALL COSQF (MR,T,WY)
  158. GO TO 155
  159. 154 CALL COSQB (MR,T,WY)
  160. 155 CONTINUE
  161. DO 156 J=1,MR
  162. F(I,J,K) = T(J)
  163. 156 CONTINUE
  164. 157 CONTINUE
  165. 158 CONTINUE
  166. GO TO (159,125),IFWRD
  167. 159 CONTINUE
  168. C
  169. C SOLVE TRIDIAGONAL SYSTEMS IN Z
  170. C
  171. DO 163 I=1,LR
  172. DO 162 J=1,MR
  173. DO 160 K=1,NR
  174. BB(K) = B(K)+XRT(I)+YRT(J)
  175. T(K) = F(I,J,K)
  176. 160 CONTINUE
  177. CALL TRIDQ (NR,A,BB,C,T,D)
  178. DO 161 K=1,NR
  179. F(I,J,K) = T(K)
  180. 161 CONTINUE
  181. 162 CONTINUE
  182. 163 CONTINUE
  183. IFWRD = 2
  184. GO TO 142
  185. 164 CONTINUE
  186. DO 167 I=1,LR
  187. DO 166 J=1,MR
  188. DO 165 K=1,NR
  189. F(I,J,K) = F(I,J,K)/(SCALX*SCALY)
  190. 165 CONTINUE
  191. 166 CONTINUE
  192. 167 CONTINUE
  193. RETURN
  194. END