File: RELATIVE:/../../../mfix.git/model/des/dif_phi_bc_des.f
1
2
3
4
5
6
7
8
9 SUBROUTINE DIF_PHI_BC_DES(PHI, M, A_M, B_M)
10
11 USE param
12 USE param1
13 USE matrix
14 USE geometry
15 USE indices
16 USE bc
17 USE compar
18 USE cutcell, only : CARTESIAN_GRID, CG_SAFE_MODE
19 USE fun_avg
20 USE functions
21
22 IMPLICIT NONE
23
24
25
26
27
28
29 DOUBLE PRECISION, INTENT(IN) :: PHI(DIMENSION_3)
30
31 INTEGER, INTENT(IN) :: M
32
33 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
34
35 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
36
37
38
39
40 INTEGER :: L
41
42 INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK, &
43 IM, JM, KM
44
45
46
47
48
49
50
51 IF(.NOT.CARTESIAN_GRID) THEN
52
53
54 = imin2
55 DO K1 = kmin3, kmax3
56 DO J1 = jmin3, jmax3
57 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
58 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
59 = FUNIJK(I1,J1,K1)
60 IF (DEFAULT_WALL_AT(IJK)) THEN
61
62 (IP_OF(IJK),W,M) = ZERO
63
64 (IJK,:,M) = ZERO
65 A_M(IJK,E,M) = ONE
66 A_M(IJK,0,M) = -ONE
67 B_M(IJK,M) = ZERO
68 ENDIF
69 ENDDO
70 ENDDO
71
72
73 = IMAX2
74 DO K1 = kmin3, kmax3
75 DO J1 = jmin3, jmax3
76 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
77 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
78 = FUNIJK(I1,J1,K1)
79 IF (DEFAULT_WALL_AT(IJK)) THEN
80
81 (IM_OF(IJK),E,M) = ZERO
82
83 (IJK,:,M) = ZERO
84 A_M(IJK,W,M) = ONE
85 A_M(IJK,0,M) = -ONE
86 B_M(IJK,M) = ZERO
87 ENDIF
88 ENDDO
89 ENDDO
90
91
92 = 1
93 DO K1 = kmin3, kmax3
94 DO I1 = imin3, imax3
95 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
96 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
97 = FUNIJK(I1,J1,K1)
98 IF (DEFAULT_WALL_AT(IJK)) THEN
99
100 (JP_OF(IJK),S,M) = ZERO
101
102 (IJK,:,M) = ZERO
103 A_M(IJK,N,M) = ONE
104 A_M(IJK,0,M) = -ONE
105 B_M(IJK,M) = ZERO
106 ENDIF
107 ENDDO
108 ENDDO
109
110
111 = JMAX2
112 DO K1 = kmin3, kmax3
113 DO I1 = imin3, imax3
114 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
115 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
116 = FUNIJK(I1,J1,K1)
117 IF (DEFAULT_WALL_AT(IJK)) THEN
118
119 (JM_OF(IJK),N,M) = ZERO
120
121 (IJK,:,M) = ZERO
122 A_M(IJK,S,M) = ONE
123 A_M(IJK,0,M) = -ONE
124 B_M(IJK,M) = ZERO
125 ENDIF
126 ENDDO
127 ENDDO
128
129 IF (DO_K) THEN
130
131 = 1
132 DO J1 = jmin3, jmax3
133 DO I1 = imin3, imax3
134 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
135 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
136 = FUNIJK(I1,J1,K1)
137
138 IF (DEFAULT_WALL_AT(IJK)) THEN
139
140 (KP_OF(IJK),B,M) = ZERO
141
142
143 (IJK,:,M) = ZERO
144 A_M(IJK,T,M) = ONE
145 A_M(IJK,0,M) = -ONE
146 B_M(IJK,M) = ZERO
147 ENDIF
148 ENDDO
149 ENDDO
150
151
152 = KMAX2
153 DO J1 = jmin3, jmax3
154 DO I1 = imin3, imax3
155 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
156 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
157 = FUNIJK(I1,J1,K1)
158 IF (DEFAULT_WALL_AT(IJK)) THEN
159
160 (KM_OF(IJK),T,M) = ZERO
161
162 (IJK,:,M) = ZERO
163 A_M(IJK,B,M) = ONE
164 A_M(IJK,0,M) = -ONE
165 B_M(IJK,M) = ZERO
166 ENDIF
167 ENDDO
168 ENDDO
169 ENDIF
170
171 ENDIF
172
173
174
175 DO L = 1, DIMENSION_BC
176 IF (BC_DEFINED(L)) THEN
177
178 I1 = BC_I_W(L)
179 I2 = BC_I_E(L)
180 J1 = BC_J_S(L)
181 J2 = BC_J_N(L)
182 K1 = BC_K_B(L)
183 K2 = BC_K_T(L)
184
185 DO K = K1, K2
186 DO J = J1, J2
187 DO I = I1, I2
188
189 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
190 IF (DEAD_CELL_AT(I,J,K)) CYCLE
191
192 = FUNIJK(I,J,K)
193
194
195
196
197 (IJK,:,M) = ZERO
198 B_M(IJK,M) = ZERO
199
200
201 IF (FLUID_AT(EAST_OF(IJK))) THEN
202 A_M(IJK,0,M) = -ODX_E(I)
203 A_M(IJK,E,M) = ODX_E(I)
204
205 ELSEIF (FLUID_AT(WEST_OF(IJK))) THEN
206 IM = IM1(I)
207 A_M(IJK,W,M) = ODX_E(IM)
208 A_M(IJK,0,M) = -ODX_E(IM)
209
210 ELSEIF (FLUID_AT(NORTH_OF(IJK))) THEN
211 A_M(IJK,0,M) = -ODY_N(J)
212 A_M(IJK,N,M) = ODY_N(J)
213
214 ELSEIF (FLUID_AT(SOUTH_OF(IJK))) THEN
215 JM = JM1(J)
216 A_M(IJK,S,M) = ODY_N(JM)
217 A_M(IJK,0,M) = -ODY_N(JM)
218
219 ELSEIF (FLUID_AT(TOP_OF(IJK))) THEN
220 A_M(IJK,0,M) = -OX(I)*ODZ_T(K)
221 A_M(IJK,T,M) = OX(I)*ODZ_T(K)
222
223 ELSEIF (FLUID_AT(BOTTOM_OF(IJK))) THEN
224 KM = KM1(K)
225 A_M(IJK,B,M) = OX(I)*ODZ_T(KM)
226 A_M(IJK,0,M) = -OX(I)*ODZ_T(KM)
227
228 ENDIF
229 ENDDO
230 ENDDO
231 ENDDO
232 ENDIF
233 ENDDO
234
235
236 IF(CARTESIAN_GRID .AND. .NOT.(CG_SAFE_MODE(1)==1)) &
237 CALL DIF_PHI_BC_DES_CG(PHI, 0, A_M, B_M)
238
239 RETURN
240 END SUBROUTINE DIF_PHI_BC_DES
241
242
243
244
245
246
247
248
249
250
251
252 SUBROUTINE DIF_PHI_BC_DES_CG(PHI, M, A_M, B_M)
253
254
255
256
257 USE param
258 USE param1
259 USE matrix
260 USE geometry
261 USE indices
262 USE bc
263 USE compar
264 USE cutcell
265 USE fun_avg
266 USE functions
267
268 IMPLICIT NONE
269
270
271
272
273
274
275
276 DOUBLE PRECISION, INTENT(IN) :: PHI(DIMENSION_3)
277
278
279 INTEGER, INTENT(IN) :: M
280
281 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
282
283 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
284
285
286
287
288 INTEGER :: I, J, K, IJK, IM, JM, KM
289
290 LOGICAL :: ALONG_GLOBAL_GHOST_LAYER
291
292
293
294 DO IJK = ijkstart3, ijkend3
295
296 I = I_OF(IJK)
297 J = J_OF(IJK)
298 K = K_OF(IJK)
299
300 ALONG_GLOBAL_GHOST_LAYER = (I < IMIN1) .OR. ( I>IMAX1 ) &
301 .OR. (J < JMIN1) .OR. (J > JMAX1)
302
303 IF(DO_K) ALONG_GLOBAL_GHOST_LAYER = ALONG_GLOBAL_GHOST_LAYER &
304 .OR. (K < KMIN1) .OR. (K > KMAX1)
305
306
307 IF(BLOCKED_CELL_AT(IJK)) THEN
308 A_M(IJK,:,M) = ZERO
309 A_M(IJK,0,M) = -ONE
310 B_M(IJK,M) = -PHI(IJK)
311 ENDIF
312
313 IF(BLOCKED_CELL_AT(IJK).OR.ALONG_GLOBAL_GHOST_LAYER) THEN
314
315
316 IF (CUT_CELL_AT(IP_OF(IJK))) THEN
317 IF( BC_ID(IP_OF(IJK)) > 0 ) THEN
318 A_M(IJK,0,M) = -ODX_E(I)
319 A_M(IJK,E,M) = ODX_E(I)
320 B_M(IJK,M) = ZERO
321 ENDIF
322
323 ELSEIF (CUT_CELL_AT(IM_OF(IJK))) THEN
324 IF(BC_ID(IM_OF(IJK)) > 0 ) THEN
325 IM = IM1(I)
326 A_M(IJK,W,M) = ODX_E(IM)
327 A_M(IJK,0,M) = -ODX_E(IM)
328 B_M(IJK,M) = ZERO
329 ENDIF
330
331 ELSEIF (CUT_CELL_AT(JP_OF(IJK))) THEN
332 IF(BC_ID(JP_OF(IJK)) > 0 ) THEN
333 A_M(IJK,0,M) = -ODY_N(J)
334 A_M(IJK,N,M) = ODY_N(J)
335 B_M(IJK,M) = ZERO
336 ENDIF
337
338 ELSEIF (CUT_CELL_AT(JM_OF(IJK))) THEN
339 IF(BC_ID(JM_OF(IJK)) > 0 ) THEN
340 JM = JM1(J)
341 A_M(IJK,S,M) = ODY_N(JM)
342 A_M(IJK,0,M) = -ODY_N(JM)
343 B_M(IJK,M) = ZERO
344 ENDIF
345
346 ELSEIF (CUT_CELL_AT(KP_OF(IJK))) THEN
347 IF(BC_ID(KP_OF(IJK)) > 0 ) THEN
348 A_M(IJK,0,M) = -OX(I)*ODZ_T(K)
349 A_M(IJK,T,M) = OX(I)*ODZ_T(K)
350 B_M(IJK,M) = ZERO
351 ENDIF
352
353 ELSEIF (CUT_CELL_AT(KM_OF(IJK))) THEN
354 IF(BC_ID(KM_OF(IJK)) > 0 ) THEN
355 KM = KM1(K)
356 A_M(IJK,B,M) = OX(I)*ODZ_T(KM)
357 A_M(IJK,0,M) = -OX(I)*ODZ_T(KM)
358 B_M(IJK,M) = ZERO
359 ENDIF
360 ENDIF
361 ENDIF
362 ENDDO
363
364 RETURN
365
366 END SUBROUTINE DIF_PHI_BC_DES_CG
367
368
369