File: N:\mfix\model\check_data\check_boundary_conditions.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SUBROUTINE CHECK_BOUNDARY_CONDITIONS
16
17
18
19
20 use physprop, only: SMAX, MMAX
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 use run, only: DEM_SOLIDS
34
35 use run, only: PIC_SOLIDS
36
37
38
39
40 use param1, only: ZERO, ONE, UNDEFINED
41
42 use param, only: DIMENSION_BC
43
44 use param, only: DIM_M
45
46
47
48 use error_manager
49
50
51 IMPLICIT NONE
52
53
54
55
56
57 INTEGER :: BCV
58
59 INTEGER :: MMAX_TOT
60
61 LOGICAL :: SKIP(1:DIM_M)
62
63
64
65
66 CALL INIT_ERR_MSG("CHECK_BOUNDARY_CONDITIONS")
67
68
69 CALL CHECK_BC_GEOMETRY
70
71
72 = SMAX + DES_MMAX
73
74
75 DO BCV = 1, DIMENSION_BC
76
77 IF (BC_DEFINED(BCV)) THEN
78
79
80 =(BC_ROP_S(BCV,:)==UNDEFINED.OR.BC_ROP_S(BCV,:)==ZERO) &
81 .AND.(BC_EP_S(BCV,:)==UNDEFINED.OR.BC_EP_S(BCV,:)==ZERO)
82
83 IF(MMAX_TOT == 1 .AND. BC_EP_g(BCV)/=ONE) SKIP(1) = .FALSE.
84
85 SELECT CASE (BC_TYPE_ENUM(BCV))
86
87 CASE (MASS_INFLOW)
88 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
89 CALL CHECK_BC_MASS_INFLOW(MMAX_TOT, SKIP, BCV)
90 CALL CHECK_BC_INFLOW(MMAX_TOT,SKIP,BCV)
91
92 CASE (P_INFLOW)
93 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
94 CALL CHECK_BC_P_INFLOW(MMAX_TOT, SKIP, BCV)
95 CALL CHECK_BC_INFLOW(MMAX_TOT, SKIP, BCV)
96 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
97
98 CASE (OUTFLOW)
99 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
100 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
101
102 CASE (MASS_OUTFLOW)
103 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
104 CALL CHECK_BC_MASS_OUTFLOW(MMAX_TOT, BCV)
105 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
106
107 CASE (P_OUTFLOW)
108 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
109 CALL CHECK_BC_P_OUTFLOW(MMAX_TOT, BCV)
110 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
111
112 CASE (FREE_SLIP_WALL)
113 CALL CHECK_BC_GEOMETRY_WALL(BCV)
114 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
115
116 CASE (NO_SLIP_WALL)
117 CALL CHECK_BC_GEOMETRY_WALL(BCV)
118 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
119
120 CASE (PAR_SLIP_WALL)
121 CALL CHECK_BC_GEOMETRY_WALL(BCV)
122 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
123
124 END SELECT
125
126
127 ELSEIF(BC_TYPE_ENUM(BCV) /= DUMMY .AND. &
128 .NOT.IS_CG(BC_TYPE_ENUM(BCV))) THEN
129
130 CALL CHECK_BC_RANGE(BCV)
131
132 ENDIF
133 ENDDO
134
135 MMAX_TOT = MMAX+DES_MMAX
136
137 IF(DEM_SOLIDS) CALL CHECK_BC_DEM(MMAX_TOT)
138
139 IF(PIC_SOLIDS) CALL CHECK_BC_PIC(MMAX_TOT)
140
141
142 CALL FINL_ERR_MSG
143
144 RETURN
145
146 END SUBROUTINE CHECK_BOUNDARY_CONDITIONS
147
148
149
150
151
152
153
154
155
156
157
158 SUBROUTINE CHECK_BC_RANGE(BCV)
159
160
161
162
163 use bc, only: BC_EP_g, BC_T_g, BC_X_g, BC_P_g
164 use bc, only: BC_U_g, BC_V_g, BC_W_g
165
166 USE bc, only: BC_EP_s, BC_ROP_s, BC_T_s, BC_X_s
167 use bc, only: BC_U_s, BC_V_s, BC_W_s
168
169 USE bc, only: BC_SCALAR
170
171
172
173
174
175 use param1, only: UNDEFINED
176
177 use param, only: DIM_M
178
179 use param, only: DIMENSION_N_G, DIMENSION_N_S
180
181 use param, only: DIM_SCALAR
182
183
184
185
186 use error_manager
187
188
189 IMPLICIT NONE
190
191
192
193
194
195 INTEGER, INTENT(in) :: BCV
196
197
198
199
200 INTEGER :: M, N
201
202
203
204
205 CALL INIT_ERR_MSG("CHECK_BC_RANGE")
206
207
208
209 IF(BC_U_G(BCV) /= UNDEFINED) THEN
210 WRITE(ERR_MSG,1100) trim(iVar('BC_U_g',BCV))
211 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
212 ENDIF
213 IF(BC_V_G(BCV) /= UNDEFINED) THEN
214 WRITE(ERR_MSG,1100) trim(iVar('BC_V_g',BCV))
215 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
216 ENDIF
217 IF (BC_W_G(BCV) /= UNDEFINED) THEN
218 WRITE(ERR_MSG,1100) trim(iVar('BC_W_g',BCV))
219 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
220 ENDIF
221 IF (BC_EP_G(BCV) /= UNDEFINED) THEN
222 WRITE(ERR_MSG,1100) trim(iVar('BC_EP_g',BCV))
223 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
224 ENDIF
225 IF (BC_P_G(BCV) /= UNDEFINED) THEN
226 WRITE(ERR_MSG,1100) trim(iVar('BC_P_g',BCV))
227 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
228 ENDIF
229 IF (BC_T_G(BCV) /= UNDEFINED) THEN
230 WRITE(ERR_MSG,1100) trim(iVar('BC_T_g',BCV))
231 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
232 ENDIF
233
234 DO N = 1, DIMENSION_N_G
235 IF(BC_X_G(BCV,N) /= UNDEFINED) THEN
236 WRITE(ERR_MSG,1100) trim(iVar('BC_X_g',BCV,N))
237 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
238 ENDIF
239 ENDDO
240
241
242 DO M = 1, DIM_M
243 IF(BC_ROP_S(BCV,M) /= UNDEFINED) THEN
244 WRITE(ERR_MSG,1100) trim(iVar('BC_ROP_s',BCV,M))
245 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
246 ENDIF
247 IF(BC_EP_S(BCV,M) /= UNDEFINED) THEN
248 WRITE(ERR_MSG,1100) trim(iVar('BC_EP_s',BCV,M))
249 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
250 ENDIF
251 IF(BC_U_S(BCV,M) /= UNDEFINED) THEN
252 WRITE(ERR_MSG,1100) trim(iVar('BC_U_s',BCV,M))
253 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
254 ENDIF
255 IF(BC_V_S(BCV,M) /= UNDEFINED) THEN
256 WRITE(ERR_MSG,1100) trim(iVar('BC_V_s',BCV,M))
257 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
258 ENDIF
259
260 IF(BC_W_S(BCV,M) /= UNDEFINED) THEN
261 WRITE(ERR_MSG,1100) trim(iVar('BC_W_s',BCV,M))
262 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
263 ENDIF
264 IF(BC_T_S(BCV,M) /= UNDEFINED) THEN
265 WRITE(ERR_MSG,1100) trim(iVar('BC_T_s',BCV,M))
266 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
267 ENDIF
268
269 DO N = 1, DIMENSION_N_S
270 IF(BC_X_S(BCV,M,N) /= UNDEFINED) THEN
271 WRITE(ERR_MSG,1100) trim(iVar('BC_X_s',BCV,M,N))
272 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
273 ENDIF
274 ENDDO
275
276 ENDDO
277
278
279 DO N = 1, DIM_SCALAR
280 IF(BC_Scalar(BCV,N) /= UNDEFINED) THEN
281 WRITE(ERR_MSG,1100) trim(iVar('BC_Scalar',BCV))
282 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
283 ENDIF
284 ENDDO
285
286
287 CALL FINL_ERR_MSG
288
289
290 RETURN
291
292 1100 FORMAT('Error 1100:',A,' specified for an undefined BC location')
293
294 END SUBROUTINE CHECK_BC_RANGE
295