File: N:\mfix\model\set_wall_bc.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
27
28
29
30
31 SUBROUTINE SET_WALL_BC()
32
33
34
35
36 USE param
37 USE param1
38 USE bc
39 USE fldvar
40 USE geometry
41 USE indices
42 USE physprop
43 USE run
44 USE funits
45 USE compar
46 IMPLICIT NONE
47
48
49
50
51
52
53
54 INTEGER :: L
55
56 INTEGER :: IJK, IPJK
57
58 INTEGER :: I1, I2
59
60 INTEGER :: J1, J2
61
62 INTEGER :: K1, K2
63
64
65
66
67 DO L = 1, DIMENSION_BC
68 IF (BC_DEFINED(L)) THEN
69
70
71 = BC_I_W(L)
72 I2 = BC_I_E(L)
73 J1 = BC_J_S(L)
74 J2 = BC_J_N(L)
75 K1 = BC_K_B(L)
76 K2 = BC_K_T(L)
77
78 SELECT CASE (BC_TYPE_ENUM(L))
79 CASE (FREE_SLIP_WALL)
80 CALL SET_WALL_BC1 (I1, I2, J1, J2, K1, K2, &
81 BC_JJ_PS(L))
82
83 CASE (NO_SLIP_WALL)
84 CALL SET_WALL_BC1 (I1, I2, J1, J2, K1, K2, &
85 BC_JJ_PS(L))
86
87 CASE (PAR_SLIP_WALL)
88
89 END SELECT
90 ENDIF
91 ENDDO
92
93
94
95
96
97
98 = 1
99 DO J1 = JSTART3, JEND3
100 DO I1 = ISTART3, IEND3
101 IF(K1.NE.KSTART2) EXIT
102 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
103 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
104 = FUNIJK(I1,J1,K1)
105 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1,&
106 J1, J1, K1, K1, 0)
107 ENDDO
108 ENDDO
109
110
111 = KMAX2
112 DO J1 = JSTART3, JEND3
113 DO I1 = ISTART3, IEND3
114 IF(K1.NE.KEND2) EXIT
115 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
116 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
117 = FUNIJK(I1,J1,K1)
118 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1, &
119 J1, J1, K1, K1, 0)
120 ENDDO
121 ENDDO
122
123
124 = 1
125 DO K1 = KSTART3, KEND3
126 DO I1 = ISTART3, IEND3
127 IF(J1.NE.JSTART2) EXIT
128 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
129 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
130 = FUNIJK(I1,J1,K1)
131 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1, &
132 J1, J1, K1, K1, 0)
133 ENDDO
134 ENDDO
135
136
137 = JMAX2
138 DO K1 = KSTART3, KEND3
139 DO I1 = ISTART3, IEND3
140 IF(J1.NE.JEND2) EXIT
141 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
142 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
143 = FUNIJK(I1,J1,K1)
144 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1, &
145 J1, J1, K1, K1, 0)
146 ENDDO
147 ENDDO
148
149
150 = 1
151 DO K1 = KSTART3, KEND3
152 DO J1 = JSTART3, JEND3
153 IF(I1.NE.ISTART2) EXIT
154 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
155 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
156 = FUNIJK(I1,J1,K1)
157 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1, &
158 J1, J1, K1, K1, 0)
159
160
161
162
163 IF (CYLINDRICAL .AND. XMIN==ZERO) THEN
164 IPJK = IP_OF(IJK)
165 W_G(IJK) = -W_G(IPJK)
166 IF (MMAX > 0) THEN
167 W_S(IJK,:MMAX) = -W_S(IPJK,:MMAX)
168 ENDIF
169 ENDIF
170 ENDDO
171 ENDDO
172
173
174 = IMAX2
175 DO K1 = KSTART3, KEND3
176 DO J1 = JSTART3, JEND3
177 IF(I1.NE.IEND2) EXIT
178 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
179 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
180 = FUNIJK(I1,J1,K1)
181 IF (DEFAULT_WALL_AT(IJK)) CALL SET_WALL_BC1 (I1, I1, &
182 J1, J1, K1, K1, 0)
183 ENDDO
184 ENDDO
185 RETURN
186
187 CONTAINS
188
189 INCLUDE 'functions.inc'
190
191 END SUBROUTINE SET_WALL_BC
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 SUBROUTINE SET_WALL_BC1(II1, II2, JJ1, JJ2, KK1, KK2, &
220 BC_JJ_PSL)
221
222
223
224
225 USE param
226 USE param1
227 USE bc
228 USE fldvar
229 USE geometry
230 USE indices
231 USE physprop
232 USE run
233 USE funits
234 USE compar
235 IMPLICIT NONE
236
237
238
239
240 INTEGER, INTENT(IN) :: II1, II2
241
242 INTEGER, INTENT(IN) :: JJ1, JJ2
243
244 INTEGER, INTENT(IN) :: KK1, KK2
245
246 INTEGER, INTENT(IN) :: BC_JJ_PSL
247
248
249
250
251 DOUBLE PRECISION :: SIGN0
252
253 INTEGER :: I, J, K
254 INTEGER :: IJK, IMJK, IJMK, IJKM, IPJK, IJPK, IJKP
255 INTEGER :: I1, I2, J1, J2, K1, K2
256
257 INTEGER :: LFLUID
258
259
260
261 = II1
262 I2 = II2
263 J1 = JJ1
264 J2 = JJ2
265 K1 = KK1
266 K2 = KK2
267
268 IF(I1.LE.IEND2) I1 = MAX(I1, ISTART2)
269 IF(J1.LE.JEND2) J1 = MAX(J1, JSTART2)
270 IF(K1.LE.KEND2) K1 = MAX(K1, KSTART2)
271 IF(I2.GE.ISTART2) I2 = MIN(I2, IEND2)
272 IF(J2.GE.JSTART2) J2 = MIN(J2, JEND2)
273 IF(K2.GE.KSTART2) K2 = MIN(K2, KEND2)
274
275 DO K = K1, K2
276 DO J = J1, J2
277 DO I = I1, I2
278 IJK = FUNIJK(I,J,K)
279
280 IF (DEAD_CELL_AT(I,J,K)) CYCLE
281
282
283 IF(NS_WALL_AT(IJK))THEN
284 SIGN0 = -ONE
285 ELSE
286
287
288 = ONE
289 ENDIF
290
291 IF (WALL_AT(IJK)) THEN
292 IMJK = IM_OF(IJK)
293 IJMK = JM_OF(IJK)
294 IJKM = KM_OF(IJK)
295 IPJK = IP_OF(IJK)
296 IJPK = JP_OF(IJK)
297 IJKP = KP_OF(IJK)
298
299
300 IF (.NOT.WALL_AT(IMJK)) THEN
301 LFLUID = IMJK
302
303 IF (WALL_AT(IJPK)) THEN
304 V_G(IJK) = SIGN0*V_G(LFLUID)
305 IF(BC_JJ_PSL==0) CALL EQUAL(V_S,IJK,SIGN0,V_S,LFLUID)
306 ENDIF
307
308 IF (WALL_AT(IJKP)) THEN
309 W_G(IJK) = SIGN0*W_G(LFLUID)
310 IF(BC_JJ_PSL==0) CALL EQUAL(W_S,IJK,SIGN0,W_S,LFLUID)
311 ENDIF
312 ENDIF
313
314
315 IF (.NOT.WALL_AT(IPJK)) THEN
316 LFLUID = IPJK
317
318 IF (WALL_AT(IJPK)) THEN
319 V_G(IJK) = SIGN0*V_G(LFLUID)
320 IF(BC_JJ_PSL==0) CALL EQUAL(V_S,IJK,SIGN0,V_S,LFLUID)
321 ENDIF
322
323 IF (WALL_AT(IJKP)) THEN
324 W_G(IJK) = SIGN0*W_G(LFLUID)
325 IF(BC_JJ_PSL==0) CALL EQUAL(W_S,IJK,SIGN0,W_S,LFLUID)
326 ENDIF
327 ENDIF
328
329
330
331 IF (.NOT.WALL_AT(IJMK)) THEN
332 LFLUID = IJMK
333
334 IF (WALL_AT(IPJK)) THEN
335 U_G(IJK) = SIGN0*U_G(LFLUID)
336 IF(BC_JJ_PSL==0) CALL EQUAL(U_S,IJK,SIGN0,U_S,LFLUID)
337 ENDIF
338
339 IF (WALL_AT(IJKP)) THEN
340 W_G(IJK) = SIGN0*W_G(LFLUID)
341 IF(BC_JJ_PSL==0) CALL EQUAL(W_S,IJK,SIGN0,W_S,LFLUID)
342 ENDIF
343 ENDIF
344
345
346 IF (.NOT.WALL_AT(IJPK)) THEN
347 LFLUID = IJPK
348
349 IF (WALL_AT(IPJK)) THEN
350 U_G(IJK) = SIGN0*U_G(LFLUID)
351 IF(BC_JJ_PSL==0) CALL EQUAL(U_S,IJK,SIGN0,U_S,LFLUID)
352 ENDIF
353
354 IF (WALL_AT(IJKP)) THEN
355 W_G(IJK) = SIGN0*W_G(LFLUID)
356 IF(BC_JJ_PSL==0) CALL EQUAL(W_S,IJK,SIGN0,W_S,LFLUID)
357 ENDIF
358 ENDIF
359
360
361 IF (DO_K) THEN
362
363 IF (.NOT.WALL_AT(IJKM)) THEN
364 LFLUID = IJKM
365
366 IF (WALL_AT(IPJK)) THEN
367 U_G(IJK) = SIGN0*U_G(LFLUID)
368 IF (BC_JJ_PSL == 0) CALL EQUAL(U_S, IJK, &
369 SIGN0, U_S, LFLUID)
370 ENDIF
371
372 IF (WALL_AT(IJPK)) THEN
373 V_G(IJK) = SIGN0*V_G(LFLUID)
374 IF (BC_JJ_PSL == 0) CALL EQUAL(V_S, IJK, &
375 SIGN0, V_S, LFLUID)
376 ENDIF
377 ENDIF
378
379
380 IF (.NOT.WALL_AT(IJKP)) THEN
381 LFLUID = IJKP
382
383 IF (WALL_AT(IPJK)) THEN
384 U_G(IJK) = SIGN0*U_G(LFLUID)
385 IF (BC_JJ_PSL == 0) CALL EQUAL(U_S, IJK, &
386 SIGN0, U_S, LFLUID)
387 ENDIF
388
389 IF (WALL_AT(IJPK)) THEN
390 V_G(IJK) = SIGN0*V_G(LFLUID)
391 IF (BC_JJ_PSL == 0) CALL EQUAL(V_S, IJK, &
392 SIGN0, V_S, LFLUID)
393 ENDIF
394 ENDIF
395 ENDIF
396
397 ENDIF
398 ENDDO
399 ENDDO
400 ENDDO
401
402 RETURN
403
404 CONTAINS
405
406 INCLUDE 'functions.inc'
407
408
409
410
411
412
413
414
415
416
417
418
419 SUBROUTINE EQUAL(ARRAY1, IJK1, SIGN0, ARRAY2, IJK2)
420
421 IMPLICIT NONE
422
423
424
425
426 DOUBLE PRECISION, INTENT(OUT) :: ARRAY1 (DIMENSION_3, *)
427
428 DOUBLE PRECISION, INTENT(IN) :: ARRAY2 (DIMENSION_3, *)
429
430 INTEGER, INTENT(IN) :: IJK1
431
432 INTEGER, INTENT(IN) :: IJK2
433
434
435 DOUBLE PRECISION, INTENT(IN) :: SIGN0
436
437
438
439
440
441 IF (MMAX > 0) THEN
442 ARRAY1(IJK1,:MMAX) = SIGN0*ARRAY2(IJK2,:MMAX)
443 ENDIF
444
445 RETURN
446 END SUBROUTINE EQUAL
447
448 END SUBROUTINE SET_WALL_BC1
449