File: N:\mfix\model\set_bc_flow.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SUBROUTINE SET_BC_FLOW
16
17
18
19
20 use physprop, only: SMAX
21
22 use discretelement, only: DES_MMAX
23
24 use bc, only: BC_DEFINED
25
26 use bc
27
28 use bc, only: BC_ROP_s
29
30 use bc, only: BC_EP_s
31 use bc, only: BC_EP_g
32
33
34
35
36 use param1, only: ZERO, ONE, UNDEFINED
37
38 use param, only: DIMENSION_BC
39
40 use param, only: DIM_M
41
42
43
44 use error_manager
45
46
47 IMPLICIT NONE
48
49
50
51
52
53 INTEGER :: BCV
54
55 INTEGER :: MMAX_TOT
56
57 LOGICAL :: SKIP(1:DIM_M)
58
59
60
61
62 CALL INIT_ERR_MSG("SET_BC_FLOW")
63
64
65 = SMAX + DES_MMAX
66
67
68 DO BCV = 1, DIMENSION_BC
69
70 IF(.NOT.BC_DEFINED(BCV)) CYCLE
71
72
73 =(BC_ROP_S(BCV,:)==UNDEFINED.OR.BC_ROP_S(BCV,:)==ZERO) &
74 .AND.(BC_EP_S(BCV,:)==UNDEFINED.OR.BC_EP_S(BCV,:)==ZERO)
75
76 IF(MMAX_TOT == 1 .AND. BC_EP_g(BCV)/=ONE) SKIP(1) = .FALSE.
77
78 SELECT CASE (BC_TYPE_ENUM(BCV))
79
80 CASE (MASS_INFLOW)
81 CALL FLOW_TO_VEL_NEW(.TRUE., MMAX_TOT, SKIP, BCV)
82 CALL CHECK_BC_VEL_INFLOW(MMAX_TOT, SKIP, BCV)
83
84 CASE (MASS_OUTFLOW)
85 CALL FLOW_TO_VEL_NEW(.TRUE., MMAX_TOT, SKIP, BCV)
86 CALL CHECK_BC_VEL_OUTFLOW(MMAX_TOT, SKIP, BCV)
87 END SELECT
88 ENDDO
89
90
91 CALL FINL_ERR_MSG
92
93 RETURN
94
95 END SUBROUTINE SET_BC_FLOW
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 SUBROUTINE CHECK_BC_VEL_INFLOW(M_TOT, SKIP, BCV)
114
115 USE param, only: DIM_M
116 USE param1, only: ZERO
117 USE param1, only: UNDEFINED
118
119 use geometry, only: NO_I
120 use geometry, only: NO_J
121 use geometry, only: NO_K
122
123 use bc
124
125 use error_manager
126
127 IMPLICIT NONE
128
129
130 INTEGER, INTENT(in) :: BCV
131 INTEGER, INTENT(in) :: M_TOT
132
133 LOGICAL, INTENT(in) :: SKIP(DIM_M)
134
135
136 INTEGER :: M
137
138 CALL INIT_ERR_MSG("CHECK_BC_VEL_INFLOW")
139
140
141
142 IF(BC_U_G(BCV) == UNDEFINED) THEN
143 IF(NO_I) THEN
144 BC_U_G(BCV) = ZERO
145 ELSE
146 WRITE(ERR_MSG,1000) trim(iVar('BC_U_g',BCV))
147 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
148 ENDIF
149 ENDIF
150
151 IF (BC_V_G(BCV) == UNDEFINED) THEN
152 IF (NO_J) THEN
153 BC_V_G(BCV) = ZERO
154 ELSE
155 WRITE(ERR_MSG,1000) trim(iVar('BC_V_g',BCV))
156 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157 ENDIF
158 ENDIF
159
160 IF(BC_W_G(BCV) == UNDEFINED) THEN
161 IF (NO_K) THEN
162 BC_W_G(BCV) = ZERO
163 ELSE
164 WRITE(ERR_MSG,1000) trim(iVar('BC_W_g',BCV))
165 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
166 ENDIF
167 ENDIF
168
169
170 DO M = 1, M_TOT
171 IF(BC_U_S(BCV,M) == UNDEFINED) THEN
172 IF(SKIP(M) .OR. NO_I) THEN
173 BC_U_S(BCV,M) = ZERO
174 ELSE
175 WRITE(ERR_MSG,1000) trim(iVar('BC_U_s',BCV,M))
176 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
177 ENDIF
178 ENDIF
179
180 IF(BC_V_S(BCV,M) == UNDEFINED) THEN
181 IF(SKIP(M) .OR. NO_J) THEN
182 BC_V_S(BCV,M) = ZERO
183 ELSE
184 WRITE(ERR_MSG,1000) trim(iVar('BC_V_s',BCV,M))
185 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
186 ENDIF
187 ENDIF
188
189 IF(BC_W_S(BCV,M) == UNDEFINED) THEN
190 IF(SKIP(M) .OR. NO_K) THEN
191 BC_W_S(BCV,M) = ZERO
192 ELSE
193 WRITE(ERR_MSG,1000) trim(iVar('BC_W_s',BCV,M))
194 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
195 ENDIF
196 ENDIF
197 ENDDO
198
199
200 SELECT CASE (BC_PLANE(BCV))
201
202 CASE ('W')
203 IF(BC_U_G(BCV) > ZERO) THEN
204 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '<'
205 CALL FLUSH_ERR_MSG
206 ENDIF
207 DO M = 1, M_TOT
208 IF(BC_U_S(BCV,M) > ZERO) THEN
209 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '<'
210 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
211 ENDIF
212 ENDDO
213
214 CASE('E')
215 IF(BC_U_G(BCV) < ZERO) THEN
216 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '>'
217 CALL FLUSH_ERR_MSG
218 ENDIF
219 DO M = 1, M_TOT
220 IF(BC_U_S(BCV,M) < ZERO) THEN
221 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '>'
222 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
223 ENDIF
224 ENDDO
225
226 CASE('S')
227 IF(BC_V_G(BCV) > ZERO) THEN
228 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '<'
229 CALL FLUSH_ERR_MSG
230 ENDIF
231 DO M = 1, M_TOT
232 IF(BC_V_S(BCV,M) > ZERO) THEN
233 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '<'
234 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
235 ENDIF
236 ENDDO
237
238 CASE('N')
239 IF(BC_V_G(BCV) < ZERO) THEN
240 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '>'
241 CALL FLUSH_ERR_MSG
242 ENDIF
243 DO M = 1, M_TOT
244 IF(BC_V_S(BCV,M) < ZERO) THEN
245 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '>'
246 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
247 ENDIF
248 ENDDO
249
250 CASE('B')
251 IF(BC_W_G(BCV) > ZERO) THEN
252 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '<'
253 CALL FLUSH_ERR_MSG
254 ENDIF
255 DO M = 1, M_TOT
256 IF(BC_W_S(BCV,M) > ZERO) THEN
257 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '<'
258 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
259 ENDIF
260 ENDDO
261
262 CASE('T')
263 IF(BC_W_G(BCV) < ZERO) THEN
264 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '>'
265 CALL FLUSH_ERR_MSG
266 ENDIF
267 DO M = 1, M_TOT
268 IF(BC_W_S(BCV,M) < ZERO) THEN
269 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '>'
270 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
271 ENDIF
272 ENDDO
273
274 END SELECT
275
276 1300 FORMAT('Error 1300: Invalid flow direction. ',A,' should be ', &
277 A,' zero. ',/'Please correct the mfix.dat file.')
278
279 CALL FINL_ERR_MSG
280
281 RETURN
282
283 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
284 'correct the mfix.dat file.')
285
286 END SUBROUTINE CHECK_BC_VEL_INFLOW
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304 SUBROUTINE CHECK_BC_VEL_OUTFLOW(M_TOT, SKIP, BCV)
305
306 USE param
307 USE param1
308 USE geometry
309 USE fldvar
310 USE physprop
311 USE run
312 USE bc
313 USE indices
314 USE funits
315 USE scalars
316 USE compar
317 USE sendrecv
318 USE discretelement
319 USE mfix_pic
320 USE cutcell
321
322 use error_manager
323
324 IMPLICIT NONE
325
326
327 INTEGER, intent(in) :: BCV
328 INTEGER, intent(in) :: M_TOT
329 LOGICAL, intent(in) :: SKIP(DIM_M)
330
331
332 INTEGER :: M
333
334 CALL INIT_ERR_MSG("CHECK_BC_VEL_OUTFLOW")
335
336
337 IF(BC_U_G(BCV) == UNDEFINED) THEN
338 IF(NO_I) THEN
339 BC_U_G(BCV) = ZERO
340 ELSE
341 WRITE(ERR_MSG,1000) trim(iVar('BC_U_g',BCV))
342 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
343 ENDIF
344 ENDIF
345
346 IF (BC_V_G(BCV) == UNDEFINED) THEN
347 IF (NO_J) THEN
348 BC_V_G(BCV) = ZERO
349 ELSE
350 WRITE(ERR_MSG,1000) trim(iVar('BC_V_g',BCV))
351 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
352 ENDIF
353 ENDIF
354
355 IF(BC_W_G(BCV) == UNDEFINED) THEN
356 IF (NO_K) THEN
357 BC_W_G(BCV) = ZERO
358 ELSE
359 WRITE(ERR_MSG,1000) trim(iVar('BC_W_g',BCV))
360 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
361 ENDIF
362 ENDIF
363
364
365 DO M = 1, M_TOT
366 IF(BC_U_S(BCV,M) == UNDEFINED) THEN
367 IF(SKIP(M) .OR. NO_I) THEN
368 BC_U_S(BCV,M) = ZERO
369 ELSE
370 WRITE(ERR_MSG,1000) trim(iVar('BC_U_s',BCV,M))
371 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
372 ENDIF
373 ENDIF
374
375 IF(BC_V_S(BCV,M) == UNDEFINED) THEN
376 IF(SKIP(M) .OR. NO_J) THEN
377 BC_V_S(BCV,M) = ZERO
378 ELSE
379 WRITE(ERR_MSG,1000) trim(iVar('BC_V_s',BCV,M))
380 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
381 ENDIF
382 ENDIF
383
384 IF(BC_W_S(BCV,M) == UNDEFINED) THEN
385 IF(SKIP(M) .OR. NO_K) THEN
386 BC_W_S(BCV,M) = ZERO
387 ELSE
388 WRITE(ERR_MSG,1000) trim(iVar('BC_W_s',BCV,M))
389 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
390 ENDIF
391 ENDIF
392 ENDDO
393
394
395
396 SELECT CASE (BC_PLANE(BCV))
397
398 CASE ('W')
399 IF(BC_U_G(BCV) < ZERO) THEN
400 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '>'
401 CALL FLUSH_ERR_MSG
402 ENDIF
403 DO M = 1, M_TOT
404 IF(BC_U_S(BCV,M) < ZERO) THEN
405 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '>'
406 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
407 ENDIF
408 ENDDO
409
410 CASE('E')
411 IF(BC_U_G(BCV) > ZERO) THEN
412 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '<'
413 CALL FLUSH_ERR_MSG
414 ENDIF
415 DO M = 1, M_TOT
416 IF(BC_U_S(BCV,M) > ZERO) THEN
417 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '<'
418 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
419 ENDIF
420 ENDDO
421
422 CASE('S')
423 IF(BC_V_G(BCV) < ZERO) THEN
424 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '>'
425 CALL FLUSH_ERR_MSG
426 ENDIF
427 DO M = 1, M_TOT
428 IF(BC_V_S(BCV,M) < ZERO) THEN
429 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '>'
430 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
431 ENDIF
432 ENDDO
433
434 CASE('N')
435 IF(BC_V_G(BCV) > ZERO) THEN
436 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '<'
437 CALL FLUSH_ERR_MSG
438 ENDIF
439 DO M = 1, M_TOT
440 IF(BC_V_S(BCV,M) > ZERO) THEN
441 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '<'
442 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
443 ENDIF
444 ENDDO
445
446 CASE('B')
447 IF(BC_W_G(BCV) < ZERO) THEN
448 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '>'
449 CALL FLUSH_ERR_MSG
450 ENDIF
451 DO M = 1, M_TOT
452 IF(BC_W_S(BCV,M) < ZERO) THEN
453 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '>'
454 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
455 ENDIF
456 ENDDO
457
458 CASE('T')
459 IF(BC_W_G(BCV) > ZERO) THEN
460 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '<'
461 CALL FLUSH_ERR_MSG
462 ENDIF
463 DO M = 1, M_TOT
464 IF(BC_W_S(BCV,M) > ZERO) THEN
465 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '<'
466 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
467 ENDIF
468 ENDDO
469
470 END SELECT
471
472 1300 FORMAT('Error 1300: Invalid flow direction. ',A,' should be ', &
473 A,' zero. ',/'Please correct the mfix.dat file.')
474 CALL FINL_ERR_MSG
475
476
477 RETURN
478
479
480 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
481 'correct the mfix.dat file.')
482
483 END SUBROUTINE CHECK_BC_VEL_OUTFLOW
484