File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_bc_outflow.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     ! Subroutine: CHECK_BC_OUTFLOW                                         !
4     ! Author: J.Musser                                    Date: 01-Mar-14  !
5     !                                                                      !
6     ! Purpose: Provided a detailed error message concerning specification  !
7     ! of bc_ep_g + bc_rop_s at a outflow boundary (and pressure inflow)    !
8     !                                                                      !
9     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
10           SUBROUTINE CHECK_BC_OUTFLOW(M_TOT, BCV)
11     
12     ! Modules
13     ! --------------------------------------------------------------------//
14           use bc, only: bc_ep_g, bc_rop_s, bc_ep_s
15           use param1, only: one, undefined, zero
16           use physprop, only: ro_s0
17           use discretelement, only: discrete_element
18           use run, only: solids_model
19           use toleranc, only: compare
20           use error_manager
21     
22           IMPLICIT NONE
23     
24     ! Dummy arguments
25     ! --------------------------------------------------------------------//
26     ! loop/variable indices
27           INTEGER, INTENT(in) :: BCV
28           INTEGER, INTENT(in) :: M_TOT
29     
30     ! Local variables
31     ! --------------------------------------------------------------------//
32           INTEGER :: M
33           DOUBLE PRECISION :: SUM_EP
34           LOGICAL :: FLAG_WARNING
35     
36           FLAG_WARNING = .TRUE.
37           CALL INIT_ERR_MSG("CHECK_BC_OUTFLOW")
38     
39     ! if bc_ep_g is defined at the outflow boundary, then the sum of ep_g
40     ! and ep_s at the boundary may not equal one given the code in the
41     ! subroutine set_outflow (see code for details). 
42     ! therefore if bc_ep_g and/or bc_rop_s are defined, perform possible
43     ! data consistency checks and, when appropriate, provide the user with 
44     ! a warning about their chosen settings.
45     
46           IF (BC_EP_G(BCV) /= UNDEFINED) THEN
47     
48              SUM_EP = BC_EP_G(BCV)
49              DO M = 1, M_TOT
50     
51                 IF(SOLIDS_MODEL(M) /= 'TFM' .AND. FLAG_WARNING) THEN 
52                    WRITE(ERR_MSG, 1101) trim(iVar('BC_EP_g',BCV))
53                    FLAG_WARNING = .FALSE.
54                 ENDIF
55     
56                 IF(BC_ROP_S(BCV,M) == UNDEFINED) THEN
57     
58                    IF(BC_EP_G(BCV) == ONE) THEN
59     ! what does it mean to force the bulk density to zero at the
60     ! boundary? (does this value matter anyway?)
61                       BC_ROP_S(BCV,M) = ZERO
62                    ELSEIF(M_TOT == 1 ) THEN
63                       BC_ROP_S(BCV,M) = (ONE - BC_EP_G(BCV))*RO_S0(M)
64                    ELSE
65     ! bc_ep_g is defined but some bc_rop_s(m) are undefined.
66     ! in this case, ep_p in the outflow boundary will be based on the user
67     ! defined value of bc_ep_g, while rop_s would become based on the 
68     ! value in the adjacent fluid cell. consequently, no check ensures 
69     ! the result is consistent with a requirement for ep_g+ep_s=1.
70                       WRITE(ERR_MSG, 1102) trim(iVar('BC_EP_g',BCV))
71                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
72      1102 FORMAT('Warning 1102: Volume fraction may not sum to one when ',/&
73              A,' is defined.')
74                    ENDIF
75                 ENDIF  ! end if(bc_rop_s(bcv,m) == undefined)
76                    
77     ! by this point bc_rop_s should either be defined or mfix exited
78     ! therefore we can check that sum of void fraction and solids volume
79     ! fractions
80                 SUM_EP = SUM_EP + BC_ROP_S(BCV,M)/RO_S0(M)
81             ENDDO
82     
83     ! now verify that the volume fractions sum to one.
84             IF(.NOT.COMPARE(SUM_EP,ONE)) THEN
85                WRITE(ERR_MSG,1103) BCV, trim(iVal(SUM_EP))
86                CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
87            ENDIF
88     
89     ! bc_ep_g is not defined but check if any bc_rop_s are defined
90           ELSE
91     
92              SUM_EP = ZERO
93              DO M = 1, M_TOT
94                 IF(BC_ROP_S(BCV,M) /= UNDEFINED) THEN
95                    IF(SOLIDS_MODEL(M) /= 'TFM') THEN 
96                       WRITE(ERR_MSG, 1101) trim(iVar('BC_ROP_s',BCV,M))
97                    ENDIF
98                    SUM_EP = SUM_EP + BC_ROP_S(BCV,M)/RO_S0(M)
99                 ENDIF
100              ENDDO
101     
102     ! verify that the sum of any specified volume fractions is not greater
103     ! than one
104              IF(SUM_EP > ONE) THEN
105                 WRITE(ERR_MSG,1103) BCV, trim(iVal(SUM_EP))
106                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
107              ENDIF
108     
109           ENDIF
110     
111           CALL FINL_ERR_MSG
112     
113           RETURN
114     
115      1101 FORMAT('Warning 1101: ',A,' should not be specified for ', &
116              'outflow BCs',/'with DEM/PIC runs except for a mass outflow ',&
117              'boundary with specified ',/ 'flow rate(s). In this case ',& 
118              'volume fraction data is used for ',/ 'conversion to ',&
119              'velocity(s). However, the solids volume fraction data ',/&
120              'is effectively disregarded and it is the solids velocity ',&
121              'that is ',/'used to direct any solids at the boundary.')
122     
123      1103 FORMAT('Error 1103: Illegal boundary condition region: ',I3,'. ',&
124              'Sum of volume',/'fractions does NOT equal ONE. (SUM = ',A,   &
125              ')',/'Please correct the mfix.dat file.')
126      
127           END SUBROUTINE CHECK_BC_OUTFLOW
128     
129     
130     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
131     !                                                                      !
132     ! Subroutine: CHECK_BC_P_OUTFLOW                                       !
133     ! Author: J.Musser                                    Date: 01-Mar-14  !
134     !                                                                      !
135     ! Purpose: Provided a detailed error message on bc                     !
136     !                                                                      !
137     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
138           SUBROUTINE CHECK_BC_P_OUTFLOW(M_TOT, BCV)
139     
140     ! Modules
141     ! --------------------------------------------------------------------//
142           USE param, only: DIM_M
143           USE param1, only: UNDEFINED
144           USE param1, only: ZERO
145           use physprop, only: RO_g0
146           use bc, only: BC_P_g
147           use error_manager
148           IMPLICIT NONE
149     
150     ! Dummy arguments
151     ! --------------------------------------------------------------------//
152     ! loop/variable indices
153           INTEGER, INTENT(in) :: BCV
154           INTEGER, INTENT(in) :: M_TOT
155     ! --------------------------------------------------------------------//
156     
157           CALL INIT_ERR_MSG("CHECK_BC_P_OUTFLOW")
158     
159           IF (BC_P_G(BCV) == UNDEFINED) THEN
160              WRITE(ERR_MSG,1000) trim(iVar('BC_P_g',BCV))
161              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
162     
163           ELSEIF (BC_P_G(BCV)<=ZERO .AND. RO_G0==UNDEFINED) THEN
164              WRITE(ERR_MSG, 1100) BCV, trim(iVal(BC_P_G(BCV)))
165              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
166           ENDIF
167     
168      1100 FORMAT('Error 1100: Pressure must be greater than zero for ',    &
169              'compressible flow',/3x,'BC_P_g(',I3,') = ',A,/'Please ',     &
170              'correct the mfix.dat file.')
171     
172     ! Clean up and return.
173           CALL FINL_ERR_MSG
174     
175           RETURN
176     
177      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
178              'correct the mfix.dat file.')
179     
180           END SUBROUTINE CHECK_BC_P_OUTFLOW
181     
182     
183     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
184     !                                                                      !
185     ! Subroutine: CHECK_BC_MASS_OUTFLOW                                    !
186     ! Author: J.Musser                                    Date: 01-Mar-14  !
187     !                                                                      !
188     ! Purpose: Provided a detailed error message when the sum of volume    !
189     !                                                                      !
190     ! Comments:                                                            !
191     !     The velocities at the outflow face are fixed and the momentum    !
192     !     equations are not solved in the outflow cells. Since the flow    !
193     !     is out of the domain none of the other scalars should need to    !
194     !     be specified (e.g., mass fractions, void fraction, etc.,).       !
195     !     Such values will become defined according to their adjacent      !
196     !     fluid cell                                                       !
197     !                                                                      !
198     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
199           SUBROUTINE CHECK_BC_MASS_OUTFLOW(M_TOT, BCV)
200     
201     ! Modules
202     ! --------------------------------------------------------------------//
203           use bc, only: bc_plane
204           use bc, only: bc_dt_0, bc_massflow_g, bc_volflow_g
205           use bc, only: bc_massflow_s, bc_volflow_s
206           use bc, only: bc_ep_g, bc_rop_s 
207           use bc, only: bc_p_g, bc_t_g
208           use bc, only: bc_u_g, bc_v_g, bc_w_g
209           use physprop, only: ro_g0
210           use param1, only: undefined, zero
211           use error_manager
212           IMPLICIT NONE
213     
214     ! Dummy arguments 
215     ! --------------------------------------------------------------------//
216     ! loop/variable indices
217           INTEGER, intent(in) :: BCV
218           INTEGER, intent(in) :: M_TOT
219     ! Local variables
220     ! --------------------------------------------------------------------//
221           INTEGER :: M
222     
223     
224           CALL INIT_ERR_MSG("CHECK_BC_MASS_OUTFLOW")
225     
226           IF(BC_DT_0(BCV) == UNDEFINED) THEN
227              WRITE(ERR_MSG, 1000) trim(iVar('BC_DT_0',BCV))
228              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
229           ENDIF
230     
231           IF(BC_MASSFLOW_G(BCV) /= UNDEFINED .OR. &
232              BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
233              IF (BC_EP_G(BCV) == UNDEFINED) THEN
234                 WRITE(ERR_MSG,1101) trim(iVar('BC_EP_G',BCV))
235                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
236              ENDIF
237      1101 FORMAT('Error 1101: Invalid mass outflow boundary condition: ', /&
238              'BC_MASSFLOW_G and/or BC_VOLFLOW_G are DEFINED but ',&
239              A,' is not ',/'Please correct the mfix.dat file.')
240           ENDIF
241           
242           DO M = 1, M_TOT
243              IF(BC_MASSFLOW_S(BCV,M) /= UNDEFINED .OR. &
244                 BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
245                 WRITE(ERR_MSG,1102) trim(iVar('BC_MASSFLOW_S',BCV,M)), &
246                    trim(iVar('BC_VOLFLOW_S',BCV,M))
247      1102 FORMAT('Warning 1102: ', A,' and/or ', A,' have been defined',/&
248              'at a mass outflow boundary. A specified solids flow ',&
249              'rate may not be ',/'physically achievable depending on the ',&
250              'system and simulation ',/'setup.')
251     
252                  IF (BC_ROP_S(BCV,M) == UNDEFINED) THEN
253                     WRITE(ERR_MSG,1103) trim(iVar('BC_ROP_S',BCV,M))
254                     CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
255                  ENDIF
256      1103 FORMAT('Error 1103: Invalid mass outflow boundary condition: ', /&
257              'BC_MASSFLOW_S and/or BC_VOLFLOW_S are DEFINED but ',&
258              A,' is not ',/'Please correct the mfix.dat file.')
259      
260              ENDIF
261           ENDDO
262             
263     ! This check probably needs changed.
264           IF(RO_G0 == UNDEFINED .AND. (BC_P_G(BCV) == UNDEFINED .OR.       &
265              BC_T_G(BCV) == UNDEFINED) .AND.BC_MASSFLOW_G(BCV) /= ZERO) THEN
266     
267              IF(BC_PLANE(BCV)=='W' .OR. BC_PLANE(BCV)=='E') THEN
268                 IF(BC_U_G(BCV) /= ZERO) THEN
269                    WRITE(ERR_MSG, 1100) BCV, 'BC_U_g'
270                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
271                 ENDIF
272              ELSEIF(BC_PLANE(BCV)=='N' .OR. BC_PLANE(BCV)=='S') THEN
273                 IF(BC_V_G(BCV) /= ZERO) THEN
274                    WRITE(ERR_MSG, 1100) BCV, 'BC_V_g'
275                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
276                 ENDIF
277              ELSEIF (BC_PLANE(BCV)=='T' .OR. BC_PLANE(BCV)=='B') THEN
278                 IF(BC_W_G(BCV) /= ZERO) THEN
279                    WRITE(ERR_MSG, 1100)  BCV, 'BC_W_g'
280                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
281                 ENDIF
282              ENDIF
283           ENDIF   ! end if/else (ro_g0 /=undefined)
284     
285      1100 FORMAT('Error 1100: Invalid mass outflow boundary condition: ',  &
286              I3,/'RO_g0, BC_P_g, and BC_T_g are UNDEFINED and ',A,' is ',  &
287              'non-zero',/'Please correct the mfix.dat file.')
288     
289     
290           CALL FINL_ERR_MSG
291     
292           RETURN
293     
294      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
295              'correct the mfix.dat file.')
296     
297           END SUBROUTINE CHECK_BC_MASS_OUTFLOW
298