File: RELATIVE:/../../../mfix.git/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, only: BC_TYPE
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 (TRIM(BC_TYPE(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 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
287 'Please correct the mfix.dat file.')
288
289 END SUBROUTINE CHECK_BC_VEL_INFLOW
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309 SUBROUTINE CHECK_BC_VEL_OUTFLOW(M_TOT, SKIP, BCV)
310
311 USE param
312 USE param1
313 USE geometry
314 USE fldvar
315 USE physprop
316 USE run
317 USE bc
318 USE indices
319 USE funits
320 USE scalars
321 USE compar
322 USE sendrecv
323 USE discretelement
324 USE mfix_pic
325 USE cutcell
326
327 use error_manager
328
329 IMPLICIT NONE
330
331
332 INTEGER, intent(in) :: BCV
333 INTEGER, intent(in) :: M_TOT
334 LOGICAL, intent(in) :: SKIP(DIM_M)
335
336
337 INTEGER :: M
338
339 CALL INIT_ERR_MSG("CHECK_BC_VEL_OUTFLOW")
340
341
342 IF(BC_U_G(BCV) == UNDEFINED) THEN
343 IF(NO_I) THEN
344 BC_U_G(BCV) = ZERO
345 ELSE
346 WRITE(ERR_MSG,1000) trim(iVar('BC_U_g',BCV))
347 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
348 ENDIF
349 ENDIF
350
351 IF (BC_V_G(BCV) == UNDEFINED) THEN
352 IF (NO_J) THEN
353 BC_V_G(BCV) = ZERO
354 ELSE
355 WRITE(ERR_MSG,1000) trim(iVar('BC_V_g',BCV))
356 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
357 ENDIF
358 ENDIF
359
360 IF(BC_W_G(BCV) == UNDEFINED) THEN
361 IF (NO_K) THEN
362 BC_W_G(BCV) = ZERO
363 ELSE
364 WRITE(ERR_MSG,1000) trim(iVar('BC_W_g',BCV))
365 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
366 ENDIF
367 ENDIF
368
369
370 DO M = 1, M_TOT
371 IF(BC_U_S(BCV,M) == UNDEFINED) THEN
372 IF(SKIP(M) .OR. NO_I) THEN
373 BC_U_S(BCV,M) = ZERO
374 ELSE
375 WRITE(ERR_MSG,1000) trim(iVar('BC_U_s',BCV,M))
376 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
377 ENDIF
378 ENDIF
379
380 IF(BC_V_S(BCV,M) == UNDEFINED) THEN
381 IF(SKIP(M) .OR. NO_J) THEN
382 BC_V_S(BCV,M) = ZERO
383 ELSE
384 WRITE(ERR_MSG,1000) trim(iVar('BC_V_s',BCV,M))
385 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
386 ENDIF
387 ENDIF
388
389 IF(BC_W_S(BCV,M) == UNDEFINED) THEN
390 IF(SKIP(M) .OR. NO_K) THEN
391 BC_W_S(BCV,M) = ZERO
392 ELSE
393 WRITE(ERR_MSG,1000) trim(iVar('BC_W_s',BCV,M))
394 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
395 ENDIF
396 ENDIF
397 ENDDO
398
399
400
401 SELECT CASE (BC_PLANE(BCV))
402
403 CASE ('W')
404 IF(BC_U_G(BCV) < ZERO) THEN
405 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '>'
406 CALL FLUSH_ERR_MSG
407 ENDIF
408 DO M = 1, M_TOT
409 IF(BC_U_S(BCV,M) < ZERO) THEN
410 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '>'
411 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
412 ENDIF
413 ENDDO
414
415 CASE('E')
416 IF(BC_U_G(BCV) > ZERO) THEN
417 WRITE(ERR_MSG,1300) trim(iVar('BC_U_g',BCV)), '<'
418 CALL FLUSH_ERR_MSG
419 ENDIF
420 DO M = 1, M_TOT
421 IF(BC_U_S(BCV,M) > ZERO) THEN
422 WRITE(ERR_MSG, 1300) trim(iVar('BC_U_s',BCV,M)), '<'
423 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
424 ENDIF
425 ENDDO
426
427 CASE('S')
428 IF(BC_V_G(BCV) < ZERO) THEN
429 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '>'
430 CALL FLUSH_ERR_MSG
431 ENDIF
432 DO M = 1, M_TOT
433 IF(BC_V_S(BCV,M) < ZERO) THEN
434 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '>'
435 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
436 ENDIF
437 ENDDO
438
439 CASE('N')
440 IF(BC_V_G(BCV) > ZERO) THEN
441 WRITE(ERR_MSG,1300) trim(iVar('BC_V_g',BCV)), '<'
442 CALL FLUSH_ERR_MSG
443 ENDIF
444 DO M = 1, M_TOT
445 IF(BC_V_S(BCV,M) > ZERO) THEN
446 WRITE(ERR_MSG, 1300) trim(iVar('BC_V_s',BCV,M)), '<'
447 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
448 ENDIF
449 ENDDO
450
451 CASE('B')
452 IF(BC_W_G(BCV) < ZERO) THEN
453 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '>'
454 CALL FLUSH_ERR_MSG
455 ENDIF
456 DO M = 1, M_TOT
457 IF(BC_W_S(BCV,M) < ZERO) THEN
458 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '>'
459 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
460 ENDIF
461 ENDDO
462
463 CASE('T')
464 IF(BC_W_G(BCV) > ZERO) THEN
465 WRITE(ERR_MSG,1300) trim(iVar('BC_W_g',BCV)), '<'
466 CALL FLUSH_ERR_MSG
467 ENDIF
468 DO M = 1, M_TOT
469 IF(BC_W_S(BCV,M) > ZERO) THEN
470 WRITE(ERR_MSG, 1300) trim(iVar('BC_W_s',BCV,M)), '<'
471 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
472 ENDIF
473 ENDDO
474
475 END SELECT
476
477 1300 FORMAT('Error 1300: Invalid flow direction. ',A,' should be ', &
478 A,' zero. ',/'Please correct the mfix.dat file.')
479 CALL FINL_ERR_MSG
480
481
482 RETURN
483
484
485 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
486 'correct the mfix.dat file.')
487
488 END SUBROUTINE CHECK_BC_VEL_OUTFLOW
489