File: RELATIVE:/../../../mfix.git/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
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 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 (TRIM(BC_TYPE(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(BCV) /= 'DUMMY' .AND. &
128 BC_TYPE(BCV)(1:2) /= 'CG') THEN
129
130 CALL CHECK_BC_RANGE(BCV)
131
132 ENDIF
133 ENDDO
134
135 IF(DEM_SOLIDS) CALL CHECK_BC_DEM(MMAX_TOT)
136
137 IF(PIC_SOLIDS) CALL CHECK_BC_PIC(MMAX_TOT)
138
139
140 CALL FINL_ERR_MSG
141
142 RETURN
143
144 END SUBROUTINE CHECK_BOUNDARY_CONDITIONS
145
146
147
148
149
150
151
152
153
154
155
156 SUBROUTINE CHECK_BC_RANGE(BCV)
157
158
159
160
161 use bc, only: BC_EP_g, BC_T_g, BC_X_g, BC_P_g
162 use bc, only: BC_U_g, BC_V_g, BC_W_g
163
164 USE bc, only: BC_EP_s, BC_ROP_s, BC_T_s, BC_X_s
165 use bc, only: BC_U_s, BC_V_s, BC_W_s
166
167 USE bc, only: BC_SCALAR
168
169
170
171
172
173 use param1, only: UNDEFINED
174
175 use param, only: DIM_M
176
177 use param, only: DIMENSION_N_G, DIMENSION_N_S
178
179 use param, only: DIM_SCALAR
180
181
182
183
184 use error_manager
185
186
187 IMPLICIT NONE
188
189
190
191
192
193 INTEGER, INTENT(in) :: BCV
194
195
196
197
198 INTEGER :: M, N
199
200
201
202
203 CALL INIT_ERR_MSG("CHECK_BC_RANGE")
204
205
206
207 IF(BC_U_G(BCV) /= UNDEFINED) THEN
208 WRITE(ERR_MSG,1100) trim(iVar('BC_U_g',BCV))
209 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
210 ENDIF
211 IF(BC_V_G(BCV) /= UNDEFINED) THEN
212 WRITE(ERR_MSG,1100) trim(iVar('BC_V_g',BCV))
213 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
214 ENDIF
215 IF (BC_W_G(BCV) /= UNDEFINED) THEN
216 WRITE(ERR_MSG,1100) trim(iVar('BC_W_g',BCV))
217 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
218 ENDIF
219 IF (BC_EP_G(BCV) /= UNDEFINED) THEN
220 WRITE(ERR_MSG,1100) trim(iVar('BC_EP_g',BCV))
221 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
222 ENDIF
223 IF (BC_P_G(BCV) /= UNDEFINED) THEN
224 WRITE(ERR_MSG,1100) trim(iVar('BC_P_g',BCV))
225 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
226 ENDIF
227 IF (BC_T_G(BCV) /= UNDEFINED) THEN
228 WRITE(ERR_MSG,1100) trim(iVar('BC_T_g',BCV))
229 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
230 ENDIF
231
232 DO N = 1, DIMENSION_N_G
233 IF(BC_X_G(BCV,N) /= UNDEFINED) THEN
234 WRITE(ERR_MSG,1100) trim(iVar('BC_X_g',BCV,N))
235 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
236 ENDIF
237 ENDDO
238
239
240 DO M = 1, DIM_M
241 IF(BC_ROP_S(BCV,M) /= UNDEFINED) THEN
242 WRITE(ERR_MSG,1100) trim(iVar('BC_ROP_s',BCV,M))
243 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
244 ENDIF
245 IF(BC_EP_S(BCV,M) /= UNDEFINED) THEN
246 WRITE(ERR_MSG,1100) trim(iVar('BC_EP_s',BCV,M))
247 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
248 ENDIF
249 IF(BC_U_S(BCV,M) /= UNDEFINED) THEN
250 WRITE(ERR_MSG,1100) trim(iVar('BC_U_s',BCV,M))
251 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
252 ENDIF
253 IF(BC_V_S(BCV,M) /= UNDEFINED) THEN
254 WRITE(ERR_MSG,1100) trim(iVar('BC_V_s',BCV,M))
255 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
256 ENDIF
257
258 IF(BC_W_S(BCV,M) /= UNDEFINED) THEN
259 WRITE(ERR_MSG,1100) trim(iVar('BC_W_s',BCV,M))
260 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
261 ENDIF
262 IF(BC_T_S(BCV,M) /= UNDEFINED) THEN
263 WRITE(ERR_MSG,1100) trim(iVar('BC_T_s',BCV,M))
264 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
265 ENDIF
266
267 DO N = 1, DIMENSION_N_S
268 IF(BC_X_S(BCV,M,N) /= UNDEFINED) THEN
269 WRITE(ERR_MSG,1100) trim(iVar('BC_X_s',BCV,M,N))
270 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
271 ENDIF
272 ENDDO
273
274 ENDDO
275
276
277 DO N = 1, DIM_SCALAR
278 IF(BC_Scalar(BCV,N) /= UNDEFINED) THEN
279 WRITE(ERR_MSG,1100) trim(iVar('BC_Scalar',BCV))
280 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
281 ENDIF
282 ENDDO
283
284
285 CALL FINL_ERR_MSG
286
287
288 RETURN
289
290 1100 FORMAT('Error 1100:',A,' specified for an undefined BC location')
291
292 END SUBROUTINE CHECK_BC_RANGE
293