File: N:\mfix\model\conv_rop.f
1
2
3
4
5
6
7
8
9
10
11 SUBROUTINE CONV_ROP()
12
13
14
15 USE fldvar, only: rop_g, u_g, v_g, w_g
16 USE fldvar, only: rop_s, u_s, v_s, w_s
17 USE mflux, only: rop_ge, rop_gn, rop_gt
18 USE mflux, only: rop_se, rop_sn, rop_st
19 USE physprop, only: mmax
20 USE run, only: discretize
21 IMPLICIT NONE
22
23
24
25
26
27 INTEGER :: M
28
29
30 IF (DISCRETIZE(1) == 0) THEN
31 CALL CONV_ROP0 (ROP_g, U_g, V_g, W_g, &
32 ROP_gE, ROP_gN, ROP_gT)
33 ELSE
34 CALL CONV_ROP1 (DISCRETIZE(1), ROP_g, U_g, V_g, W_g, &
35 ROP_gE, ROP_gN, ROP_gT)
36 ENDIF
37
38 IF (DISCRETIZE(2) == 0) THEN
39 DO M = 1, MMAX
40 CALL CONV_ROP0 (ROP_s(1,M), U_s(1,M), V_s(1,M), W_s(1,M), &
41 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M))
42 ENDDO
43 ELSE
44 DO M = 1, MMAX
45 CALL CONV_ROP1 (DISCRETIZE(2), ROP_s(1,M), &
46 U_s(1,M), V_s(1,M), W_s(1,M), &
47 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M))
48 ENDDO
49 ENDIF
50
51 RETURN
52 END SUBROUTINE CONV_ROP
53
54
55
56
57
58
59
60
61
62
63
64
65 SUBROUTINE CONV_ROP0(ROP, U, V, W, ROP_E, ROP_N, ROP_T)
66
67
68
69 USE compar, only: ijkstart3, ijkend3
70 USE functions, only: fluid_at
71 USE functions, only: east_of, north_of, top_of
72 USE functions, only: west_of, south_of, bottom_of
73 USE functions, only: im_of, jm_of, km_of
74 USE geometry, only: do_k
75 USE param, only: dimension_3
76 USE param1, only: zero
77 IMPLICIT NONE
78
79
80
81
82 DOUBLE PRECISION, INTENT(IN) :: ROP(DIMENSION_3)
83
84 DOUBLE PRECISION, INTENT(IN) :: U(DIMENSION_3)
85 DOUBLE PRECISION, INTENT(IN) :: V(DIMENSION_3)
86 DOUBLE PRECISION, INTENT(IN) :: W(DIMENSION_3)
87
88 DOUBLE PRECISION, INTENT(OUT) :: ROP_E(DIMENSION_3)
89 DOUBLE PRECISION, INTENT(OUT) :: ROP_N(DIMENSION_3)
90 DOUBLE PRECISION, INTENT(OUT) :: ROP_T(DIMENSION_3)
91
92
93
94
95 INTEGER :: IJK
96 INTEGER :: IJKE, IJKN, IJKT
97 INTEGER :: IJKW, IJKS, IJKB
98 INTEGER :: IMJK, IJMK, IJKM
99
100
101
102
103
104
105
106
107 DO IJK = ijkstart3, ijkend3
108
109 IF (FLUID_AT(IJK)) THEN
110 IJKE = EAST_OF(IJK)
111 IJKN = NORTH_OF(IJK)
112 IJKT = TOP_OF(IJK)
113
114 IMJK = IM_OF(IJK)
115 IJMK = JM_OF(IJK)
116
117
118 IF (U(IJK) >= ZERO) THEN
119 ROP_E(IJK) = ROP(IJK)
120 ELSE
121 ROP_E(IJK) = ROP(IJKE)
122 ENDIF
123
124 IF (.NOT.FLUID_AT(IMJK)) THEN
125 IJKW = WEST_OF(IJK)
126 IF (U(IMJK) >= ZERO) THEN
127 ROP_E(IMJK) = ROP(IJKW)
128 ELSE
129 ROP_E(IMJK) = ROP(IJK)
130 ENDIF
131 ENDIF
132
133
134
135 IF (V(IJK) >= ZERO) THEN
136 ROP_N(IJK) = ROP(IJK)
137 ELSE
138 ROP_N(IJK) = ROP(IJKN)
139 ENDIF
140
141 IF (.NOT.FLUID_AT(IJMK)) THEN
142 IJKS = SOUTH_OF(IJK)
143 IF (V(IJMK) >= ZERO) THEN
144 ROP_N(IJMK) = ROP(IJKS)
145 ELSE
146 ROP_N(IJMK) = ROP(IJK)
147 ENDIF
148 ENDIF
149
150
151 IF (DO_K) THEN
152 IJKM = KM_OF(IJK)
153
154 IF (W(IJK) >= ZERO) THEN
155 ROP_T(IJK) = ROP(IJK)
156 ELSE
157 ROP_T(IJK) = ROP(IJKT)
158 ENDIF
159
160 IF (.NOT.FLUID_AT(IJKM)) THEN
161 IJKB = BOTTOM_OF(IJK)
162 IF (W(IJKM) >= ZERO) THEN
163 ROP_T(IJKM) = ROP(IJKB)
164 ELSE
165 ROP_T(IJKM) = ROP(IJK)
166 ENDIF
167 ENDIF
168 ENDIF
169
170 ENDIF
171 ENDDO
172
173 RETURN
174 END SUBROUTINE CONV_ROP0
175
176
177
178
179
180
181
182
183
184
185
186
187
188 SUBROUTINE CONV_ROP1(DISC, ROP, U, V, W, ROP_E, ROP_N, ROP_T)
189
190
191
192 USE compar, only: ijkstart3, ijkend3
193 USE functions, only: fluid_at
194 USE functions, only: east_of, north_of, top_of
195 USE functions, only: west_of, south_of, bottom_of
196 USE functions, only: im_of, jm_of, km_of
197 USE geometry, only: do_k
198 USE param, only: dimension_3
199 USE param1, only: one
200 USE xsi, only: calc_xsi
201 IMPLICIT NONE
202
203
204
205
206 INTEGER, INTENT(IN) :: DISC
207
208 DOUBLE PRECISION, INTENT(IN) :: ROP(DIMENSION_3)
209
210 DOUBLE PRECISION, INTENT(IN) :: U(DIMENSION_3)
211 DOUBLE PRECISION, INTENT(IN) :: V(DIMENSION_3)
212 DOUBLE PRECISION, INTENT(IN) :: W(DIMENSION_3)
213
214 DOUBLE PRECISION, INTENT(OUT) :: ROP_E(DIMENSION_3)
215 DOUBLE PRECISION, INTENT(OUT) :: ROP_N(DIMENSION_3)
216 DOUBLE PRECISION, INTENT(OUT) :: ROP_T(DIMENSION_3)
217
218
219
220 INTEGER :: IJK, IJKE, IJKN, IJKT
221 INTEGER :: IJKW, IJKS, IJKB, IMJK, IJMK, IJKM
222 Integer :: incr
223
224 DOUBLE PRECISION, DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
225
226
227
228
229 =0
230 CALL CALC_XSI (DISC, ROP, U, V, W, XSI_E, XSI_N, XSI_T, incr)
231
232
233
234
235 DO IJK = ijkstart3, ijkend3
236
237 IF (FLUID_AT(IJK)) THEN
238 IJKE = EAST_OF(IJK)
239 IJKN = NORTH_OF(IJK)
240 IJKT = TOP_OF(IJK)
241
242 IMJK = IM_OF(IJK)
243 IJMK = JM_OF(IJK)
244
245
246 (IJK) = ((ONE-XSI_E(IJK))*ROP(IJK)+&
247 XSI_E(IJK)*ROP(IJKE))
248
249 IF (.NOT.FLUID_AT(IMJK)) THEN
250 IJKW = WEST_OF(IJK)
251 ROP_E(IMJK) = ((ONE - XSI_E(IMJK))*ROP(IJKW)+&
252 XSI_E(IMJK)*ROP(IJK))
253 ENDIF
254
255
256
257 (IJK) = ((ONE-XSI_N(IJK))*ROP(IJK)+&
258 XSI_N(IJK)*ROP(IJKN))
259
260 IF (.NOT.FLUID_AT(IJMK)) THEN
261 IJKS = SOUTH_OF(IJK)
262 ROP_N(IJMK) = ((ONE - XSI_N(IJMK))*ROP(IJKS)+&
263 XSI_N(IJMK)*ROP(IJK))
264 ENDIF
265
266
267 IF (DO_K) THEN
268 IJKM = KM_OF(IJK)
269
270
271 (IJK) = ((ONE - XSI_T(IJK))*ROP(IJK)+&
272 XSI_T(IJK)*ROP(IJKT))
273
274 IF (.NOT.FLUID_AT(IJKM)) THEN
275 IJKB = BOTTOM_OF(IJK)
276 ROP_T(IJKM) = ((ONE - XSI_T(IJKM))*ROP(IJKB)+&
277 XSI_T(IJKM)*ROP(IJK))
278 ENDIF
279 ENDIF
280
281 ENDIF
282 ENDDO
283
284 RETURN
285 END SUBROUTINE CONV_ROP1
286