File: N:\mfix\model\corner.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SUBROUTINE GET_CORNER_CELLS()
21
22
23
24
25
26
27
28
29 USE compar
30 USE corner
31 USE functions
32 USE funits
33 USE geometry
34 USE indices
35 USE machine, only: start_log, end_log
36 USE param
37 USE param1
38 USE physprop
39 IMPLICIT NONE
40
41
42
43
44
45
46
47
48
49
50
51 INTEGER L
52
53
54
55 INTEGER IJK, IMJK, IJMK, IJKM, IPJK, IJPK, &
56 IJKP
57
58
59 INTEGER NUM
60
61
62 LOGICAL dir(-3:3), NotCorner
63
64
65
66 = 0
67
68 DO IJK = ijkstart3, ijkend3
69 IF (WALL_AT(IJK).AND..NOT.CYCLIC_AT(IJK)) THEN
70
71
72 = IM_OF(IJK)
73 IJMK = JM_OF(IJK)
74 IJKM = KM_OF(IJK)
75 IPJK = IP_OF(IJK)
76 IJPK = JP_OF(IJK)
77 IJKP = KP_OF(IJK)
78
79 = 0
80
81 IF (FLUID_AT(IMJK)) THEN
82 NUM = NUM + 1
83 DIR(west) = .TRUE.
84 ELSE
85 DIR(west) = .FALSE.
86 ENDIF
87
88 IF (FLUID_AT(IPJK)) THEN
89 NUM = NUM + 1
90 DIR(east) = .TRUE.
91 ELSE
92 DIR(east) = .FALSE.
93 ENDIF
94
95 IF (FLUID_AT(IJMK)) THEN
96 NUM = NUM + 1
97 DIR(south) = .TRUE.
98 ELSE
99 DIR(south) = .FALSE.
100 ENDIF
101
102 IF (FLUID_AT(IJPK)) THEN
103 NUM = NUM + 1
104 DIR(north) = .TRUE.
105 ELSE
106 DIR(north) = .FALSE.
107 ENDIF
108
109 IF (FLUID_AT(IJKM)) THEN
110 NUM = NUM + 1
111 DIR(bottom) = .TRUE.
112 ELSE
113 DIR(bottom) = .FALSE.
114 ENDIF
115
116 IF (FLUID_AT(IJKP)) THEN
117 NUM = NUM + 1
118 DIR(top) = .TRUE.
119 ELSE
120 DIR(top) = .FALSE.
121 ENDIF
122
123 IF (NUM > 1) THEN
124
125
126 = .TRUE.
127
128
129 IF (DIR(west) .AND. DIR(east) .OR. DIR(south) .AND. DIR(north) .OR. DIR(top)&
130 .AND. DIR(bottom)) THEN
131
132 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
133 ENDIF
134
135
136
137 IF (DIR(east)) THEN
138
139 IF (DIR(north)) THEN
140 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
141 ENDIF
142
143 IF (DIR(south)) THEN
144 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
145 ENDIF
146
147 IF (DO_K) THEN
148 IF (DIR(top)) THEN
149 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
150 ENDIF
151
152 IF (DIR(bottom)) THEN
153 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
154 ENDIF
155 ENDIF
156
157 ENDIF
158
159 IF (DIR(west)) THEN
160
161 IF (DIR(north)) THEN
162 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
163 ENDIF
164
165 IF (DIR(south)) THEN
166 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
167 ENDIF
168
169 IF (DO_K) THEN
170 IF (DIR(top)) THEN
171 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
172 ENDIF
173
174 IF (DIR(bottom)) THEN
175 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
176 ENDIF
177 ENDIF
178
179 ENDIF
180
181 IF (DIR(north)) THEN
182
183
184 IF (DO_K) THEN
185 IF (DIR(top)) THEN
186 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
187 ENDIF
188
189 IF (DIR(bottom)) THEN
190 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
191 ENDIF
192 ENDIF
193
194 ENDIF
195
196 IF (DIR(south)) THEN
197
198
199 IF (DO_K) THEN
200 IF (DIR(top)) THEN
201 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
202 ENDIF
203
204 IF (DIR(bottom)) THEN
205 IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
206 ENDIF
207 ENDIF
208
209 ENDIF
210
211 IF (.NOT.NOTCORNER) THEN
212 IJK_CORN(NCORN) = IJK
213
214 (IJK) = ZERO
215 AXZ(IJMK) = ZERO
216 AYZ(IJK) = ZERO
217 AYZ(IMJK) = ZERO
218 AXY(IJK) = ZERO
219 AXY(IJKM) = ZERO
220
221 (IM_OF(IJMK)) = ZERO
222 AXZ_U(IJMK) = ZERO
223 AXZ_U(IMJK) = ZERO
224 AXZ_U(IJK) = ZERO
225
226 (IM_OF(IJKM)) = ZERO
227 AXY_U(IJKM) = ZERO
228 AXY_U(IMJK) = ZERO
229 AXY_U(IJK) = ZERO
230
231 (JM_OF(IMJK)) = ZERO
232 AYZ_V(IMJK) = ZERO
233 AYZ_V(IJMK) = ZERO
234 AYZ_V(IJK) = ZERO
235
236 (JM_OF(IJKM)) = ZERO
237 AXY_V(IJKM) = ZERO
238 AXY_V(IJMK) = ZERO
239 AXY_V(IJK) = ZERO
240
241 (KM_OF(IMJK)) = ZERO
242 AYZ_W(IMJK) = ZERO
243 AYZ_W(IJKM) = ZERO
244 AYZ_W(IJK) = ZERO
245
246 (KM_OF(IJMK)) = ZERO
247 AXZ_W(IJMK) = ZERO
248 AXZ_W(IJKM) = ZERO
249 AXZ_W(IJK) = ZERO
250 ENDIF
251
252 ENDIF
253
254 ENDIF
255 END DO
256 IF (NCORN > 0) THEN
257 CALL START_LOG
258 IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
259
260 DO L = 1, NCORN
261 IJK = IJK_CORN(L)
262 IF(DMP_LOG)WRITE (UNIT_LOG, 1100) IJK, I_OF(IJK), J_OF(IJK), K_OF(IJK)
263 END DO
264 IF(DMP_LOG)WRITE (UNIT_LOG, 1300)
265 CALL END_LOG
266 ENDIF
267
268 RETURN
269
270 FORMAT(/1X,70('*')//' From: Get_Corner_Cells',/&
271 ' Warning: The following wall-cells are adjacent to two or',/,&
272 ' more fluid-cells. Mass, momentum, and energy transfer ',/,&
273 ' to these wall-cells have been set to zero.',/,&
274 ' IJK I J K')
275 1100 FORMAT(3X,I6,2X,I4,2X,I4,2X,I4)
276
277 FORMAT(/1X,70('*')/)
278 END SUBROUTINE GET_CORNER_CELLS
279
280 SUBROUTINE ADDCORN(NOTCORNER, NCORN)
281
282
283
284
285
286
287
288
289 USE compar
290 USE exit, only: mfix_exit
291 USE param
292 USE param1
293 IMPLICIT NONE
294
295
296
297 INTEGER NCORN
298 LOGICAL NOTCORNER
299
300
301
302
303
304
305 CHARACTER(LEN=80) :: LINE
306
307
308
309
310 = NCORN + 1
311 IF (NCORN > MAX_NCORN) THEN
312 WRITE (LINE, '(A)') 'Error: Increase MAX_NCORN in param1.inc.'
313 CALL WRITE_ERROR ('AddCorn', LINE, 1)
314 CALL MFIX_EXIT(myPE)
315 ENDIF
316
317 = .FALSE.
318
319 RETURN
320 END SUBROUTINE ADDCORN
321
322
323
324
325
326