File: RELATIVE:/../../../mfix.git/model/calc_p_star.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 SUBROUTINE CALC_P_STAR(EP_G, P_STAR)
27
28
29
30
31 USE param
32 USE param1
33 USE parallel
34 USE geometry
35 USE indices
36 USE physprop
37 USE constant
38 USE pgcor
39 USE pscor
40 USE ur_facs
41 USE residual
42 USE compar
43 USE run
44 USE visc_s
45 USE solids_pressure
46 USE functions
47 IMPLICIT NONE
48
49
50
51
52 DOUBLE PRECISION, INTENT(IN) :: EP_g(DIMENSION_3)
53
54 DOUBLE PRECISION, INTENT(INOUT) :: P_star(DIMENSION_3)
55
56
57
58
59
60
61
62 INTEGER :: IJK
63
64 DOUBLE PRECISION :: blend
65
66
67
68 DOUBLE PRECISION :: CALC_EP_STAR
69
70
71
72
73
74 DO IJK = ijkstart3, ijkend3
75 IF (FLUID_AT(IJK)) THEN
76
77
78 IF (YU_STANDISH .OR. FEDORS_LANDEL) THEN
79
80
81
82 (ijk) = calc_ep_star(ijk)
83
84
85
86 IF(BLENDING_STRESS.AND.TANH_BLEND) THEN
87 ep_g_blend_start(ijk) = ep_star_array(ijk) * 0.99d0
88 ep_g_blend_end(ijk) = ep_star_array(ijk) * 1.01d0
89 ELSEIF(BLENDING_STRESS.AND.SIGM_BLEND) THEN
90 ep_g_blend_start(ijk) = EP_star_array(ijk) * 0.97d0
91 ep_g_blend_end(ijk) = EP_star_array(ijk) * 1.01d0
92 ELSE
93 ep_g_blend_start(ijk) = ep_star_array(ijk)
94 ep_g_blend_end(ijk) = ep_star_array(ijk)
95 ENDIF
96 ENDIF
97
98 IF (EP_G(IJK) < EP_g_blend_end(ijk)) THEN
99 P_STAR(IJK) = NEG_H(EP_G(IJK),EP_g_blend_end(ijk))
100 IF(BLENDING_STRESS) THEN
101 blend = blend_function(IJK)
102 P_STAR (IJK) = (1.0d0-blend) * P_STAR (IJK)
103 ENDIF
104 ELSE
105 P_STAR(IJK) = ZERO
106 ENDIF
107 ENDIF
108 ENDDO
109
110 RETURN
111 END SUBROUTINE CALC_P_STAR
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 DOUBLE PRECISION FUNCTION CALC_ep_star(IJK)
134
135
136
137
138 USE param
139 USE param1
140 USE fldvar
141 USE geometry
142 USE indices
143 USE physprop
144 USE constant
145 USE toleranc
146 USE compar
147 USE run
148 USE fun_avg
149 USE functions
150 IMPLICIT NONE
151
152
153
154
155 INTEGER, INTENT(IN) :: IJK
156
157
158
159
160 INTEGER :: I, J
161
162
163
164
165
166 DOUBLE PRECISION :: P_IT(MMAX)
167
168 DOUBLE PRECISION :: EPs_max_local
169
170 DOUBLE PRECISION :: P_IJ(MMAX, MMAX)
171
172 DOUBLE PRECISION :: R_IJ(MMAX, MMAX)
173
174 DOUBLE PRECISION :: X_IJ(MMAX, MMAX)
175
176
177 DOUBLE PRECISION :: COMP_X_I(MMAX), SUM_LOCAL
178
179
180
181 DOUBLE PRECISION :: DP_TMP(MMAX), EPs_TMP(MMAX), &
182 EPs_max_TMP(MMAX), old_value
183
184
185
186 IF (CALL_DQMOM) THEN
187
188
189 DO I = 1, SMAX
190 DP_TMP(I) = D_P(IJK,I)
191 EPs_TMP(I) = EP_s(IJK,I)
192 EPs_max_TMP(I) = ep_s_max(I)
193 ENDDO
194
195 DO I = 1, SMAX
196 DO J = I , SMAX
197
198 IF(DP_TMP(I) < DP_TMP(J)) THEN
199
200 = DP_TMP(I)
201
202 (I) = DP_TMP(J)
203
204 (J) = old_value
205
206 old_value = EPs_TMP(I)
207 EPs_TMP(I) = EPs_TMP(J)
208 EPs_TMP(J) = old_value
209
210 old_value = EPs_max_TMP(I)
211 EPs_max_TMP(I) = EPs_max_TMP(J)
212 EPs_max_TMP(J) = old_value
213 ENDIF
214 ENDDO
215 ENDDO
216
217 ELSE
218
219
220 DO I = 1, SMAX
221 DP_TMP(I) = D_P(IJK,M_MAX(I))
222 EPs_TMP(I) = EP_s(IJK,M_MAX(I))
223 EPs_max_TMP(I) = ep_s_max(M_MAX(I))
224 ENDDO
225 ENDIF
226
227
228
229
230
231 DO I = 1, SMAX
232 SUM_LOCAL = ZERO
233 DO J = 1, SMAX
234 IF(I .GE. J) THEN
235 R_IJ(I,J) = DP_TMP(I)/DP_TMP(J)
236 ELSE
237 R_IJ(I,J) = DP_TMP(J)/DP_TMP(I)
238 ENDIF
239 SUM_LOCAL = SUM_LOCAL + EPs_TMP(J)
240 ENDDO
241
242 IF(SUM_LOCAL > DIL_EP_s) THEN
243
244 (I) = EPs_TMP(I)/SUM_LOCAL
245 ELSE
246
247 = ONE - EPs_max_TMP(1)
248 RETURN
249 ENDIF
250 ENDDO
251
252
253
254 IF(YU_STANDISH) THEN
255
256 DO I = 1, SMAX
257 DO J = 1, SMAX
258 IF(R_IJ(I,J) .LE. 0.741d0) THEN
259 IF(J .LT. I) THEN
260 X_IJ(I,J) = (ONE - R_IJ(I,J)*R_IJ(I,J))/&
261 (2.0d0 - EPs_max_TMP(I))
262 ELSE
263 X_IJ(I,J) = ONE - (ONE - R_IJ(I,J)*R_IJ(I,J))/&
264 (2.0d0 - EPs_max_TMP(I))
265 ENDIF
266 P_IJ(I, J) = EPs_max_TMP(I) + EPs_max_TMP(I)*&
267 (ONE-EPs_max_TMP(I)) * (ONE - 2.35d0*R_IJ(I,J) + &
268 1.35d0*R_IJ(I,J)*R_IJ(I,J) )
269 ELSE
270 P_IJ(I, J) = EPs_max_TMP(I)
271 ENDIF
272 ENDDO
273 ENDDO
274
275
276 = ONE
277 DO I = 1, SMAX
278 SUM_LOCAL = ZERO
279
280 IF(I .GE. 2) THEN
281 DO J = 1, (I-1)
282 IF(P_IJ(I,J) == EPs_max_TMP(I)) THEN
283 SUM_LOCAL = SUM_LOCAL
284 ELSE
285 SUM_LOCAL = SUM_LOCAL + (ONE - EPs_max_TMP(I)/&
286 P_IJ(I,J))*COMP_X_I(J)/X_IJ(I,J)
287 ENDIF
288 ENDDO
289 ENDIF
290
291 IF((I+1) .LE. SMAX) THEN
292 DO J = (I+1), SMAX
293 IF( P_IJ(I, J) == EPs_max_TMP(I) ) THEN
294 SUM_LOCAL = SUM_LOCAL
295 ELSE
296 SUM_LOCAL = SUM_LOCAL + (ONE - EPs_max_TMP(I)/&
297 P_IJ(I, J))*COMP_X_I(J)/X_IJ(I, J)
298 ENDIF
299 ENDDO
300 ENDIF
301
302 IF (SUM_LOCAL .NE. ZERO) THEN
303 P_IT(I) = EPs_max_TMP(I)/(ONE - SUM_LOCAL)
304 ELSE
305
306 (I) = ONE
307 ENDIF
308
309 EPs_max_local = MIN(P_IT(I), EPs_max_local)
310 ENDDO
311
312
313
314 IF (EPs_max_local == ONE) EPs_max_local = EPs_max_TMP(1)
315 CALC_EP_star = ONE - EPs_max_local
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342 ELSEIF(FEDORS_LANDEL) THEN
343
344 IF(COMP_X_I(1) .LE. (EPs_max_TMP(1)/(EPs_max_TMP(1)+ &
345 (ONE - EPs_max_TMP(1))*EPs_max_TMP(2))) ) THEN
346
347 CALC_EP_star = (EPs_max_TMP(1) - EPs_max_TMP(2) + &
348 (1 - sqrt(R_IJ(2,1))) * (ONE - EPs_max_TMP(1)) * &
349 EPs_max_TMP(2) )*&
350 (EPs_max_TMP(1) + (ONE - EPs_max_TMP(1)) * &
351 EPs_max_TMP(2)) * COMP_X_I(1)/EPs_max_TMP(1) + &
352 EPs_max_TMP(2)
353 ELSE
354 CALC_EP_star = (ONE-sqrt(R_IJ(2,1))) * (EPs_max_TMP(1)+&
355 (ONE-EPs_max_TMP(1)) * EPs_max_TMP(2)) * &
356 (ONE - COMP_X_I(1)) + EPs_max_TMP(1)
357 ENDIF
358
359 = ONE - CALC_EP_star
360 ENDIF
361
362
363
364 RETURN
365 END FUNCTION CALC_ep_star
366