File: /nfs/home/0/users/jenkins/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 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 use run, only: DEM_SOLIDS
36
37 use run, only: PIC_SOLIDS
38
39
40
41
42 use param1, only: ZERO, ONE, UNDEFINED
43
44 use param, only: DIMENSION_BC
45
46 use param, only: DIM_M
47
48
49
50 use error_manager
51
52
53 IMPLICIT NONE
54
55
56
57
58
59 INTEGER :: BCV
60
61 INTEGER :: MMAX_TOT
62
63 LOGICAL :: SKIP(1:DIM_M)
64
65
66
67
68 CALL INIT_ERR_MSG("CHECK_BOUNDARY_CONDITIONS")
69
70
71 CALL CHECK_BC_GEOMETRY
72
73
74 = SMAX + DES_MMAX
75
76
77 DO BCV = 1, DIMENSION_BC
78
79 IF (BC_DEFINED(BCV)) THEN
80
81
82 =(BC_ROP_S(BCV,:)==UNDEFINED.OR.BC_ROP_S(BCV,:)==ZERO) &
83 .AND.(BC_EP_S(BCV,:)==UNDEFINED.OR.BC_EP_S(BCV,:)==ZERO)
84
85 IF(MMAX_TOT == 1 .AND. BC_EP_g(BCV)/=ONE) SKIP(1) = .FALSE.
86
87 SELECT CASE (TRIM(BC_TYPE(BCV)))
88
89 CASE ('MASS_INFLOW')
90 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
91 CALL CHECK_BC_MASS_INFLOW(MMAX_TOT, SKIP, BCV)
92 CALL CHECK_BC_INFLOW(MMAX_TOT,SKIP,BCV)
93
94 CASE ('P_INFLOW')
95 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
96 CALL CHECK_BC_P_INFLOW(MMAX_TOT, SKIP, BCV)
97 CALL CHECK_BC_INFLOW(MMAX_TOT, SKIP, BCV)
98 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
99
100 CASE ('OUTFLOW')
101 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
102 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
103
104 CASE ('MASS_OUTFLOW')
105 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
106 CALL CHECK_BC_MASS_OUTFLOW(MMAX_TOT, BCV)
107 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
108
109 CASE ('P_OUTFLOW')
110 CALL CHECK_BC_GEOMETRY_FLOW(BCV)
111 CALL CHECK_BC_P_OUTFLOW(MMAX_TOT, BCV)
112 CALL CHECK_BC_OUTFLOW(MMAX_TOT, BCV)
113
114 CASE ('FREE_SLIP_WALL')
115 CALL CHECK_BC_GEOMETRY_WALL(BCV)
116 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
117
118 CASE ('NO_SLIP_WALL')
119 CALL CHECK_BC_GEOMETRY_WALL(BCV)
120 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
121
122 CASE ('PAR_SLIP_WALL')
123 CALL CHECK_BC_GEOMETRY_WALL(BCV)
124 CALL CHECK_BC_WALLS(MMAX_TOT, SKIP, BCV)
125
126 END SELECT
127
128
129 ELSEIF(BC_TYPE(BCV) /= 'DUMMY' .AND. &
130 BC_TYPE(BCV)(1:2) /= 'CG') THEN
131
132 CALL CHECK_BC_RANGE(BCV)
133
134 ENDIF
135 ENDDO
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