File: N:\mfix\model\des\comp_mean_fields0.f
1
2
3 SUBROUTINE COMP_MEAN_FIELDS0
4
5
6 USE bc
7 USE compar
8 USE constant
9 USE cutcell
10 USE derived_types, only: pic
11 USE desmpi
12 USE discretelement
13 USE drag
14 USE fldvar
15 USE functions, only: FLUID_AT
16 USE functions, only: FUNIJK
17 USE functions, only: IS_ON_myPE_wobnd
18 USE geometry
19 USE indices
20 USE interpolation
21 USE mfix_pic
22 USE mpi_node_des, only: des_addnodevalues_mean_fields
23 USE mpi_utility
24 USE parallel
25 USE param
26 USE param1
27 USE particle_filter, only: DES_REPORT_MASS_INTERP
28 USE physprop, only: MMAX
29 USE run, only: solids_model
30 USE sendrecv
31
32 IMPLICIT NONE
33
34
35
36 INTEGER :: I, J, K, IJK, &
37 II, JJ, KK
38 INTEGER :: I1, I2, J1, J2, K1, K2
39 INTEGER :: IDIM, IJK2
40 INTEGER :: CUR_IJK
41
42
43 INTEGER :: IW, IE, JS, JN, KB, KTP
44
45
46 INTEGER, DIMENSION(3):: PCELL
47
48
49
50 INTEGER :: ONEW
51
52
53 DOUBLE PRECISION :: AVG_FACTOR
54
55 INTEGER :: M
56
57 INTEGER :: NP, NINDX
58
59 DOUBLE PRECISION :: WTP
60
61 DOUBLE PRECISION :: MASS_SOL1, MASS_SOL2
62
63 DOUBLE PRECISION :: MASS_SOL1_ALL, MASS_SOL2_ALL
64
65 DOUBLE PRECISION :: TEMP1, TEMP2
66
67 DOUBLE PRECISION, DIMENSION(3) :: DES_VEL_DENSITY
68 DOUBLE PRECISION :: DES_ROP_DENSITY
69
70 INTEGER :: COUNT_NODES_OUTSIDE, COUNT_NODES_INSIDE, &
71 COUNT_NODES_INSIDE_MAX
72
73 DOUBLE PRECISION :: RESID_ROPS(DIMENSION_M)
74 DOUBLE PRECISION :: RESID_VEL(3, DIMENSION_M)
75 DOUBLE PRECISION :: NORM_FACTOR
76
77
78 DOUBLE PRECISION, DIMENSION(2,2,2,3) :: gst_tmp
79 DOUBLE PRECISION, DIMENSION(2,2,2) :: weight_ft
80
81
82 INTEGER :: MMAX_TOT
83
84
85
86 = ZERO
87 MASS_SOL2 = ZERO
88 MASS_SOL1_ALL = ZERO
89 MASS_SOL2_ALL = ZERO
90
91 = merge(0.5d0, 0.25D0, NO_K)
92
93
94 = merge(4, 8, NO_K)
95
96 MMAX_TOT = DES_MMAX+MMAX
97
98
99 (:,MMAX+1:MMAX_TOT) = zero
100 U_S(:,MMAX+1:MMAX_TOT) = ZERO
101 V_S(:,MMAX+1:MMAX_TOT) = ZERO
102 IF(DO_K) W_S(:,MMAX+1:MMAX_TOT) = ZERO
103
104 = ZERO
105 DES_ROPS_NODE = ZERO
106
107
108
109 CALL SET_INTERPOLATION_SCHEME(2)
110
111
112
113
114
115
116
117
118 DO IJK = IJKSTART3,IJKEND3
119
120
121
122 IF(.NOT.FLUID_AT(IJK)) CYCLE
123 IF( PINC(IJK) == 0) CYCLE
124
125 PCELL(1) = I_OF(IJK)-1
126 PCELL(2) = J_OF(IJK)-1
127 PCELL(3) = merge(K_OF(IJK)-1, 1, DO_K)
128
129
130
131 CALL SET_INTERPOLATION_STENCIL(PCELL, IW, IE, JS, JN, KB, KTP,&
132 INTERP_SCHEME, DIMN, ORDERNEW=ONEW)
133
134 COUNT_NODES_OUTSIDE = 0
135
136 DO K=1, merge(1, ONEW, NO_K)
137 DO J=1, ONEW
138 DO I=1, ONEW
139 II = IW + I-1
140 JJ = JS + J-1
141 KK = KB + K-1
142 CUR_IJK = funijk_map_c(II,JJ,KK)
143 GST_TMP(I,J,K,1) = XE(II)
144 GST_TMP(I,J,K,2) = YN(JJ)
145 GST_TMP(I,J,K,3) = merge(DZ(1), ZT(KK), NO_K)
146 IF(CARTESIAN_GRID) THEN
147 IF(SCALAR_NODE_ATWALL(CUR_IJK)) &
148 COUNT_NODES_OUTSIDE = COUNT_NODES_OUTSIDE + 1
149 ENDIF
150 ENDDO
151 ENDDO
152 ENDDO
153
154
155
156
157
158
159 DO NINDX=1, PINC(IJK)
160 NP = PIC(IJK)%P(NINDX)
161 call DRAG_WEIGHTFACTOR(gst_tmp,des_pos_new(np,:),weight_ft)
162 M = PIJK(NP,5)
163 WTP = ONE
164
165 IF(MPPIC) WTP = DES_STAT_WT(NP)
166
167 MASS_SOL1 = MASS_SOL1 + PMASS(NP)*WTP
168 TEMP2 = PMASS(NP)*WTP
169 DO K = 1, merge(1, ONEW, NO_K)
170 DO J = 1, ONEW
171 DO I = 1, ONEW
172
173 = IW + I-1
174 JJ = JS + J-1
175 KK = KB + K-1
176 CUR_IJK = FUNIJK_MAP_C(II,JJ,KK)
177 TEMP1 = WEIGHT_FT(I,J,K)*TEMP2
178
179 DES_ROPS_NODE(CUR_IJK,M) = DES_ROPS_NODE(CUR_IJK,M) + &
180 TEMP1
181 DES_VEL_NODE(CUR_IJK,:,M) = DES_VEL_NODE(CUR_IJK,:,M) + &
182 TEMP1*DES_VEL_NEW(NP,:)
183 ENDDO
184 ENDDO
185 ENDDO
186 ENDDO
187
188
189
190
191
192
193
194
195
196
197 = ZERO
198 RESID_VEL = ZERO
199 IF (CARTESIAN_GRID) THEN
200
201
202 = COUNT_NODES_INSIDE_MAX - &
203 COUNT_NODES_OUTSIDE
204
205 IF(COUNT_NODES_INSIDE.LT.COUNT_NODES_INSIDE_MAX) THEN
206
207
208
209
210
211
212
213
214
215 = I_OF(IJK)
216 J = J_OF(IJK)
217 K = K_OF(IJK)
218 I1 = I-1
219 I2 = I
220 J1 = J-1
221 J2 = J
222 K1 = merge(K, K-1, NO_K)
223 K2 = K
224
225
226
227 DO KK = K1, K2
228 DO JJ = J1, J2
229 DO II = I1, I2
230 IJK2 = funijk(II, JJ, KK)
231 IF(SCALAR_NODE_ATWALL(IJK2)) THEN
232 DO M = MMAX+1,MMAX_TOT
233 RESID_ROPS(M) = RESID_ROPS(M) + &
234 DES_ROPS_NODE(IJK2,M)
235 DES_ROPS_NODE(IJK2,M) = ZERO
236
237 DO IDIM = 1, merge(2,3,NO_K)
238 RESID_VEL(IDIM,M) = RESID_VEL(IDIM, M) + &
239 DES_VEL_NODE(IJK2,IDIM, M)
240 DES_VEL_NODE(IJK2,IDIM, M) = ZERO
241 ENDDO
242 ENDDO
243 ENDIF
244 ENDDO
245 ENDDO
246 ENDDO
247
248
249 = ONE/REAL(COUNT_NODES_INSIDE)
250 DO KK = K1, K2
251 DO JJ = J1, J2
252 DO II = I1, I2
253 IJK2 = funijk(II, JJ, KK)
254 IF(.NOT.SCALAR_NODE_ATWALL(IJK2)) THEN
255 DO M = MMAX+1,MMAX_TOT
256 DES_ROPS_NODE(IJK2,M) = &
257 DES_ROPS_NODE(IJK2,M) + &
258 RESID_ROPS(M)*NORM_FACTOR
259 DO IDIM = 1, merge(2,3,NO_K)
260 DES_VEL_NODE(IJK2,IDIM, M) = &
261 DES_VEL_NODE(IJK2,IDIM, M) + &
262 RESID_VEL(IDIM, M)*NORM_FACTOR
263 ENDDO
264 ENDDO
265 ENDIF
266 ENDDO
267 ENDDO
268 ENDDO
269
270 ENDIF
271 ENDIF
272 ENDDO
273
274
275
276
277
278
279
280
281 CALL DES_ADDNODEVALUES_MEAN_FIELDS
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313 DO K = KSTART2, KEND1
314 DO J = JSTART2, JEND1
315 DO I = ISTART2, IEND1
316 IF (DEAD_CELL_AT(I,J,K)) CYCLE
317 = funijk(I,J,K)
318 if (VOL_SURR(IJK).eq.ZERO) CYCLE
319
320
321 DO M = MMAX+1, MMAX_TOT
322 DES_ROP_DENSITY = DES_ROPS_NODE(IJK, M)/VOL_SURR(IJK)
323 DES_VEL_DENSITY(:) = DES_VEL_NODE(IJK, :, M)/VOL_SURR(IJK)
324
325 DO KK = K, merge(K+1, K, DO_K)
326 DO JJ = J, J+1
327 DO II = I, I+1
328 IF (DEAD_CELL_AT(II,JJ,KK)) CYCLE
329
330 = funijk_map_c(II, JJ, KK)
331 IF(FLUID_AT(IJK2).and.(IS_ON_myPE_wobnd(II, JJ, KK))) THEN
332
333
334
335
336 (IJK2, M) = ROP_S(IJK2, M) + DES_ROP_DENSITY*VOL(IJK2)
337 U_S(IJK2, M) = U_S(IJK2, M) + DES_VEL_DENSITY(1)*VOL(IJK2)
338 V_S(IJK2, M) = V_S(IJK2, M) + DES_VEL_DENSITY(2)*VOL(IJK2)
339 IF(DO_K) W_S(IJK2, M) = W_S(IJK2, M) + DES_VEL_DENSITY(3)*VOL(IJK2)
340 ENDIF
341 ENDDO
342 ENDDO
343 ENDDO
344 ENDDO
345 ENDDO
346 ENDDO
347 ENDDO
348
349
350
351
352
353
354
355 DO IJK = IJKSTART3, IJKEND3
356 IF(.NOT.FLUID_AT(IJK)) CYCLE
357 DO M = MMAX+1, MMAX_TOT
358 IF(ROP_S(IJK, M).GT.ZERO) THEN
359 U_S(IJK, M) = U_S(IJK,M)/ROP_S(IJK, M)
360 V_S(IJK, M) = V_S(IJK,M)/ROP_S(IJK, M)
361 IF(DO_K) W_S(IJK, M) = W_S(IJK,M)/ROP_S(IJK, M)
362
363 (IJK, M) = ROP_S(IJK, M)/VOL(IJK)
364 ENDIF
365 ENDDO
366 ENDDO
367
368
369
370 IF (MPPIC) CALL SEND_RECV(ROP_S,2)
371 CALL CALC_EPG_DES
372
373 IF(MPPIC) THEN
374
375 CALL SEND_RECV(U_S,2)
376 CALL SEND_RECV(V_S,2)
377 IF(DO_K) CALL SEND_RECV(W_S,2)
378
379
380
381
382
383
384
385
386
387
388
389 IF(.NOT.CARTESIAN_GRID) THEN
390 CALL MPPIC_COMP_EULERIAN_VELS_NON_CG
391 ELSE
392 CALL MPPIC_COMP_EULERIAN_VELS_CG
393 ENDIF
394 ENDIF
395
396
397
398
399 IF(DES_REPORT_MASS_INTERP) THEN
400 DO IJK = IJKSTART3, IJKEND3
401 IF(.NOT.FLUID_AT(IJK)) CYCLE
402 I = I_OF(IJK)
403 J = J_OF(IJK)
404 K = K_OF(IJK)
405
406 IF(IS_ON_myPE_wobnd(I,J,K)) THEN
407 DO M=MMAX+1,MMAX_TOT
408 MASS_SOL2 = MASS_SOL2 + &
409 ROP_S(IJK,M)*VOL(IJK)
410 ENDDO
411 ENDIF
412 ENDDO
413 CALL GLOBAL_SUM(MASS_SOL1, MASS_SOL1_ALL)
414 CALL GLOBAL_SUM(MASS_SOL2, MASS_SOL2_ALL)
415 if(myPE.eq.pe_IO) THEN
416 WRITE(*,'(/,5x,A,4(2x,g17.8),/)') &
417 'SOLIDS MASS DISCRETE AND CONTINUUM = ', &
418 MASS_SOL1_ALL, MASS_SOL2_ALL
419 ENDIF
420 ENDIF
421
422 END SUBROUTINE COMP_MEAN_FIELDS0
423
424
425
426
427
428
429
430
431
432
433
434 SUBROUTINE DRAG_WEIGHTFACTOR(GSTEN,DESPOS,WEIGHTFACTOR)
435
436 use geometry, only: NO_K
437
438 IMPLICIT NONE
439
440
441
442
443 DOUBLE PRECISION, DIMENSION(2,2,2,3), INTENT(IN):: GSTEN
444 DOUBLE PRECISION, DIMENSION(3), INTENT(IN):: DESPOS
445 DOUBLE PRECISION, DIMENSION(2,2,2), INTENT(OUT) :: WEIGHTFACTOR
446 INTEGER :: II, JJ, KK
447
448 DOUBLE PRECISION, DIMENSION(2) :: XXVAL, YYVAL, ZZVAL
449 DOUBLE PRECISION :: DXX, DYY, DZZ
450 DOUBLE PRECISION, DIMENSION(3) :: ZETAA
451
452 DXX = GSTEN(2,1,1,1) - GSTEN(1,1,1,1)
453 DYY = GSTEN(1,2,1,2) - GSTEN(1,1,1,2)
454
455 ZETAA(1:2) = DESPOS(1:2) - GSTEN(1,1,1,1:2)
456
457 ZETAA(1) = ZETAA(1)/DXX
458 ZETAA(2) = ZETAA(2)/DYY
459
460 XXVAL(1)=1-ZETAA(1)
461 YYVAL(1)=1-ZETAA(2)
462 XXVAL(2)=ZETAA(1)
463 YYVAL(2)=ZETAA(2)
464
465 IF(NO_K) THEN
466 DO JJ=1,2
467 DO II=1,2
468 WEIGHTFACTOR(II,JJ,1) = XXVAL(II)*YYVAL(JJ)
469 ENDDO
470 ENDDO
471 ELSE
472 DZZ = GSTEN(1,1,2,3) - GSTEN(1,1,1,3)
473 ZETAA(3) = DESPOS(3) - GSTEN(1,1,1,3)
474 ZETAA(3) = ZETAA(3)/DZZ
475 ZZVAL(1)=1-ZETAA(3)
476 ZZVAL(2)=ZETAA(3)
477 DO KK=1,2
478 DO JJ=1,2
479 DO II=1,2
480 WEIGHTFACTOR(II,JJ,KK) = XXVAL(II)*YYVAL(JJ)*ZZVAL(KK)
481 ENDDO
482 ENDDO
483 ENDDO
484 ENDIF
485
486 END SUBROUTINE DRAG_WEIGHTFACTOR
487