File: RELATIVE:/../../../mfix.git/model/rdf_mod.f
1
2
3
4
5
6
7
8
9
10
11 MODULE rdf
12
13 CONTAINS
14
15
16
17
18
19
20 DOUBLE PRECISION FUNCTION G_0AVG (IJK1, IJK2, DIR, L, M1, M2)
21
22 USE param
23 USE param1
24 USE physprop
25 USE fldvar
26 USE geometry
27 USE indices
28 USE compar
29 USE visc_s
30 USE constant
31 USE run
32 USE toleranc
33 USE functions
34
35 IMPLICIT NONE
36
37
38
39
40 INTEGER, INTENT(IN) :: IJK1, IJK2
41
42 CHARACTER, INTENT(IN) :: DIR
43
44 INTEGER, INTENT(IN) :: L
45
46 INTEGER, INTENT(IN) :: M1
47
48 INTEGER, INTENT(IN) :: M2
49
50
51
52
53 INTEGER :: Mx
54
55 DOUBLE PRECISION :: EPS
56
57 DOUBLE PRECISION :: EPg, EPg_STAR_AVG
58
59 DOUBLE PRECISION :: EPSoDP
60
61 DOUBLE PRECISION :: SUM_EPS
62
63 DOUBLE PRECISION :: NU_MM
64
65 DOUBLE PRECISION :: VOLP
66
67 DOUBLE PRECISION :: XI
68
69 DOUBLE PRECISION :: DP_AVG_M1, DP_AVG_M2, DP_AVG
70
71 IF(IJK1 == IJK2)THEN
72 G_0AVG = G_0(IJK1, M1, M2)
73 ELSE
74 SELECT CASE(RDF_TYPE_ENUM)
75
76
77
78 CASE(LEBOWITZ)
79 DP_AVG_M1 = HALF*(D_p(IJK1,M1)+D_p(IJK2,M1))
80 DP_AVG_M2 = HALF*(D_p(IJK1,M2)+D_p(IJK2,M2))
81 EPSoDP = ZERO
82
83 DO Mx = 1, MMAX
84 EPS = AVG_XYZ(EP_s(IJK1, Mx), EP_s(IJK2, Mx), DIR, L)
85 EPSoDP = EPSoDP + 2d0*EPS / (D_p(IJK1,Mx)+D_p(IJK2,Mx))
86 ENDDO
87
88 EPg = AVG_XYZ(EP_g(IJK1), EP_g(IJK2), DIR, L)
89 G_0AVG = ONE / EPg + 3.0d0*EPSoDP*DP_AVG_M1*DP_AVG_M2 / &
90 (EPg*EPg *(DP_AVG_M1 + DP_AVG_M2))
91
92
93
94
95 CASE(MODIFIED_LEBOWITZ)
96 DP_AVG_M1 = HALF*(D_p(IJK1,M1)+D_p(IJK2,M1))
97 DP_AVG_M2 = HALF*(D_p(IJK1,M2)+D_p(IJK2,M2))
98 EPSoDP = ZERO
99 SUM_EPS = ZERO
100
101 DO Mx = 1, MMAX
102 EPS = AVG_XYZ(EP_s(IJK1, Mx), EP_s(IJK2, Mx), DIR, L)
103 DP_AVG = HALF*( D_p(IJK1,Mx)+D_p(IJK2,Mx) )
104 EPSoDP = EPSoDP + EPS/DP_AVG
105 SUM_EPS = SUM_EPS + EPS
106 ENDDO
107
108 EPg_STAR_AVG = AVG_XYZ(EP_star_array(IJK1), &
109 EP_star_array(IJK2), DIR, L)
110
111
112
113
114
115 IF(SUM_EPS >= (ONE-EPg_STAR_AVG)) &
116 SUM_EPS = SUM_EPS - DIL_EP_s
117
118
119 G_0AVG = (ONE/(ONE-SUM_EPS/(ONE-EPg_STAR_AVG))) + 3.0d0 * &
120 ((DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2))*EPSoDP
121
122
123
124
125
126
127
128 CASE(MANSOORI)
129
130 DP_AVG_M1 = HALF*(D_p(IJK1,M1)+D_p(IJK2,M1))
131 DP_AVG_M2 = HALF*(D_p(IJK1,M2)+D_p(IJK2,M2))
132 SUM_EPS = ZERO
133 XI = ZERO
134
135 DO Mx = 1, MMAX
136 EPS = AVG_XYZ(EP_s(IJK1, Mx), EP_s(IJK2, Mx), DIR, L)
137 SUM_EPS = SUM_EPS + EPS
138
139 DP_AVG = HALF*( D_p(IJK1,Mx)+D_p(IJK2,Mx) )
140 VOLP = (PI/6.0D0)*DP_AVG**3
141
142 IF(DP_AVG > ZERO) THEN
143 NU_MM = EPS/VOLP
144 XI = XI + NU_MM*DP_AVG*DP_AVG
145 ENDIF
146 ENDDO
147
148 XI = (PI/6.0D0)*XI
149
150 G_0AVG = (ONE/(ONE-SUM_EPS)) + (3.0D0)*&
151 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) )* &
152 ( XI/((ONE-SUM_EPS)*(ONE-SUM_EPS)) ) + (2.0D0) * &
153 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) ) * &
154 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) ) * &
155 ( (XI*XI)/((ONE-SUM_EPS)*(ONE-SUM_EPS)*(ONE-SUM_EPS)))
156
157
158
159
160
161 CASE(MODIFIED_MANSOORI)
162
163 DP_AVG_M1 = HALF*(D_p(IJK1,M1)+D_p(IJK2,M1))
164 DP_AVG_M2 = HALF*(D_p(IJK1,M2)+D_p(IJK2,M2))
165 SUM_EPS = ZERO
166 XI = ZERO
167
168 DO Mx = 1, MMAX
169 EPS = AVG_XYZ(EP_s(IJK1, Mx), EP_s(IJK2, Mx), DIR, L)
170 SUM_EPS = SUM_EPS + EPS
171
172 DP_AVG = HALF*( D_p(IJK1,Mx)+D_p(IJK2,Mx) )
173 VOLP = (PI/6.0D0)*DP_AVG**3
174
175 IF (DP_AVG > ZERO) THEN
176 NU_MM = EPS/VOLP
177 XI = XI + NU_MM*DP_AVG*DP_AVG
178 ENDIF
179 ENDDO
180
181 XI = (PI/6.0D0)*XI
182
183 EPg_STAR_AVG = AVG_XYZ(EP_star_array(IJK1), &
184 EP_star_array(IJK2), DIR, L)
185
186 IF(SUM_EPS >= (ONE-EPg_STAR_AVG)) &
187 SUM_EPS = SUM_EPS - DIL_EP_s
188
189 G_0AVG = (ONE/(ONE-SUM_EPS/(ONE-EPg_STAR_AVG))) + (3.0D0)* &
190 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) )* &
191 ( XI/((ONE-SUM_EPS/(ONE-EPg_STAR_AVG))* &
192 (ONE-SUM_EPS/(ONE-EPg_STAR_AVG))) ) + (2.0D0) * &
193 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) ) * &
194 ( (DP_AVG_M1*DP_AVG_M2)/(DP_AVG_M1+DP_AVG_M2) ) * &
195 ( (XI*XI)/((ONE-SUM_EPS/(ONE-EPg_STAR_AVG))* &
196 (ONE-SUM_EPS/(ONE-EPg_STAR_AVG))* &
197 (ONE-SUM_EPS/(ONE-EPg_STAR_AVG))) )
198
199
200
201
202 CASE(CARNAHAN_STARLING)
203
204
205
206 = AVG_XYZ(EP_s(IJK1, M1), EP_s(IJK2, M1), DIR, L)
207 G_0AVG = G_0CS(EPS)
208 END SELECT
209
210 ENDIF
211
212 RETURN
213 END FUNCTION G_0AVG
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238 DOUBLE PRECISION FUNCTION G_0 (IJK, M1, M2)
239
240 USE param
241 USE param1
242 USE physprop
243 USE fldvar
244 USE geometry
245 USE indices
246 USE compar
247 USE visc_s
248 USE constant
249 USE run
250 USE toleranc
251 USE functions
252
253 IMPLICIT NONE
254
255
256
257
258 INTEGER, INTENT(IN) :: M1
259
260 INTEGER, INTENT(IN) :: M2
261
262 INTEGER, INTENT(IN) :: IJK
263
264
265
266
267 INTEGER :: Mx, MM
268
269 DOUBLE PRECISION :: EPS
270
271 DOUBLE PRECISION :: EPg
272
273 DOUBLE PRECISION :: EPSoDP
274
275 DOUBLE PRECISION :: SUM_EPS
276
277 DOUBLE PRECISION :: NU_MM
278
279 DOUBLE PRECISION :: VOLP
280
281 DOUBLE PRECISION :: XI
282
283
284 = ZERO
285 EPg = EP_G(IJK)
286 DO MM = 1, MMAX
287 EPS = EP_s(IJK, MM)
288 SUM_EPS = SUM_EPS + EPS
289 END DO
290
291 SELECT CASE(RDF_TYPE_ENUM)
292
293
294
295 CASE(LEBOWITZ)
296
297 EPSoDP = ZERO
298 DO Mx = 1, MMAX
299 EPS = EP_s(IJK, Mx)
300 EPSoDP = EPSoDP + EPS / D_p(IJK,Mx)
301 ENDDO
302 EPg = EP_g(IJK)
303
304 G_0 = ONE/EPg + 3.0d0 * EPSoDP * D_p(IJK,M1) * D_p(IJK,M2) / &
305 (EPg*EPg *(D_p(IJK,M1) + D_p(IJK,M2)))
306
307
308
309 CASE(MODIFIED_LEBOWITZ)
310
311 EPSoDP = ZERO
312 SUM_EPS = ZERO
313
314 DO MM = 1, MMAX
315 EPS = EP_s(IJK, MM)
316 EPSoDP = EPSoDP + (EPS/D_p(IJK,MM))
317 SUM_EPS = SUM_EPS + EPS
318 END DO
319
320
321
322
323 IF(SUM_EPS >= (ONE-EP_star_array(IJK))) &
324 SUM_EPS = SUM_EPS - DIL_EP_s
325
326 G_0 = (ONE/(ONE-SUM_EPS/(ONE-EP_star_array(IJK)) )) + 3.0d0 * &
327 ((D_p(IJK,M1)*D_p(IJK,M2))/(D_p(IJK,M1)+D_p(IJK,M2)))*EPSoDP
328
329
330
331
332
333 CASE(MANSOORI)
334
335 SUM_EPS = ZERO
336 XI = ZERO
337
338 DO MM = 1, MMAX
339 EPS = EP_s(IJK, MM)
340 SUM_EPS = SUM_EPS + EPS
341 VOLP = (PI/6.0D0)*D_P(IJK,MM)**3.0
342
343 IF (D_P(IJK,MM) > ZERO) THEN
344 NU_MM = EPS/VOLP
345 XI = XI + NU_MM*D_P(IJK,MM)*D_P(IJK,MM)
346 ENDIF
347 ENDDO
348 XI = (PI/6.0D0)*XI
349
350 G_0 = (ONE/(ONE-SUM_EPS)) + (3.0D0)*&
351 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) )* &
352 ( XI/((ONE-SUM_EPS)*(ONE-SUM_EPS)) ) + (2.0D0) * &
353 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) ) * &
354 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) ) * &
355 ( (XI*XI)/((ONE-SUM_EPS)*(ONE-SUM_EPS)*(ONE-SUM_EPS)) )
356
357
358
359
360 CASE(MODIFIED_MANSOORI)
361
362 SUM_EPS = ZERO
363 XI = ZERO
364
365 DO MM = 1, MMAX
366 EPS = EP_s(IJK, MM)
367 SUM_EPS = SUM_EPS + EPS
368 VOLP = (PI/6.0D0)*D_P(IJK,MM)**3.0
369
370 IF (D_P(IJK,MM) > ZERO) THEN
371 NU_MM = EPS/VOLP
372 XI = XI + NU_MM*D_P(IJK,MM)*D_P(IJK,MM)
373 ENDIF
374 ENDDO
375 XI = (PI/6.0D0)*XI
376
377 IF(SUM_EPS >= (ONE-EP_star_array(IJK)) ) &
378 SUM_EPS = SUM_EPS - DIL_EP_s
379
380 G_0 = (ONE/(ONE-SUM_EPS/(ONE-EP_star_array(IJK)))) + (3.0D0)* &
381 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) )* &
382 ( XI/((ONE-SUM_EPS/(ONE-EP_star_array(IJK)))* &
383 (ONE-SUM_EPS/(ONE-EP_star_array(IJK)))) ) + (2.0D0) * &
384 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) ) * &
385 ( (D_P(IJK,M1)*D_P(IJK,M2))/(D_P(IJK,M1)+D_P(IJK,M2)) ) * &
386 ( (XI*XI)/((ONE-SUM_EPS/(ONE-EP_star_array(IJK)))* &
387 (ONE-SUM_EPS/(ONE-EP_star_array(IJK)))* &
388 (ONE-SUM_EPS/(ONE-EP_star_array(IJK)))) )
389
390
391
392 CASE(CARNAHAN_STARLING)
393
394 = G_0CS(EP_S(IJK,M1))
395
396 END SELECT
397
398 RETURN
399 END FUNCTION G_0
400
401
402
403
404
405
406
407
408
409 DOUBLE PRECISION FUNCTION DG_0DNU (EPS)
410
411
412
413 USE param1, only: ZERO, ONE
414 USE physprop, only: MMAX
415
416 IMPLICIT NONE
417
418
419
420 DOUBLE PRECISION, INTENT(IN) :: EPS
421
422 DG_0DNU = ZERO
423
424
425
426 IF(MMAX == 1) DG_0DNU = (2.5D0-EPS)/(ONE - EPS)**4
427
428 RETURN
429 END FUNCTION DG_0DNU
430
431
432
433
434
435
436 DOUBLE PRECISION FUNCTION G_0CS (EPS)
437
438
439
440 USE param1, only: ONE
441
442 IMPLICIT NONE
443
444
445
446
447 DOUBLE PRECISION :: EPS
448
449 G_0CS = (ONE-0.5D0*EPS)/(ONE - EPS)**3
450
451 RETURN
452 END FUNCTION G_0CS
453
454
455
456
457
458
459 DOUBLE PRECISION FUNCTION AVG_XYZ (V1, V2, DIR, L)
460
461 USE param
462 USE param1
463 USE geometry
464 USE indices
465 USE compar
466 USE functions
467 USE fun_avg
468
469 IMPLICIT NONE
470
471
472
473
474 CHARACTER, INTENT(IN) :: DIR
475
476 INTEGER, INTENT(IN) :: L
477
478 DOUBLE PRECISION, INTENT(IN) :: V1, V2
479
480
481
482
483
484
485 IF(DIR == 'X')THEN
486 AVG_XYZ = AVG_X(V1, V2, L)
487
488 ELSEIF(DIR == 'Y')THEN
489 AVG_XYZ = AVG_Y(V1, V2, L)
490
491 ELSEIF(DIR == 'Z')THEN
492 AVG_XYZ = AVG_Z(V1, V2, L)
493
494 ELSE
495 CALL WRITE_ERROR('AVG_XYZ', 'Unkown direction', 1)
496 ENDIF
497
498 RETURN
499 END FUNCTION AVG_XYZ
500
501 END MODULE rdf
502