File: RELATIVE:/../../../mfix.git/model/calc_mflux.f
1
2
3
4
5
6
7
8
9
10 SUBROUTINE CALC_MFLUX()
11
12
13
14 USE fldvar, only: u_g, v_g, w_g
15 USE fldvar, only: u_s, v_s, w_s
16 USE mflux, only: rop_ge, rop_gn, rop_gt
17 USE mflux, only: rop_se, rop_sn, rop_st
18 USE mflux, only: flux_ge, flux_gn, flux_gt
19 USE mflux, only: flux_se, flux_sn, flux_st
20 USE mflux, only: flux_gse, flux_gsn, flux_gst
21 USE mflux, only: flux_sse, flux_ssn, flux_sst
22 USE physprop, only: mmax
23 USE run, only: added_mass, m_am
24 IMPLICIT NONE
25
26
27
28
29 INTEGER :: M
30
31
32 IF(.NOT.Added_Mass) THEN
33 CALL CALC_MFLUX0 (U_g, V_g, W_g, ROP_gE, ROP_gN, ROP_gT, &
34 Flux_gE, Flux_gN, Flux_gT)
35 DO M = 1, MMAX
36 CALL CALC_MFLUX0 (U_s(1,M), V_s(1,M), W_s(1,M), &
37 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M), &
38 Flux_sE(1,M), Flux_sN(1,M), Flux_sT(1,M))
39 ENDDO
40
41 ELSE
42
43 CALL CALC_MFLUX_AM (U_g, V_g, W_g, ROP_gE, ROP_gN, ROP_gT, &
44 ROP_sE(1,M_AM), ROP_sN(1,M_AM), ROP_sT(1,M_AM), &
45 Flux_gE, Flux_gN, Flux_gT, M_AM)
46
47 CALL CALC_MFLUX0 (U_g, V_g, W_g, ROP_gE, ROP_gN, ROP_gT, &
48 Flux_gSE, Flux_gSN, Flux_gST)
49 DO M = 1, MMAX
50
51 IF(M==M_AM) THEN
52 CALL CALC_MFLUX_AM (U_s(1,M), V_s(1,M), W_s(1,M), &
53 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M), &
54 ROP_gE, ROP_gN, ROP_gT, &
55 Flux_sE(1,M), Flux_sN(1,M), Flux_sT(1,M),&
56 M_AM)
57 CALL CALC_MFLUX0 (U_s(1,M), V_s(1,M), W_s(1,M), &
58 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M), &
59 Flux_sSE, Flux_sSN, Flux_sST)
60 ELSE
61 CALL CALC_MFLUX0 (U_s(1,M), V_s(1,M), W_s(1,M), &
62 ROP_sE(1,M), ROP_sN(1,M), ROP_sT(1,M), &
63 Flux_sE(1,M), Flux_sN(1,M), Flux_sT(1,M))
64 ENDIF
65 ENDDO
66 ENDIF
67
68 RETURN
69 END SUBROUTINE CALC_MFLUX
70
71
72
73
74
75
76
77
78
79
80 SUBROUTINE CALC_MFLUX0(U, V, W, ROP_E, ROP_N, ROP_T,&
81 Flux_E, Flux_N, Flux_T)
82
83
84
85 USE compar, only: ijkstart3, ijkend3
86 USE functions, only: fluid_at
87 USE functions, only: im_of, jm_of, km_of
88 USE geometry, only: do_k
89 USE geometry, only: ayz, axz, axy
90 USE param, only: dimension_3
91 IMPLICIT NONE
92
93
94
95
96 DOUBLE PRECISION, INTENT(IN) :: U(DIMENSION_3)
97 DOUBLE PRECISION, INTENT(IN) :: V(DIMENSION_3)
98 DOUBLE PRECISION, INTENT(IN) :: W(DIMENSION_3)
99
100 DOUBLE PRECISION, INTENT(IN) :: ROP_E(DIMENSION_3)
101 DOUBLE PRECISION, INTENT(IN) :: ROP_N(DIMENSION_3)
102 DOUBLE PRECISION, INTENT(IN) :: ROP_T(DIMENSION_3)
103
104 DOUBLE PRECISION, INTENT(OUT) :: Flux_E(DIMENSION_3)
105 DOUBLE PRECISION, INTENT(OUT) :: Flux_N(DIMENSION_3)
106 DOUBLE PRECISION, INTENT(OUT) :: Flux_T(DIMENSION_3)
107
108
109
110
111 INTEGER :: IJK, IMJK, IJMK, IJKM
112
113
114
115
116
117
118 DO IJK = ijkstart3, ijkend3
119 IF (FLUID_AT(IJK)) THEN
120
121 IMJK = IM_OF(IJK)
122 IJMK = JM_OF(IJK)
123
124
125 (IJK) = ROP_E(IJK)*AYZ(IJK)*U(IJK)
126
127 IF (.NOT.FLUID_AT(IMJK)) THEN
128 Flux_E(IMJK) = ROP_E(IMJK)*AYZ(IMJK)*U(IMJK)
129 ENDIF
130
131
132 (IJK) = ROP_N(IJK)*AXZ(IJK)*V(IJK)
133
134 IF (.NOT.FLUID_AT(IJMK)) THEN
135 Flux_N(IJMK) = ROP_N(IJMK)*AXZ(IJMK)*V(IJMK)
136 ENDIF
137
138 IF (DO_K) THEN
139 IJKM = KM_OF(IJK)
140
141 (IJK) = ROP_T(IJK)*AXY(IJK)*W(IJK)
142
143 IF (.NOT.FLUID_AT(IJKM)) THEN
144 Flux_T(IJKM) = ROP_T(IJKM)*AXY(IJKM)*W(IJKM)
145 ENDIF
146 ENDIF
147 ENDIF
148 ENDDO
149
150 RETURN
151 END SUBROUTINE CALC_MFLUX0
152
153
154
155
156
157
158
159
160
161
162
163 SUBROUTINE CALC_MFLUX_AM(U, V, W, ROP_E, ROP_N, ROP_T, &
164 ROPa_E, ROPa_N, ROPa_T, Flux_E, &
165 Flux_N, Flux_T, M_AM)
166
167
168
169 USE compar, only: ijkstart3, ijkend3
170 USE functions, only: fluid_at
171 USE functions, only: im_of, jm_of, km_of
172 USE fldvar, only: ro_s
173 USE geometry, only: do_k
174 USE geometry, only: ayz, axz, axy
175 USE param, only: dimension_3
176 USE param1, only: one
177 USE physprop, only: cv
178 IMPLICIT NONE
179
180
181
182
183 DOUBLE PRECISION, INTENT(IN) :: U(DIMENSION_3)
184 DOUBLE PRECISION, INTENT(IN) :: V(DIMENSION_3)
185 DOUBLE PRECISION, INTENT(IN) :: W(DIMENSION_3)
186
187 DOUBLE PRECISION, INTENT(IN) :: ROP_E(DIMENSION_3)
188 DOUBLE PRECISION, INTENT(IN) :: ROP_N(DIMENSION_3)
189 DOUBLE PRECISION, INTENT(IN) :: ROP_T(DIMENSION_3)
190
191 DOUBLE PRECISION, INTENT(IN) :: ROPa_E(DIMENSION_3)
192 DOUBLE PRECISION, INTENT(IN) :: ROPa_N(DIMENSION_3)
193 DOUBLE PRECISION, INTENT(IN) :: ROPa_T(DIMENSION_3)
194
195 DOUBLE PRECISION, INTENT(OUT) :: Flux_E(DIMENSION_3)
196 DOUBLE PRECISION, INTENT(OUT) :: Flux_N(DIMENSION_3)
197 DOUBLE PRECISION, INTENT(OUT) :: Flux_T(DIMENSION_3)
198
199 INTEGER, INTENT(IN) :: M_AM
200
201
202
203
204 INTEGER :: IJK, IMJK, IJMK, IJKM
205
206
207
208
209 DO IJK = ijkstart3, ijkend3
210
211 IF (FLUID_AT(IJK)) THEN
212
213 IMJK = IM_OF(IJK)
214 IJMK = JM_OF(IJK)
215
216
217 (IJK) = ROP_E(IJK)* &
218 (ONE + Cv*ROPa_E(IJK)/RO_S(IJK,M_AM))*&
219 AYZ(IJK)*U(IJK)
220
221 IF (.NOT.FLUID_AT(IMJK)) THEN
222 Flux_E(IMJK) = ROP_E(IMJK)*&
223 (ONE + Cv*ROPa_E(IMJK)/RO_S(IJK,M_AM))*&
224 AYZ(IMJK)*U(IMJK)
225 ENDIF
226
227
228 (IJK) = ROP_N(IJK)*&
229 (ONE + Cv*ROPa_N(IJK)/RO_S(IJK,M_AM))*&
230 AXZ(IJK)*V(IJK)
231
232 IF (.NOT.FLUID_AT(IJMK)) THEN
233 Flux_N(IJMK) = ROP_N(IJMK)*&
234 (ONE + Cv*ROPa_N(IJMK)/RO_S(IJK,M_AM))*&
235 AXZ(IJMK)*V(IJMK)
236 ENDIF
237
238 IF (DO_K) THEN
239 IJKM = KM_OF(IJK)
240
241
242 (IJK) = ROP_T(IJK)*&
243 (ONE + Cv*ROPa_T(IJK)/RO_S(IJK,M_AM))*&
244 AXY(IJK)*W(IJK)
245
246 IF (.NOT.FLUID_AT(IJKM)) THEN
247 Flux_T(IJKM) = ROP_T(IJKM)*&
248 (ONE + Cv*ROPa_T(IJKM)/RO_S(IJK,M_AM))*&
249 AXY(IJKM)*W(IJKM)
250 ENDIF
251 ENDIF
252 ENDIF
253 ENDDO
254
255 RETURN
256 END SUBROUTINE CALC_MFLUX_AM
257