File: N:\mfix\model\calc_vol_fr.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SUBROUTINE CALC_VOL_FR(P_STAR, RO_G, ROP_G, EP_G, ROP_S, IER)
19
20
21
22
23 USE compar
24 USE constant
25 USE discretelement
26 USE functions
27 USE geometry
28 USE indices
29 USE mpi_utility
30 USE parallel
31 USE param
32 USE param1
33 USE pgcor
34 USE physprop
35 USE pscor
36 USE run, only: ghd_2007, kt_type_enum
37 USE sendrecv
38 USE solids_pressure
39 USE visc_s
40 use fldvar, only: RO_S, EP_S
41
42 IMPLICIT NONE
43
44
45
46
47 DOUBLE PRECISION, INTENT(IN) :: P_star(DIMENSION_3)
48
49 DOUBLE PRECISION, INTENT(INOUT) :: RO_g(DIMENSION_3)
50
51 DOUBLE PRECISION, INTENT(INOUT) :: ROP_g(DIMENSION_3)
52
53 DOUBLE PRECISION, INTENT(INOUT) :: EP_g(DIMENSION_3)
54
55 DOUBLE PRECISION, INTENT(INOUT) :: ROP_s(DIMENSION_3, DIMENSION_M)
56
57 INTEGER, INTENT(INOUT) :: IER
58
59
60
61
62 DOUBLE PRECISION :: VOL_M
63
64 DOUBLE PRECISION :: EPcp
65
66 DOUBLE PRECISION :: EPS
67
68 DOUBLE PRECISION :: SUMVF
69
70
71
72
73 INTEGER :: MF
74
75
76
77
78
79 INTEGER :: MCPl
80
81 INTEGER :: M
82
83 INTEGER :: IJK
84
85
86
87
88 INTEGER :: Err_l(0:numPEs-1)
89 INTEGER :: Err_g(0:numPEs-1)
90
91 LOGICAL, PARAMETER :: REPORT_NEG_VOLFRAC = .TRUE.
92
93
94 LOGICAL :: wHeader
95
96
97
98
99 = .TRUE.
100
101 = 0
102
103
104
105
106 DO IJK = ijkstart3, ijkend3
107 IF (FLUID_AT(IJK)) THEN
108
109
110
111
112
113
114 IF (PHASE_4_P_S(IJK) /= UNDEFINED_I) THEN
115
116
117
118
119
120
121
122 = PHASE_4_P_s(IJK)
123
124
125
126 = 1. - INV_H(P_STAR(IJK),EP_g_blend_end(ijk))
127
128
129
130 = ZERO
131 DO M = 1, MMAX+DES_MMAX
132 IF (CLOSE_PACKED(M) .AND. M/=MCPl) SUMVF = SUMVF + EP_S(IJK,M)
133 ENDDO
134 ROP_S(IJK,MCPl) = (EPCP - SUMVF)*RO_S(IJK,MCPl)
135 ENDIF
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154 = PHASE_4_P_G(IJK)
155
156 SUMVF = ZERO
157 IF (0 /= MF) THEN
158
159
160 (IJK) = ROP_G(IJK)/RO_G(IJK)
161 SUMVF = SUMVF + EP_G(IJK)
162 ENDIF
163
164
165 IF(KT_TYPE_ENUM == GHD_2007) THEN
166 ROP_S(IJK,MMAX) = ZERO
167 DO M = 1, SMAX
168 IF (M /= MF) THEN
169 ROP_S(IJK,MMAX) = ROP_S(IJK,MMAX) + RO_S(IJK,M)*EP_S(IJK,M)
170 ENDIF
171 ENDDO
172 ENDIF
173
174
175
176
177 DO M = 1, DES_MMAX+MMAX
178 IF(KT_TYPE_ENUM == GHD_2007 .AND. M == MMAX) CYCLE
179 IF (M /= MF) SUMVF = SUMVF + EP_S(IJK,M)
180 ENDDO
181
182 IF (0 == MF) THEN
183
184
185
186 (IJK) = ONE - SUMVF
187
188
189 IF (EP_G(IJK) < ZERO) THEN
190 Err_l(myPE) = 110
191 IF(REPORT_NEG_VOLFRAC) CALL EPgErr_LOG(IJK, wHeader)
192 ENDIF
193
194 ROP_G(IJK) = EP_G(IJK)*RO_G(IJK)
195 ELSE
196
197 (IJK,MF) = (ONE - SUMVF)*RO_S(IJK,MF)
198 ENDIF
199
200
201 ENDIF
202 ENDDO
203
204 CALL send_recv(EP_G, 2)
205 CALL send_recv(ROP_G, 2)
206 CALL send_recv(ROP_S, 2)
207
208 CALL global_all_sum(Err_l, Err_g)
209 IER = maxval(Err_g)
210
211
212 RETURN
213 END SUBROUTINE CALC_VOL_FR
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230 SUBROUTINE SET_EP_FACTORS
231
232
233
234 use compar, only: ijkstart3, ijkend3
235 use fldvar, only: ep_g, ep_s
236 use fldvar, only: epg_ifac, eps_ifac, epg_jfac
237 use functions, only: wall_at
238 use param1, only: one, undefined
239 use physprop, only: mmax, mu_s0
240 use run, only: jackson, ishii
241 IMPLICIT NONE
242
243
244
245 INTEGER :: ijk, m
246
247 (:) = one
248 epg_ifac(:) = one
249 eps_ifac(:,:) = one
250
251 if (jackson) then
252 do ijk = ijkstart3, ijkend3
253 if (wall_at(ijk)) cycle
254 epg_jfac(ijk) = ep_g(ijk)
255 enddo
256 endif
257 if (ishii) then
258 do ijk = ijkstart3, ijkend3
259 if (wall_at(ijk)) cycle
260 epg_ifac(ijk) = ep_g(ijk)
261 do m = 1, mmax
262
263
264 IF (mu_s0(m) /= undefined) THEN
265 eps_ifac(ijk,m) = ep_s(ijk,m)
266 ENDIF
267 enddo
268 enddo
269 endif
270
271 RETURN
272 END SUBROUTINE SET_EP_FACTORS
273
274
275
276
277
278
279
280
281
282
283
284 SUBROUTINE EPgErr_LOG(IJK, tHeader)
285
286
287 use run, only: TIME
288
289 use fldvar, only: EP_g, EP_s, ROP_s, RO_s, U_s, V_s, W_s
290 use cutcell
291
292 use physprop, only: SMAX
293 use compar
294 use indices
295 use functions
296 use error_manager
297
298
299 IMPLICIT NONE
300
301 INTEGER, intent(in) :: IJK
302 LOGICAL, intent(inout) :: tHeader
303
304 LOGICAL :: lExists
305 CHARACTER(LEN=255) :: lFile
306 INTEGER, parameter :: lUnit = 4868
307 LOGICAL, save :: fHeader = .TRUE.
308
309 INTEGER :: M
310
311 lFile = '';
312 if(numPEs > 1) then
313 write(lFile,"('EPgErr_',I4.4,'.log')") myPE
314 else
315 write(lFile,"('EPgErr.log')")
316 endif
317 inquire(file=trim(lFile),exist=lExists)
318 if(lExists) then
319 open(lUnit,file=trim(adjustl(lFile)), &
320 status='old', position='append')
321 else
322 open(lUnit,file=trim(adjustl(lFile)), status='new')
323 endif
324
325 if(fHeader) then
326 write(lUnit,1000)
327 fHeader = .FALSE.
328 endif
329
330 if(tHeader) then
331 write(lUnit,"(/2x,'Simulation time: ',g12.5)") TIME
332 tHeader = .FALSE.
333 endif
334
335 write(lUnit,1001) IJK, I_OF(IJK), J_OF(IJK), K_OF(IJK)
336 write(lUnit,"(6x,A,1X,g12.5)",ADVANCE='NO') 'EP_g:', EP_g(IJK)
337 DO M=1,SMAX
338 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
339 trim(iVar('EP_s',M)), EP_s(IJK,M)
340 ENDDO
341 write(lUnit,"(' ')")
342
343 write(lUnit,"(24x)", ADVANCE='NO')
344 DO M=1,SMAX
345 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
346 trim(iVar('RO_s',M)), RO_s(IJK,M)
347 ENDDO
348 write(lUnit,"(' ')")
349
350 write(lUnit,"(24x)", ADVANCE='NO')
351 DO M=1,SMAX
352 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
353 trim(iVar('ROPs',M)), ROP_s(IJK,M)
354 ENDDO
355 write(lUnit,"(24x,' ')")
356
357
358 write(lUnit,"(24x)", ADVANCE='NO')
359 DO M=1,SMAX
360 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
361 trim(iVar('U_se',M)), U_s(IJK,M)
362 ENDDO
363 write(lUnit,"(24x,' ')")
364
365 write(lUnit,"(24x)", ADVANCE='NO')
366 DO M=1,SMAX
367 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
368 trim(iVar('V_sn',M)), V_s(IJK,M)
369 ENDDO
370 write(lUnit,"(24x,' ')")
371
372 write(lUnit,"(24x)", ADVANCE='NO')
373 DO M=1,SMAX
374 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
375 trim(iVar('W_st',M)), W_s(IJK,M)
376 ENDDO
377 write(lUnit,"(24x,' ')")
378
379 write(lUnit,"(24x)", ADVANCE='NO')
380 DO M=1,SMAX
381 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
382 trim(iVar('U_sw',M)), U_s(WEST_OF(IJK),M)
383 ENDDO
384 write(lUnit,"(24x,' ')")
385
386 write(lUnit,"(24x)", ADVANCE='NO')
387 DO M=1,SMAX
388 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
389 trim(iVar('V_ss',M)), V_s(SOUTH_OF(IJK),M)
390 ENDDO
391 write(lUnit,"(24x,' ')")
392
393 write(lUnit,"(24x)", ADVANCE='NO')
394 DO M=1,SMAX
395 write(lUnit,"(2x,A,1X,g12.5)", ADVANCE='NO') &
396 trim(iVar('W_sb',M)), W_s(BOTTOM_OF(IJK),M)
397 ENDDO
398 write(lUnit,"(24x,' ')")
399
400
401 if(CARTESIAN_GRID) then
402 write(lUnit,"(6x,A,1X,L1)",ADVANCE='NO') 'Cut Cell:', CUT_CELL_AT(IJK)
403 write(lUnit,"(6x,A,1X,L1)") 'Small Cell:', SMALL_CELL_AT(IJK)
404 write(lUnit,"(6x,'Coordinates (E/N/T): ',1X,3(2x, g17.8))") &
405 xg_e(I_OF(IJK)), yg_n(J_of(ijk)), zg_t(k_of(ijk))
406 endif
407
408 close(lUnit)
409
410 RETURN
411
412 1000 FORMAT('One or more cells have reported a negative gas volume ', &
413 'fraction (EP_g).',/)
414
415 1001 FORMAT(/4X,'IJK: ',I8,7X,'I: ',I4,' J: ',I4,' K: ',I4)
416
417 END SUBROUTINE EPgErr_LOG
418