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