File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_bc_geometry.f
1
2
3
4
5
6
7
8
9
10 SUBROUTINE CHECK_BC_GEOMETRY
11
12
13
14
15 use bc, only: BC_DEFINED
16
17 use bc, only: BC_TYPE
18
19 use bc, only: BC_X_e, BC_X_w, BC_I_e, BC_I_w
20 use bc, only: BC_Y_n, BC_Y_s, BC_J_n, BC_J_s
21 use bc, only: BC_Z_t, BC_Z_b, BC_K_t, BC_K_b
22
23 use geometry, only: NO_I, XLENGTH
24 use geometry, only: NO_J, YLENGTH
25 use geometry, only: NO_K, ZLENGTH
26
27
28
29
30 use param, only: DIMENSION_BC
31
32 use param1, only: ZERO, UNDEFINED, UNDEFINED_I, UNDEFINED_C
33
34
35
36 use error_manager
37
38
39 IMPLICIT NONE
40
41
42
43
44
45 INTEGER :: BCV, I
46
47 LOGICAL :: RECOGNIZED_BC_TYPE
48
49 INTEGER, PARAMETER :: DIM_BCTYPE = 21
50
51 CHARACTER(LEN=16), DIMENSION(1:DIM_BCTYPE) ::VALID_BC_TYPE = (/&
52 'MASS_INFLOW ', 'MI ',&
53 'MASS_OUTFLOW ', 'MO ',&
54 'P_INFLOW ', 'PI ',&
55 'P_OUTFLOW ', 'PO ',&
56 'FREE_SLIP_WALL ', 'FSW ',&
57 'NO_SLIP_WALL ', 'NSW ',&
58 'PAR_SLIP_WALL ', 'PSW ',&
59 'OUTFLOW ', 'OF ',&
60 'CG_NSW ', 'CG_FSW ',&
61 'CG_PSW ', 'CG_MI ',&
62 'CG_PO '/)
63
64
65 CALL INIT_ERR_MSG("CHECK_BC_GEOMETRY")
66
67
68 L50: DO BCV = 1, DIMENSION_BC
69
70 BC_DEFINED(BCV) = .FALSE.
71 IF(BC_X_W(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
72 IF(BC_X_E(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
73 IF(BC_Y_S(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
74 IF(BC_Y_N(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
75 IF(BC_Z_B(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
76 IF(BC_Z_T(BCV) /= UNDEFINED) BC_DEFINED(BCV) = .TRUE.
77 IF(BC_I_W(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
78 IF(BC_I_E(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
79 IF(BC_J_S(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
80 IF(BC_J_N(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
81 IF(BC_K_B(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
82 IF(BC_K_T(BCV) /= UNDEFINED_I) BC_DEFINED(BCV) = .TRUE.
83 IF(BC_TYPE(BCV) == 'CG_NSW') BC_DEFINED(BCV) = .TRUE.
84 IF(BC_TYPE(BCV) == 'CG_FSW') BC_DEFINED(BCV) = .TRUE.
85 IF(BC_TYPE(BCV) == 'CG_PSW') BC_DEFINED(BCV) = .TRUE.
86 IF(BC_TYPE(BCV) == 'CG_MI') BC_DEFINED(BCV) = .TRUE.
87 IF(BC_TYPE(BCV) == 'CG_PO') BC_DEFINED(BCV) = .TRUE.
88
89 IF (BC_TYPE(BCV) == 'DUMMY') BC_DEFINED(BCV) = .FALSE.
90
91 IF(BC_TYPE(BCV)/=UNDEFINED_C .AND. BC_TYPE(BCV)/='DUMMY')THEN
92
93 RECOGNIZED_BC_TYPE = .FALSE.
94 DO I = 1, DIM_BCTYPE
95 VALID_BC_TYPE(I) = TRIM(VALID_BC_TYPE(I))
96 IF(VALID_BC_TYPE(I) == BC_TYPE(BCV)) THEN
97 RECOGNIZED_BC_TYPE = .TRUE.
98 EXIT
99 ENDIF
100 ENDDO
101
102 IF(.NOT.RECOGNIZED_BC_TYPE) THEN
103 WRITE(ERR_MSG, 1100) trim(iVar('BC_TYPE',BCV)), &
104 trim(BC_TYPE(BCV)), VALID_BC_TYPE
105 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
106 ENDIF
107 ENDIF
108
109 IF(.NOT.BC_DEFINED(BCV)) CYCLE
110 IF(BC_TYPE(BCV)(1:2) == 'CG') CYCLE
111
112 IF(BC_X_W(BCV)==UNDEFINED .AND. BC_I_W(BCV)==UNDEFINED_I) THEN
113 IF(NO_I) THEN
114 BC_X_W(BCV) = ZERO
115 ELSE
116 WRITE(ERR_MSG,1101) BCV, 'BC_X_w and BC_I_w'
117 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
118 ENDIF
119 ENDIF
120
121 IF(BC_X_E(BCV)==UNDEFINED .AND. BC_I_E(BCV)==UNDEFINED_I) THEN
122 IF(NO_I) THEN
123 BC_X_E(BCV) = XLENGTH
124 ELSE
125 WRITE(ERR_MSG, 1101) BCV, 'BC_X_e and BC_I_e'
126 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
127 ENDIF
128 ENDIF
129
130 IF(BC_Y_S(BCV)==UNDEFINED .AND. BC_J_S(BCV)==UNDEFINED_I) THEN
131 IF(NO_J) THEN
132 BC_Y_S(BCV) = ZERO
133 ELSE
134 WRITE(ERR_MSG, 1101) BCV, 'BC_Y_s and BC_J_s'
135 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
136 ENDIF
137 ENDIF
138
139 IF(BC_Y_N(BCV)==UNDEFINED .AND. BC_J_N(BCV)==UNDEFINED_I) THEN
140 IF(NO_J) THEN
141 BC_Y_N(BCV) = YLENGTH
142 ELSE
143 WRITE(ERR_MSG, 1101) BCV, 'BC_Y_n and BC_J_n'
144 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
145 ENDIF
146 ENDIF
147
148 IF(BC_Z_B(BCV)==UNDEFINED .AND. BC_K_B(BCV)==UNDEFINED_I) THEN
149 IF(NO_K) THEN
150 BC_Z_B(BCV) = ZERO
151 ELSE
152 WRITE(ERR_MSG, 1101) BCV, 'BC_Z_b and BC_K_b'
153 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
154 ENDIF
155 ENDIF
156
157 IF(BC_Z_T(BCV)==UNDEFINED .AND. BC_K_T(BCV)==UNDEFINED_I) THEN
158 IF(NO_K) THEN
159 BC_Z_T(BCV) = ZLENGTH
160 ELSE
161 WRITE(ERR_MSG, 1101) BCV, 'BC_Z_t and BC_K_t'
162 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
163 ENDIF
164 ENDIF
165
166 1101 FORMAT('Error 1101: Boundary condition ',I3,' is ill-defined.',/ &
167 A,' are not specified.',/'Please correct the mfix.dat file.')
168
169
170 DO I = 1, DIM_BCTYPE
171 VALID_BC_TYPE(I) = TRIM(VALID_BC_TYPE(I))
172 IF(VALID_BC_TYPE(I) == BC_TYPE(BCV)) THEN
173 IF(MOD(I,2) == 0) BC_TYPE(BCV) = VALID_BC_TYPE(I-1)
174 CYCLE L50
175 ENDIF
176 ENDDO
177
178 WRITE(ERR_MSG, 1100) trim(iVar('BC_TYPE',BCV)), &
179 trim(BC_TYPE(BCV)), VALID_BC_TYPE
180 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
181
182 ENDDO L50
183
184 CALL FINL_ERR_MSG
185
186 RETURN
187
188
189 1100 FORMAT('Error 1100: Illegal entry: ',A,' = ',A,/'Valid entries:',&
190 ' ',10(/5X,A,2x,A),/5X,A)
191
192 END SUBROUTINE CHECK_BC_GEOMETRY
193
194
195
196
197
198
199
200
201
202
203
204 SUBROUTINE CHECK_BC_GEOMETRY_WALL(BCV)
205
206 USE bc
207 USE compar
208 USE error_manager
209 USE fldvar
210 USE funits
211 USE geometry
212 USE indices
213 USE param
214 USE param1
215 USE physprop
216 USE sendrecv
217 USE toleranc
218
219 IMPLICIT NONE
220
221
222 INTEGER, INTENT(in) :: BCV
223
224
225
226
227 INTEGER :: I_w , I_e , J_s , J_n , K_b , K_t
228 INTEGER :: IER
229
230 CALL INIT_ERR_MSG("CHECK_BC_GEOMETRY_WALL")
231
232
233 IF(BC_X_W(BCV)/=UNDEFINED .AND. BC_X_E(BCV)/=UNDEFINED) THEN
234
235
236 IF (NO_I) THEN
237 I_W = 1
238 I_E = 1
239 ELSE
240 CALL CALC_CELL (XMIN, BC_X_W(BCV), DX, IMAX, I_W)
241 I_W = I_W + 1
242 CALL CALC_CELL (XMIN, BC_X_E(BCV), DX, IMAX, I_E)
243
244 IF(BC_X_W(BCV) == BC_X_E(BCV)) THEN
245 IF(COMPARE(BC_X_W(BCV),XMIN)) THEN
246 I_W = 1
247 I_E = 1
248 ELSEIF(COMPARE(BC_X_W(BCV),XMIN+XLENGTH)) THEN
249 I_W = IMAX2
250 I_E = IMAX2
251 ENDIF
252 ENDIF
253 ENDIF
254
255
256
257 IF(BC_I_W(BCV)/=UNDEFINED_I .OR. BC_I_E(BCV)/=UNDEFINED_I) THEN
258 CALL LOCATION_CHECK (BC_I_W(BCV), I_W, BCV, 'BC - west')
259 CALL LOCATION_CHECK (BC_I_E(BCV), I_E, BCV, 'BC - east')
260 ELSE
261 BC_I_W(BCV) = I_W
262 BC_I_E(BCV) = I_E
263 ENDIF
264 ENDIF
265
266
267 IF(BC_Y_S(BCV)/=UNDEFINED .AND. BC_Y_N(BCV)/=UNDEFINED) THEN
268
269 IF(NO_J) THEN
270 J_S = 1
271 J_N = 1
272 ELSE
273 CALL CALC_CELL (ZERO, BC_Y_S(BCV), DY, JMAX, J_S)
274 J_S = J_S + 1
275 CALL CALC_CELL (ZERO, BC_Y_N(BCV), DY, JMAX, J_N)
276
277 IF(BC_Y_S(BCV) == BC_Y_N(BCV)) THEN
278 IF(COMPARE(BC_Y_S(BCV),ZERO)) THEN
279 J_S = 1
280 J_N = 1
281 ELSE IF (COMPARE(BC_Y_S(BCV),YLENGTH)) THEN
282 J_S = JMAX2
283 J_N = JMAX2
284 ENDIF
285 ENDIF
286 ENDIF
287
288
289 IF(BC_J_S(BCV)/=UNDEFINED_I .OR. BC_J_N(BCV)/=UNDEFINED_I) THEN
290 CALL LOCATION_CHECK (BC_J_S(BCV), J_S, BCV, 'BC - south')
291 CALL LOCATION_CHECK (BC_J_N(BCV), J_N, BCV, 'BC - north')
292 ELSE
293 BC_J_S(BCV) = J_S
294 BC_J_N(BCV) = J_N
295 ENDIF
296 ENDIF
297
298 IF(BC_Z_B(BCV)/=UNDEFINED .AND. BC_Z_T(BCV)/=UNDEFINED) THEN
299
300 IF(NO_K)THEN
301 K_B = 1
302 K_T = 1
303 ELSE
304 CALL CALC_CELL (ZERO, BC_Z_B(BCV), DZ, KMAX, K_B)
305 K_B = K_B + 1
306 CALL CALC_CELL (ZERO, BC_Z_T(BCV), DZ, KMAX, K_T)
307
308 IF(BC_Z_B(BCV) == BC_Z_T(BCV)) THEN
309 IF(COMPARE(BC_Z_B(BCV),ZERO)) THEN
310 K_B = 1
311 K_T = 1
312 ELSEIF(COMPARE(BC_Z_B(BCV),ZLENGTH)) THEN
313 K_B = KMAX2
314 K_T = KMAX2
315 ENDIF
316 ENDIF
317 ENDIF
318
319
320 IF(BC_K_B(BCV)/=UNDEFINED_I .OR.BC_K_T(BCV)/=UNDEFINED_I) THEN
321 CALL LOCATION_CHECK (BC_K_B(BCV), K_B, BCV, 'BC - bottom')
322 CALL LOCATION_CHECK (BC_K_T(BCV), K_T, BCV, 'BC - top')
323 ELSE
324 BC_K_B(BCV) = K_B
325 BC_K_T(BCV) = K_T
326 ENDIF
327 ENDIF
328
329
330
331 = 0
332 IF (BC_K_B(BCV)<1 .OR. BC_K_B(BCV)>KMAX2) IER = 1
333 IF (BC_J_S(BCV)<1 .OR. BC_J_S(BCV)>JMAX2) IER = 1
334 IF (BC_I_W(BCV)<1 .OR. BC_I_W(BCV)>IMAX2) IER = 1
335 IF (BC_K_T(BCV)<1 .OR. BC_K_T(BCV)>KMAX2) IER = 1
336 IF (BC_J_N(BCV)<1 .OR. BC_J_N(BCV)>JMAX2) IER = 1
337 IF (BC_I_E(BCV)<1 .OR. BC_I_E(BCV)>IMAX2) IER = 1
338 IF (BC_K_B(BCV) > BC_K_T(BCV)) IER = 1
339 IF (BC_J_S(BCV) > BC_J_N(BCV)) IER = 1
340 IF (BC_I_W(BCV) > BC_I_E(BCV)) IER = 1
341
342 IF(IER /= 0)THEN
343 WRITE(ERR_MSG,1100) BCV, &
344 'X', BC_X_W(BCV), BC_X_E(BCV),'I',BC_I_W(BCV),BC_I_E(BCV), &
345 'Y', BC_Y_S(BCV), BC_Y_N(BCV),'J',BC_J_S(BCV),BC_J_N(BCV), &
346 'Z', BC_Z_B(BCV), BC_Z_T(BCV),'K',BC_K_B(BCV),BC_K_T(BCV)
347 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
348 ENDIF
349
350 1100 FORMAT('Error 1100: Invalid location specified for BC ',I3,'.', &
351 3(/3x,A1,': ',g12.5,',',g12.5,8x,A1,': ',I8,',',I8),/ &
352 'Please correct the mfix.dat file.')
353
354 CALL FINL_ERR_MSG
355
356 RETURN
357
358 END SUBROUTINE CHECK_BC_GEOMETRY_WALL
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388 SUBROUTINE CHECK_BC_GEOMETRY_FLOW(BCV)
389
390
391
392
393 USE param
394 USE param1
395 USE geometry
396 USE fldvar
397 USE physprop
398 USE bc
399 USE indices
400 USE funits
401 USE compar
402 USE sendrecv
403
404 use error_manager
405
406 IMPLICIT NONE
407
408
409
410
411
412
413 INTEGER, INTENT(in) :: BCV
414
415
416 INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
417
418 INTEGER :: IER
419
420
421
422
423
424 LOGICAL :: X_CONSTANT, Y_CONSTANT, Z_CONSTANT
425
426
427 CALL INIT_ERR_MSG("CHECK_BC_GEOMETRY_FLOW")
428
429 X_CONSTANT = .TRUE.
430 Y_CONSTANT = .TRUE.
431 Z_CONSTANT = .TRUE.
432
433 IF (BC_X_W(BCV)/=UNDEFINED .AND. BC_X_E(BCV)/=UNDEFINED) THEN
434 CALL CALC_CELL (XMIN, BC_X_W(BCV), DX, IMAX, I_W)
435 CALL CALC_CELL (XMIN, BC_X_E(BCV), DX, IMAX, I_E)
436 IF (BC_X_W(BCV) /= BC_X_E(BCV)) THEN
437 X_CONSTANT = .FALSE.
438 I_W = I_W + 1
439 IF(BC_I_W(BCV)/=UNDEFINED_I.OR.BC_I_E(BCV)/=UNDEFINED_I)THEN
440 CALL LOCATION_CHECK (BC_I_W(BCV), I_W, BCV, 'BC - west')
441 CALL LOCATION_CHECK (BC_I_E(BCV), I_E, BCV, 'BC - east')
442 ENDIF
443 ENDIF
444 BC_I_W(BCV) = I_W
445 BC_I_E(BCV) = I_E
446 ELSE
447 IF(BC_I_W(BCV) /= UNDEFINED_I) &
448 CALL CALC_LOC (XMIN,DX,BC_I_W(BCV),BC_X_W(BCV))
449 IF(BC_I_E(BCV) /= UNDEFINED_I) &
450 CALL CALC_LOC (XMIN,DX,BC_I_E(BCV),BC_X_E(BCV))
451 IF(BC_X_W(BCV) /= BC_X_E(BCV)) X_CONSTANT = .FALSE.
452 ENDIF
453
454
455 IF(NO_I) THEN
456 BC_I_W(BCV) = 1
457 BC_I_E(BCV) = 1
458 ENDIF
459
460 IF (BC_Y_S(BCV)/=UNDEFINED .AND. BC_Y_N(BCV)/=UNDEFINED) THEN
461 CALL CALC_CELL (ZERO, BC_Y_S(BCV), DY, JMAX, J_S)
462 CALL CALC_CELL (ZERO, BC_Y_N(BCV), DY, JMAX, J_N)
463 IF(BC_Y_S(BCV) /= BC_Y_N(BCV)) THEN
464 Y_CONSTANT = .FALSE.
465 J_S = J_S + 1
466 IF(BC_J_S(BCV)/=UNDEFINED_I.OR.BC_J_N(BCV)/=UNDEFINED_I)THEN
467 CALL LOCATION_CHECK (BC_J_S(BCV), J_S, BCV, 'BC - south')
468 CALL LOCATION_CHECK (BC_J_N(BCV), J_N, BCV, 'BC - north')
469 ENDIF
470 ENDIF
471 BC_J_S(BCV) = J_S
472 BC_J_N(BCV) = J_N
473 ELSE
474 IF(BC_J_S(BCV) /= UNDEFINED_I) &
475 CALL CALC_LOC (ZERO,DY,BC_J_S(BCV),BC_Y_S(BCV))
476 IF(BC_J_N(BCV) /= UNDEFINED_I) &
477 CALL CALC_LOC (ZERO,DY,BC_J_N(BCV),BC_Y_N(BCV))
478 IF (BC_Y_S(BCV) /= BC_Y_N(BCV)) Y_CONSTANT = .FALSE.
479 ENDIF
480
481
482 IF(NO_J) THEN
483 BC_J_S(BCV) = 1
484 BC_J_N(BCV) = 1
485 ENDIF
486
487 IF(BC_Z_B(BCV)/=UNDEFINED .AND. BC_Z_T(BCV)/=UNDEFINED) THEN
488 CALL CALC_CELL (ZERO, BC_Z_B(BCV), DZ, KMAX, K_B)
489 CALL CALC_CELL (ZERO, BC_Z_T(BCV), DZ, KMAX, K_T)
490 IF(BC_Z_B(BCV) /= BC_Z_T(BCV)) THEN
491 Z_CONSTANT = .FALSE.
492 K_B = K_B + 1
493 IF(BC_K_B(BCV)/=UNDEFINED_I.OR.BC_K_T(BCV)/=UNDEFINED_I)THEN
494 CALL LOCATION_CHECK (BC_K_B(BCV), K_B, BCV, 'BC - bottom')
495 CALL LOCATION_CHECK (BC_K_T(BCV), K_T, BCV, 'BC - top')
496 ENDIF
497 ENDIF
498 BC_K_B(BCV) = K_B
499 BC_K_T(BCV) = K_T
500 ELSE
501 IF(BC_K_B(BCV) /= UNDEFINED_I) &
502 CALL CALC_LOC (ZERO,DZ,BC_K_B(BCV),BC_Z_B(BCV))
503 IF(BC_K_T(BCV) /= UNDEFINED_I) &
504 CALL CALC_LOC (ZERO,DZ,BC_K_T(BCV),BC_Z_T(BCV))
505 IF(BC_Z_B(BCV) /= BC_Z_T(BCV)) Z_CONSTANT = .FALSE.
506 ENDIF
507
508
509 IF(NO_K) THEN
510 BC_K_B(BCV) = 1
511 BC_K_T(BCV) = 1
512 ENDIF
513
514
515
516 IF(BC_X_W(BCV)/=UNDEFINED .AND. BC_Y_S(BCV)/=UNDEFINED .AND. &
517 BC_Z_B(BCV)/=UNDEFINED) CALL CHECK_PLANE (X_CONSTANT, &
518 Y_CONSTANT, Z_CONSTANT, BCV, 'BC')
519
520
521
522 = 0
523 IF(BC_I_W(BCV)<1 .OR. BC_I_W(BCV)>IMAX2) IER = 1
524 IF(BC_I_E(BCV)<1 .OR. BC_I_E(BCV)>IMAX2) IER = 1
525 IF(BC_J_S(BCV)<1 .OR. BC_J_S(BCV)>JMAX2) IER = 1
526 IF(BC_J_N(BCV)<1 .OR. BC_J_N(BCV)>JMAX2) IER = 1
527 IF(BC_K_B(BCV)<1 .OR. BC_K_B(BCV)>KMAX2) IER = 1
528 IF(BC_K_T(BCV)<1 .OR. BC_K_T(BCV)>KMAX2) IER = 1
529 IF(BC_K_B(BCV) > BC_K_T(BCV)) IER = 1
530 IF(BC_J_S(BCV) > BC_J_N(BCV)) IER = 1
531 IF(BC_I_W(BCV) > BC_I_E(BCV)) IER = 1
532
533 IF(IER /= 0)THEN
534 WRITE(ERR_MSG,1100) BCV, &
535 'X', BC_X_W(BCV), BC_X_E(BCV),'I',BC_I_W(BCV),BC_I_E(BCV), &
536 'Y', BC_Y_S(BCV), BC_Y_N(BCV),'J',BC_J_S(BCV),BC_J_N(BCV), &
537 'Z', BC_Z_B(BCV), BC_Z_T(BCV),'K',BC_K_B(BCV),BC_K_T(BCV)
538 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
539 ENDIF
540
541 1100 FORMAT('Error 1100: Invalid location specified for BC ',I3,'.', &
542 3(/3x,A1,': ',g12.5,',',g12.5,8x,A1,': ',I8,',',I8),/ &
543 'Please correct the mfix.dat file.')
544
545 CALL FINL_ERR_MSG
546
547 RETURN
548
549 END SUBROUTINE CHECK_BC_GEOMETRY_FLOW
550