File: N:\mfix\model\flow_to_vel.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: FLOW_TO_VEL_NEW                                         !
4     !  Author: M. Syamlal                                 Date: 28-JUL-92  !
5     !                                                                      !
6     !  Purpose: Convert volumetric and mass flow rates to velocities       !
7     !     A specified mass flow rate is first converted to volumetric      !
8     !     flow rate. The volumetric flow rate is then converted to a       !
9     !     velocity.                                                        !
10     !                                                                      !
11     !    When both flow rates and velocities are specified, a consistency  !
12     !    check is done. The first time flow_to_vel is called in by setting !
13     !    the logical DO_VEL_CHECK to .TRUE.. If cut-cells are not used,    !
14     !    flow_to_vel is only called once.  When cut-cells are used,        !
15     !    flow_to_vel is called another time after the cut-cell pre-        !
16     !    processing stage. During, the second call, the velocity check     !
17     !    should not be performed, because the velocity assigned suring the !
18     !    first call will not match the flow rate. Therfore, when called    !
19     !    from cut_cell_preprocessing.f DO_VEL_CHECK is set to .FALSE..     !
20     !                                                                      !
21     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
22           SUBROUTINE FLOW_TO_VEL_NEW(DO_VEL_CHECK, M_TOT, SKIP, BCV)
23     
24           use param, only: DIM_M
25           use param1, only: UNDEFINED
26           use geometry, only: NO_I, NO_J, NO_K
27           use bc, only: BC_MASSFLOW_G
28           use bc, only: BC_VOLFLOW_G
29           use bc, only: BC_MASSFLOW_S
30           use bc, only: BC_VOLFLOW_S
31           use run, only: REINITIALIZING
32     
33           use error_manager
34           use toleranc
35     
36           IMPLICIT NONE
37     !-----------------------------------------------
38     ! Local variables
39     !-----------------------------------------------
40           LOGICAL, intent(in) :: DO_VEL_CHECK
41     
42     ! loop/variable indices
43           INTEGER, intent(in) :: M_TOT
44           LOGICAL, intent(in) :: SKIP(DIM_M)
45     
46     ! loop/variable indices
47           INTEGER, intent(in) :: BCV
48     
49     ! Whether any volumetric flow conversion was done
50           LOGICAL :: CONVERTED = .FALSE.
51     
52     ! Loop index
53           INTEGER :: M
54     
55     
56           CALL INIT_ERR_MSG("FLOW_TO_VEL_NEW")
57     
58     ! Mass flows rates are converted to volumetric flow rates.
59           IF(BC_MASSFLOW_G(BCV) /= UNDEFINED) &
60              CALL GAS_MASSFLOW_TO_VOLFLOW(BCV)
61     
62           DO M=1,M_TOT
63              IF(BC_MASSFLOW_S(BCV,M) /= UNDEFINED) &
64                 CALL SOLIDS_MASSFLOW_TO_VOLFLOW(BCV,M,SKIP(M))
65           ENDDO
66     
67     ! Volumetric flow rates are converted to velocities.
68           IF(BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
69              CALL GAS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV)
70     ! Set the conversion flag.
71              CONVERTED = .TRUE.
72           ENDIF
73     
74           DO M=1,M_TOT
75              IF(BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
76                 CALL SOLIDS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK,BCV,M,SKIP(M))
77     ! Set the conversion flag.
78                 CONVERTED = .TRUE.
79              ENDIF
80           ENDDO
81     
82           IF(CONVERTED .AND. .NOT.REINITIALIZING .AND. &
83              (NO_I.OR.NO_J.OR.NO_K)) THEN
84              WRITE(ERR_MSG, 1100)
85              CALL FLUSH_ERR_MSG
86           ENDIF
87     
88           CALL FINL_ERR_MSG
89     
90           RETURN
91     
92      1100 FORMAT('Warning 1100: Some volumetric or mass flow rates have ', &
93              'been converted',/'velocity. Ensure that the third (unused) ',&
94              'dimension in 2D simulations',/'is correctly specified (e.g.',&
95              ', in axisymmetric cylindrical coordinates',/'ZLENGTH = 2*Pi)')
96     
97           END SUBROUTINE FLOW_TO_VEL_NEW
98     
99     
100     
101     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
102     !                                                                      !
103     !  Subroutine: GAS_MASSFLOW_TO_VOLFLOW                                 !
104     !  Author: M. Syamlal                                 Date: 28-JUL-92  !
105     !                                                                      !
106     !  Purpose: Convert a gas phase BC input from a mass flow rate to      !
107     !  a volumetric flow rate.                                             !
108     !                                                                      !
109     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
110           SUBROUTINE GAS_MASSFLOW_TO_VOLFLOW(BCV)
111     
112           use bc, only: BC_MASSFLOW_g
113           use bc, only: BC_P_g
114           use bc, only: BC_T_g
115           use bc, only: BC_VOLFLOW_g
116           use bc, only: BC_X_g
117           use eos, only: EOSG
118           use error_manager
119           use param, only: DIMENSION_BC
120           use param1, only: UNDEFINED
121           use param1, only: ZERO
122           use physprop, only: CALC_MW
123           use physprop, only: MW_AVG, MW_g
124           use physprop, only: NMAX
125           use physprop, only: RO_g0
126           use scales, only: P_REF
127           use toleranc
128     
129           IMPLICIT NONE
130     
131           INTEGER, INTENT(in) :: BCV
132     
133     ! Volumetric flow rate computed from mass flow rate
134           DOUBLE PRECISION :: VOLFLOW
135     ! Average molecular weight
136           DOUBLE PRECISION :: MW
137     
138           CALL INIT_ERR_MSG("GAS_MASSFLOW_TO_VOLFLOW")
139     
140     ! No need to convert if the mass flow is zero.
141           IF(COMPARE(BC_MASSFLOW_G(BCV),ZERO)) THEN
142              VOLFLOW = ZERO
143     
144     ! Incompressible gas BC.
145           ELSEIF(RO_G0 /= UNDEFINED) THEN
146              VOLFLOW = BC_MASSFLOW_G(BCV)/RO_G0
147     
148     ! Well-defined compresible gas BC.
149           ELSEIF(BC_P_G(BCV)/=UNDEFINED .AND. BC_T_G(BCV)/=UNDEFINED) THEN
150              IF(MW_AVG == UNDEFINED) THEN
151                 MW = CALC_MW(BC_X_G,DIMENSION_BC,BCV,NMAX(0),MW_G)
152              ELSE
153                 MW = MW_AVG
154              ENDIF
155              VOLFLOW = BC_MASSFLOW_G(BCV) / &
156                 EOSG(MW,(BC_P_G(BCV)-P_REF),BC_T_G(BCV))
157     
158     ! Fails. This shouldn't happen as previous checks should catch any
159     ! errors leading to this routine.
160           ELSE
161              WRITE(ERR_MSG, 1100) BCV
162              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
163     
164      1100 FORMAT('Error 1100: Boundary condition ',I3,' failed sanity ',   &
165           'check.',/'Please report this to the MFIX mailing list.')
166     
167           ENDIF
168     
169     ! Check that a specified volumetric flow matches the calculated value.
170           IF(BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
171              IF(.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_G(BCV))) THEN
172                 WRITE(ERR_MSG,1101) trim(iVar('BC_MASSFLOW_g',BCV)), BCV,  &
173                    VOLFLOW, BC_VOLFLOW_g(BCV)
174                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175              ENDIF
176           ELSE
177     
178     ! Store the calculated volumetric flow rate.
179              BC_VOLFLOW_G(BCV) = VOLFLOW
180           ENDIF
181     
182      1101 FORMAT('Error 1101: Volumetric flow rate calculated from ',A,/   &
183              'does NOT equal the specified volumetric flow rate for BC',I3,&
184              /3x,'>>> Calculated: ',G14.7,/3x,'>>> Specified:  ',G14.7,/   &
185              'Please correct the mfix.dat file.')
186     
187     ! Clean up and return.
188           CALL FINL_ERR_MSG
189     
190           RETURN
191     
192           END SUBROUTINE GAS_MASSFLOW_TO_VOLFLOW
193     
194     
195     
196     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
197     !                                                                      !
198     !  Subroutine: SOLIDS_MASSFLOW_TO_VOLFLOW                              !
199     !  Author: M. Syamlal                                 Date: 28-JUL-92  !
200     !                                                                      !
201     !  Purpose: Convert solids phase BC input from a mass flow rate to     !
202     !  a volumetric flow rate.                                             !
203     !                                                                      !
204     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
205           SUBROUTINE SOLIDS_MASSFLOW_TO_VOLFLOW(BCV,M, SKIP_M)
206     
207           USE bc, only: BC_MASSFLOW_s
208           USE bc, only: BC_VOLFLOW_s
209           USE bc, only: BC_X_s
210           USE param1, only: UNDEFINED, ZERO
211           USE physprop, only: INERT_SPECIES
212           USE physprop, only: RO_s0
213           USE physprop, only: X_s0
214           use eos, only: EOSS
215           use error_manager
216           use toleranc
217     
218           IMPLICIT NONE
219     
220     ! loop/variable indices
221           INTEGER, INTENT(in) :: BCV, M
222           LOGICAL, INTENT(in) :: SKIP_M
223     
224     ! Volumetric flow rate computed from mass flow rate
225           DOUBLE PRECISION :: VOLFLOW
226     ! Index of inert species
227           INTEGER :: INERT
228     
229           CALL INIT_ERR_MSG("SOLIDS_MASSFLOW_TO_VOLFLOW")
230     
231     
232           IF(SKIP_M) THEN
233              WRITE(ERR_MSG,1100) M, BCV, trim(iVar("BC_MASSFLOW_S",BCV,M))
234              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
235           ENDIF
236     
237      1100 FORMAT('Error 1100: Solids phase ',I2,' has a specified mass ',  &
238              'flow rate',/'at BC ',I3,', ',A,'. But, both BC_ROP_s and ',&
239              'BC_EP_s are zero or undefined.',/'Please correct the ',&
240              'mfix.dat file.')
241     
242           IF(COMPARE(BC_MASSFLOW_S(BCV,M),ZERO)) THEN
243              VOLFLOW = ZERO
244     ! Constant solids density.
245           ELSEIF(RO_S0(M) /= UNDEFINED) THEN
246              VOLFLOW = BC_MASSFLOW_S(BCV,M)/RO_S0(M)
247           ELSE
248     ! Set an alias for the inert species.
249              INERT = INERT_SPECIES(M)
250     ! Variable solids density.
251              VOLFLOW = BC_MASSFLOW_S(BCV,M)/EOSS(RO_s0(M),              &
252                 X_s0(M,INERT), BC_X_S(BCV,M,INERT))
253           ENDIF
254     
255     ! If volumetric flow is also specified compare both
256           IF(BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
257              IF(.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_S(BCV,M))) THEN
258                 WRITE(ERR_MSG,1101) trim(iVar('BC_MASSFLOW_S',BCV,M)), BCV, &
259                    VOLFLOW, BC_VOLFLOW_S(BCV,M)
260                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
261              ENDIF
262           ELSE
263              BC_VOLFLOW_S(BCV,M) = VOLFLOW
264           ENDIF
265     
266           CALL FINL_ERR_MSG
267     
268           RETURN
269     
270      1101 FORMAT('Error 1101: Volumetric flow rate calculated from ',A,/   &
271              'does NOT equal the specified volumetric flow rate for BC',I3,&
272              /3x,'>>> Calculated: ',G14.7,/3x,'>>> Specified:  ',G14.7,/   &
273              'Please correct the mfix.dat file.')
274     
275     
276           END SUBROUTINE SOLIDS_MASSFLOW_TO_VOLFLOW
277     
278     
279     
280     
281     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
282     !                                                                      !
283     !  Subroutine: GAS_VOLFLOW_TO_VELOCITY                                 !
284     !  Author: M. Syamlal                                 Date: 28-JUL-92  !
285     !                                                                      !
286     !  Purpose: Convert gas phase volumetric rate to a velocity.           !
287     !                                                                      !
288     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
289           SUBROUTINE GAS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV)
290     
291           USE bc
292           USE compar
293           USE discretelement
294           USE error_manager
295           USE exit, only: mfix_exit
296           USE fldvar
297           USE funits
298           USE geometry
299           USE indices
300           USE mfix_pic
301           USE param
302           USE param1
303           USE physprop
304           USE run
305           USE scales
306           USE toleranc
307     
308           IMPLICIT NONE
309     !-----------------------------------------------
310     ! Local variables
311     !-----------------------------------------------
312     ! loop/variable indices
313           INTEGER, INTENT(in) :: BCV
314     
315     ! Whether any volumetric flow conversion was done
316           LOGICAL, INTENT(in) :: DO_VEL_CHECK
317     
318     
319           DOUBLE PRECISION :: SGN, OFF
320     
321     ! Velocity computed from volumetric flow rate
322           DOUBLE PRECISION :: VEL
323     !-----------------------------------------------
324           CALL INIT_ERR_MSG("GAS_VOLFLOW_TO_VELOCITY")
325     
326           SELECT CASE (BC_TYPE_ENUM(BCV))
327           CASE (MASS_INFLOW);  SGN =  ONE; OFF = ZERO
328           CASE (MASS_OUTFLOW); SGN = -ONE; OFF = ONE
329           CASE DEFAULT
330             write(*,*) 'error in GAS_VOLFLOW_TO_VELOCITY'
331             call mfix_exit(myPE)
332           END SELECT
333     
334           SELECT CASE (BC_PLANE(BCV))
335           CASE ('W'); SGN = -SGN
336           CASE ('S'); SGN = -SGN
337           CASE ('B'); SGN = -SGN
338           END SELECT
339     
340     ! Calculate the velocity based on the volumetric flow rate,
341     ! BC area and BC volume fraction.
342           VEL = SGN*BC_VOLFLOW_G(BCV)/(BC_AREA(BCV)*BC_EP_G(BCV))
343     
344     ! if the user also defined the boundary velocity through the plane, then
345     ! check that the calculated value agrees with the specified value. if
346     ! the user did not define the boundary velocity through the plane, then
347     ! if mass_inflow set the value of the boundary velocity to the
348     ! calculated value. otherwise do nothing.
349           IF(BC_PLANE(BCV) == 'W' .OR. BC_PLANE(BCV)== 'E') THEN
350     
351              IF(BC_U_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
352                 IF(.NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
353                    WRITE(ERR_MSG,1100) BCV, VEL, 'BC_U_g', BC_U_G(BCV)
354                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
355                 ENDIF
356              ELSE
357                 BC_U_G(BCV) = VEL
358                 BC_V_G(BCV) = OFF * BC_V_G(BCV)
359                 BC_W_G(BCV) = OFF * BC_W_G(BCV)
360              ENDIF
361     
362           ELSEIF(BC_PLANE(BCV) == 'S' .OR. BC_PLANE(BCV)== 'N') THEN
363              IF(BC_V_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
364                 IF(.NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
365                    WRITE(ERR_MSG, 1100) BCV, VEL, 'BC_V_g', BC_V_G(BCV)
366                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
367                 ENDIF
368              ELSE
369                 BC_V_G(BCV) = VEL
370                 BC_U_G(BCV) = OFF * BC_U_G(BCV)
371                 BC_W_G(BCV) = OFF * BC_W_G(BCV)
372              ENDIF
373     
374           ELSEIF(BC_PLANE(BCV) == 'B' .OR. BC_PLANE(BCV)== 'T') THEN
375              IF(BC_W_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
376                 IF(.NOT.COMPARE(VEL, BC_W_G(BCV))) THEN
377                    WRITE(ERR_MSG, 1100) BCV, VEL, 'BC_W_g', BC_W_G(BCV)
378                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
379                 ENDIF
380              ELSE
381                 BC_W_G(BCV) = VEL
382                 BC_U_G(BCV) = OFF * BC_U_G(BCV)
383                 BC_V_G(BCV) = OFF * BC_V_G(BCV)
384              ENDIF
385     
386           ENDIF
387     
388           CALL FINL_ERR_MSG
389     
390           RETURN
391     
392      1100 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
393              ' Computed velocity is not equal to specified value',/,&
394              ' Value computed from vol. or mass flow  = ',G14.7,/,&
395              ' Specified value (',A,') = ',G14.7,/1X,70('*')/)
396     
397           END SUBROUTINE GAS_VOLFLOW_TO_VELOCITY
398     
399     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
400     !                                                                      !
401     !  Subroutine: SOLIDS_VOLFLOW_TO_VELOCITY                              !
402     !  Author: M. Syamlal                                 Date: 28-JUL-92  !
403     !                                                                      !
404     !  Purpose: Convert volumetric and mass flow rates to velocities       !
405     !     A specified mass flow rate is first converted to volumetric      !
406     !     flow rate. The volumetric flow rate is then converted to a       !
407     !     velocity.                                                        !
408     !                                                                      !
409     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
410           SUBROUTINE SOLIDS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV, M, SKIP_M)
411     
412           USE param
413           USE param1
414           USE geometry
415           USE fldvar
416           USE physprop
417           USE run
418           USE bc
419           USE scales
420           USE indices
421           USE funits
422           USE compar
423           USE discretelement
424           USE mfix_pic
425     
426           use error_manager
427           use toleranc
428     
429           IMPLICIT NONE
430     !-----------------------------------------------
431     ! Local variables
432     !-----------------------------------------------
433     ! loop/variable indices
434           INTEGER, INTENT(in) :: BCV, M
435     ! Logical to preform velocity check.
436           LOGICAL, INTENT(in) :: DO_VEL_CHECK, SKIP_M
437     
438     ! Velocity computed from volumetric flow rate
439           DOUBLE PRECISION :: VEL
440     
441           DOUBLE PRECISION :: SGN, OFF
442     
443     !-----------------------------------------------
444     
445           CALL INIT_ERR_MSG("SOLIDS_VOLFLOW_TO_VELOCITY")
446     
447           IF(SKIP_M) THEN
448              WRITE(ERR_MSG,1100) M, BCV, trim(iVar("BC_VOLFLOW_S",BCV,M))
449              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
450           ENDIF
451     
452      1100 FORMAT('Error 1100: Solids phase ',I2,' has a specified ',       &
453              'volumetric flow rate',/'at BC ',I3,', ',A,'. But, both ',&
454              'BC_ROP_s and BC_EP_s are zero or undefined.',/'Please ',&
455              'the mfix.dat file.')
456     
457           SELECT CASE (BC_TYPE_ENUM(BCV))
458           CASE (MASS_INFLOW);  SGN =  ONE; OFF = ZERO
459           CASE (MASS_OUTFLOW); SGN = -ONE; OFF = ONE
460           CASE DEFAULT
461             write(*,*) 'error in SOLIDS_VOLFLOW_TO_VELOCITY'
462             call mfix_exit(myPE)
463           END SELECT
464     
465           SELECT CASE (BC_PLANE(BCV))
466           CASE ('W'); SGN = -SGN
467           CASE ('S'); SGN = -SGN
468           CASE ('B'); SGN = -SGN
469           END SELECT
470     
471           IF(BC_EP_S(BCV,M) /= ZERO) THEN
472              VEL = SGN * BC_VOLFLOW_S(BCV,M)/(BC_AREA(BCV)*BC_EP_S(BCV,M))
473           ELSE
474              IF(BC_VOLFLOW_S(BCV,M) == ZERO) THEN
475                 VEL = ZERO
476              ELSE
477                 IF(DMP_LOG)WRITE (UNIT_LOG, 1101) BCV, M
478                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
479              ENDIF
480           ENDIF
481     
482      1101 FORMAT('Error 1101: BC No:',I2,' Non-zero vol. or mass flow ',&
483              'specified with BC_ROP_s', I1,' = 0.')
484     
485           IF(BC_PLANE(BCV) == 'W' .OR. BC_PLANE(BCV)== 'E') THEN
486              IF(BC_U_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
487                 IF(.NOT.COMPARE(VEL, BC_U_S(BCV,M))) THEN
488                   WRITE(ERR_MSG, 1300) BCV, (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
489                   CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
490                 ENDIF
491              ELSE
492                 BC_U_S(BCV,M) = VEL
493                 BC_V_S(BCV,M) = OFF * BC_V_S(BCV,M)
494                 BC_W_S(BCV,M) = OFF * BC_W_S(BCV,M)
495              ENDIF
496     
497           ELSEIF(BC_PLANE(BCV) == 'S' .OR. BC_PLANE(BCV)== 'N') THEN
498              IF(BC_V_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
499                 IF(.NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
500                    WRITE(ERR_MSG,1300) BCV, VEL, 'BC_V_s', M, BC_V_S(BCV,M)
501                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
502                 ENDIF
503              ELSE
504                 BC_V_S(BCV,M) = VEL
505                 BC_U_S(BCV,M) = OFF * BC_U_S(BCV,M)
506                 BC_W_S(BCV,M) = OFF * BC_W_S(BCV,M)
507              ENDIF
508     
509           ELSEIF(BC_PLANE(BCV) == 'B' .OR. BC_PLANE(BCV)== 'T') THEN
510              IF(BC_W_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
511                 IF(.NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
512                    WRITE(ERR_MSG, 1300) BCV, VEL, 'BC_W_s', M, BC_W_S(BCV,M)
513                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
514                 ENDIF
515              ELSE
516                 BC_W_S(BCV,M) = VEL
517                 BC_U_S(BCV,M) = OFF * BC_U_S(BCV,M)
518                 BC_V_S(BCV,M) = OFF * BC_V_S(BCV,M)
519              ENDIF
520           ENDIF
521     
522     
523           CALL FINL_ERR_MSG
524     
525           RETURN
526     
527      1300 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
528              ' Computed velocity is not equal to specified value',/,&
529              ' Value computed from vol. or mass flow  = ',G14.7,/,&
530              ' Specified value (',A,I1,') = ',G14.7,/1X,70('*')/)
531     
532           END SUBROUTINE SOLIDS_VOLFLOW_TO_VELOCITY
533     
534     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
535     !                                                                      C
536     !  Subroutine: FLOW_TO_VEL                                             C
537     !  Purpose: Convert volumetric and mass flow rates to velocities       C
538     !     A specified mass flow rate is first converted to volumetric      C
539     !     flow rate. The volumetric flow rate is then converted to a       C
540     !     velocity.                                                        C
541     !                                                                      C
542     !  Author: M. Syamlal                                 Date: 28-JUL-92  C
543     !  Reviewer: W. Rogers                                Date: 11-DEC-92  C
544     !                                                                      C
545     !  Revision Number:                                                    C
546     !  Purpose:                                                            C
547     !  Author:                                            Date: dd-mmm-yy  C
548     !  Reviewer:                                          Date: dd-mmm-yy  C
549     !                                                                      C
550     !  Literature/Document References:                                     C
551     !  Variables referenced:                                               C
552     !  Variables modified:                                                 C
553     !  Local variables:                                                    C
554     !                                                                      C
555     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
556     
557           SUBROUTINE FLOW_TO_VEL(DO_VEL_CHECK)
558     
559     !-----------------------------------------------
560     ! Modules
561     !-----------------------------------------------
562           USE bc
563           USE compar
564           USE discretelement
565           USE eos, ONLY: EOSG, EOSS
566           USE exit, only: mfix_exit
567           USE fldvar
568           USE funits
569           USE geometry
570           USE indices
571           USE mfix_pic
572           USE param
573           USE param1
574           USE physprop
575           USE run
576           USE scales
577           USE toleranc
578     
579           IMPLICIT NONE
580     !-----------------------------------------------
581     ! Local variables
582     !-----------------------------------------------
583     ! loop/variable indices
584           INTEGER :: BCV, M
585     ! Volumetric flow rate computed from mass flow rate
586           DOUBLE PRECISION :: VOLFLOW
587     ! Velocity computed from volumetric flow rate
588           DOUBLE PRECISION :: VEL
589     ! Solids phase volume fraction
590           DOUBLE PRECISION :: EPS
591     ! Whether any volumetric flow conversion was done
592           LOGICAL :: CONVERTED,DO_VEL_CHECK
593     ! Average molecular weight
594           DOUBLE PRECISION :: MW
595     ! Index of inert species
596           INTEGER :: INERT
597     ! Solids density at BC plane
598           DOUBLE PRECISION :: BC_ROs
599     !-----------------------------------------------
600     
601     ! When both flow rates and velocities are specified, a consistency check is done
602     ! The first time flow_to_vel is called in
603     ! by setting the logical DO_VEL_CHECK to .TRUE.
604     ! If cut-cells are not used, flow_to_vel is only called once.
605     ! When cut-cells are used, flow_to_vel is called another time after
606     ! the cut-cell preprocessing stage. During, the second call, the velocity check
607     ! should not be performed, because the velocity assigned suring the first call
608     ! will not match the flow rate. Therfore, when called from cut_cell_preprocessing.f
609     ! DO_VEL_CHECK is set to .FALSE.
610     
611     ! initialize
612           VOLFLOW = UNDEFINED
613     
614           CONVERTED = .FALSE.
615           DO BCV = 1, DIMENSION_BC
616              IF (BC_DEFINED(BCV)) THEN
617                 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .OR.&
618                     BC_TYPE_ENUM(BCV)==MASS_OUTFLOW) THEN
619     
620     ! If gas mass flow is defined convert it to volumetric flow
621     ! ---------------------------------------------------------------->>>
622                    IF (BC_MASSFLOW_G(BCV) /= UNDEFINED) THEN
623                       IF (RO_G0 /= UNDEFINED) THEN
624                          VOLFLOW = BC_MASSFLOW_G(BCV)/RO_G0
625                       ELSE
626                          IF (BC_P_G(BCV)/=UNDEFINED .AND. &
627                              BC_T_G(BCV)/=UNDEFINED) THEN
628                             IF (MW_AVG == UNDEFINED) THEN
629                                MW = CALC_MW(BC_X_G,DIMENSION_BC,BCV,NMAX(0),MW_G)
630                             ELSE
631                                MW = MW_AVG
632                             ENDIF
633                             VOLFLOW = BC_MASSFLOW_G(BCV)/&
634                                EOSG(MW,(BC_P_G(BCV)-P_REF),BC_T_G(BCV))
635     
636                          ELSE
637     ! for mass_inflow, check_data_07 has already required that either ro_g0
638     ! be defined or bc_p_g and bc_t_g be defined. So this branch will never
639     ! be entered when mass_inflow. if mass_outflow, ro_g0 and either bc_p_g,
640     ! or bc_t_g, or both, must be undefined.
641     ! if the code comes through this branch without exiting and massflow is
642     ! non-zero, then volflow will remain undefined.
643     
644                             IF (BC_TYPE_ENUM(BCV) == MASS_OUTFLOW) THEN ! this check seems unnecessary
645     
646     ! if no mass flow through the boundary, the volume flow is zero.
647     ! otherwise check that the value of velocity component through the
648     ! boundary plane is defined, and is non-zero (otherwise would be caught
649     ! by bc_massflow_g == zero branch)
650                                IF (BC_MASSFLOW_G(BCV) == ZERO) THEN
651                                   VOLFLOW = ZERO
652                                ELSEIF (BC_PLANE(BCV)=='W' .OR. &
653                                        BC_PLANE(BCV)=='E') THEN
654                                   IF (BC_U_G(BCV)==UNDEFINED .OR. &
655                                       BC_U_G(BCV)/=ZERO) THEN
656                                      IF(DMP_LOG)WRITE (UNIT_LOG, 1010)&
657                                         BCV, 'BC_U_g'
658                                      call mfix_exit(myPE)
659                                   ENDIF
660                                ELSEIF (BC_PLANE(BCV)=='N' .OR. &
661                                        BC_PLANE(BCV)=='S') THEN
662                                   IF (BC_V_G(BCV)==UNDEFINED .OR. &
663                                       BC_V_G(BCV)/=ZERO) THEN
664                                      IF(DMP_LOG)WRITE (UNIT_LOG, 1010) &
665                                         BCV, 'BC_V_g'
666                                      call mfix_exit(myPE)
667                                   ENDIF
668                                ELSEIF (BC_PLANE(BCV)=='T' .OR. &
669                                        BC_PLANE(BCV)=='B') THEN
670                                   IF (BC_W_G(BCV)==UNDEFINED .OR. &
671                                       BC_W_G(BCV)/=ZERO) THEN
672                                      IF(DMP_LOG)WRITE (UNIT_LOG, 1010) &
673                                         BCV, 'BC_W_g'
674                                      call mfix_exit(myPE)
675                                   ENDIF
676                                ENDIF
677                             ELSE   ! else branch if(bc_type=mass_outflow)
678     ! not sure how this branch will be reached by mass_inflow
679                                IF(DMP_LOG)WRITE (UNIT_LOG, 1020) BCV
680                                call mfix_exit(myPE)
681                             ENDIF   ! end if (bc_type_enum(bcv)==mass_outflow)
682                          ENDIF
683                       ENDIF   ! end if/else (ro_g0 /=undefined)
684     
685     ! If volumetric flow is also specified compare both
686                       IF (BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
687     ! volflow may be undefined for mass_outflow boundaries wherein ro_g0 and
688     ! either bc_p_g, or bc_t_g, or both, were undefined.
689                          IF (.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_G(BCV))) THEN
690                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000) BCV, &
691                                VOLFLOW, BC_VOLFLOW_G(BCV)
692                             call mfix_exit(myPE)
693                          ENDIF
694                       ELSE
695                          BC_VOLFLOW_G(BCV) = VOLFLOW
696                       ENDIF
697                    ENDIF   ! end if (bc_massflow_g(bcv) /= undefined)
698     ! end gas mass flow conversion to volumetric flow
699     ! ----------------------------------------------------------------<<<
700     
701     ! If gas volumetric flow is defined convert it to velocity
702     ! ---------------------------------------------------------------->>>
703                    IF (BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
704     
705                       IF (BC_EP_G(BCV) /= UNDEFINED) THEN
706     ! volumetric flow rate and void fraction at the boundary are specified
707     ! (known) so that the corresponding gas velocity through the boundary
708     ! plane may be calculated.
709                          VEL = BC_VOLFLOW_G(BCV)/(BC_AREA(BCV)*BC_EP_G(BCV))
710                       ELSE
711     ! for mass_inflow, check_data_07 has already required that bc_ep_g be
712     ! defined (i.e., this section will not happen for MI). For mass_outflow
713     ! the routine will exit here if bc_ep_g is not defined.  However, for
714     ! this MO the boundary velocities must also be set or mfix will exit due
715     ! to later checks in check_data_07.
716                          RETURN
717                       ENDIF
718     
719     ! if the user also defined the boundary velocity through the plane, then
720     ! check that the calculated value agrees with the specified value. if
721     ! the user did not define the boundary velocity through the plane, then
722     ! if mass_inflow set the value of the boundary velocity to the
723     ! calculated value. otherwise do nothing.
724                       CONVERTED = .TRUE.
725                       SELECT CASE (TRIM(BC_PLANE(BCV)))
726                       CASE ('W')
727                          IF (BC_U_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
728                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
729                                 .NOT.COMPARE((-VEL),BC_U_G(BCV))) THEN
730                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
731                                   (-VEL), 'BC_U_g', BC_U_G(BCV)
732                                call mfix_exit(myPE)
733                             ENDIF
734                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
735                                 .NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
736                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
737                                   VEL, 'BC_U_g', BC_U_G(BCV)
738                                call mfix_exit(myPE)
739                             ENDIF
740                          ELSE
741                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
742                                BC_U_G(BCV) = -VEL
743                                BC_V_G(BCV) = ZERO
744                                BC_W_G(BCV) = ZERO
745                             ELSE
746                                BC_U_G(BCV) = VEL
747                             ENDIF
748                          ENDIF
749                       CASE ('E')
750                          IF (BC_U_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
751                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
752                                 .NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
753                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
754                                   'BC_U_g', BC_U_G(BCV)
755                                call mfix_exit(myPE)
756                             ENDIF
757                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
758                                 .NOT.COMPARE((-VEL),BC_U_G(BCV))) THEN
759                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
760                                   (-VEL), 'BC_U_g', BC_U_G(BCV)
761                                call mfix_exit(myPE)
762                             ENDIF
763                          ELSE
764                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
765                                BC_U_G(BCV) = VEL
766                                BC_V_G(BCV) = ZERO
767                                BC_W_G(BCV) = ZERO
768                             ELSE
769                                BC_U_G(BCV) = -VEL
770                             ENDIF
771                          ENDIF
772                       CASE ('S')
773                          IF (BC_V_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
774                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
775                                 .NOT.COMPARE((-VEL),BC_V_G(BCV))) THEN
776                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
777                                   (-VEL), 'BC_V_g', BC_V_G(BCV)
778                                call mfix_exit(myPE)
779                             ENDIF
780                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
781                                 .NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
782                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
783                                   'BC_V_g', BC_V_G(BCV)
784                                call mfix_exit(myPE)
785                             ENDIF
786                          ELSE
787                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
788                                BC_U_G(BCV) = ZERO
789                                BC_V_G(BCV) = -VEL
790                                BC_W_G(BCV) = ZERO
791                             ELSE
792                                BC_V_G(BCV) = VEL
793                             ENDIF
794                          ENDIF
795                       CASE ('N')
796                          IF (BC_V_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
797                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
798                                 .NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
799                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
800                                   'BC_V_g', BC_V_G(BCV)
801                                call mfix_exit(myPE)
802                             ENDIF
803                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
804                                 .NOT.COMPARE((-VEL),BC_V_G(BCV))) THEN
805                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
806                                   (-VEL), 'BC_V_g', BC_V_G(BCV)
807                                call mfix_exit(myPE)
808                             ENDIF
809                          ELSE
810                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
811                                BC_U_G(BCV) = ZERO
812                                BC_V_G(BCV) = VEL
813                                BC_W_G(BCV) = ZERO
814                             ELSE
815                                BC_V_G(BCV) = -VEL
816                             ENDIF
817                          ENDIF
818                       CASE ('B')
819                          IF (BC_W_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
820                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND.  &
821                                 .NOT.COMPARE((-VEL),BC_W_G(BCV))) THEN
822                                IF(DMP_LOG)WRITE (UNIT_LOG, 1100) BCV,&
823                                   (-VEL), 'BC_W_g', BC_W_G(BCV)
824                                call mfix_exit(myPE)
825                             ENDIF
826                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
827                                 .NOT.COMPARE(VEL,BC_W_G(BCV))) THEN
828                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
829                                   'BC_W_g', BC_W_G(BCV)
830                                call mfix_exit(myPE)
831                             ENDIF
832                          ELSE
833                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
834                                BC_U_G(BCV) = ZERO
835                                BC_V_G(BCV) = ZERO
836                                BC_W_G(BCV) = -VEL
837                             ELSE
838                                BC_W_G(BCV) = VEL
839                             ENDIF
840                          ENDIF
841                       CASE ('T')
842                          IF (BC_W_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
843                             IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
844                                 .NOT.COMPARE(VEL,BC_W_G(BCV))) THEN
845                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
846                                   'BC_W_g', BC_W_G(BCV)
847                                call mfix_exit(myPE)
848                             ENDIF
849                             IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
850                                 .NOT.COMPARE((-VEL),BC_W_G(BCV))) THEN
851                                IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
852                                   (-VEL), 'BC_W_g', BC_W_G(BCV)
853                                call mfix_exit(myPE)
854                             ENDIF
855                          ELSE
856                             IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
857                                BC_U_G(BCV) = ZERO
858                                BC_V_G(BCV) = ZERO
859                                BC_W_G(BCV) = VEL
860                             ELSE
861                                BC_W_G(BCV) = -VEL
862                             ENDIF
863                          ENDIF
864                       END SELECT    ! end select (trim(bc_plane(bcv))
865                    ENDIF   ! end if (bc_volflow_g(bcv)/=undefined)
866     ! end gas volumetric flow conversion to velocity
867     ! ----------------------------------------------------------------<<<
868     
869                    IF (.NOT.DISCRETE_ELEMENT .OR. (DISCRETE_ELEMENT &
870                        .AND. DES_CONTINUUM_HYBRID).OR. (DISCRETE_ELEMENT &
871                        .AND. MPPIC)) THEN
872     ! The following quantities should not be required for DEM simulations
873     ! To ensure this is the case leave them undefined in mfix.dat
874     ! MPPIC BC's are based on Two Fluid Model based specification.
875     ! So call the below for MPPIC.
876     
877     ! Do flow conversions for solids phases
878                    DO M = 1, SMAX
879     
880     ! initialize
881                       VOLFLOW = UNDEFINED
882                       BC_ROs = UNDEFINED
883     
884                       IF((BC_MASSFLOW_S(BCV,M) /= UNDEFINED) .OR.          &
885                          (BC_VOLFLOW_S(BCV,M)  /= UNDEFINED)) THEN
886     
887     ! Calculate the solid density.
888                          BC_ROs = UNDEFINED
889                          IF(SOLVE_ROs(M))THEN
890                             INERT = INERT_SPECIES(M)
891     ! Verify that the species mass fraction for the inert material is not
892     ! zero in the IC region when the solids is present.
893                             IF(BC_X_S(BCV,M,INERT) == ZERO) THEN
894                                IF(BC_ROP_S(BCV,M) /= ZERO) THEN
895                                   IF(DMP_LOG) THEN
896                                      WRITE(*,1401) M, BCV
897                                      WRITE(UNIT_LOG,1401) M, BCV
898                                   ENDIF
899                                   CALL MFIX_EXIT(myPE)
900                                ELSE
901     ! If the solids isn't present, give it the baseline density.
902                                   BC_ROs = RO_s0(M)
903                                ENDIF
904                             ELSE
905     ! Calculate the solids density.
906                                BC_ROs = EOSS(RO_s0(M),X_s0(M,INERT),    &
907                                   BC_X_S(BCV,M,INERT))
908                             ENDIF
909                          ELSE
910                             BC_ROs = RO_S0(M)
911                          ENDIF
912                       ELSE
913     ! Set a generic value to pass through sanity check.
914                          BC_ROs = RO_S0(M)
915                       ENDIF
916     
917     
918     ! If solids mass flow is defined convert it to volumetric flow
919     ! ---------------------------------------------------------------->>>
920                       IF (BC_MASSFLOW_S(BCV,M) /= UNDEFINED) THEN
921     
922     ! Sanity check on solids phase density.
923                          IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
924                             IF(DMP_LOG)THEN
925                                WRITE(*,1401) M, BCV
926                                WRITE(UNIT_LOG,1401) M, BCV
927                             ENDIF
928                             CALL MFIX_EXIT(myPE)
929                          ENDIF
930     
931                          VOLFLOW = BC_MASSFLOW_S(BCV,M)/BC_ROs
932     
933     ! If volumetric flow is also specified compare both
934                          IF (BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
935                             IF (.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_S(BCV,M))) THEN
936                                IF(DMP_LOG) WRITE(UNIT_LOG,1200) &
937                                   BCV,VOLFLOW,M,BC_VOLFLOW_S(BCV,M)
938                                call mfix_exit(myPE)
939                             ENDIF
940                          ELSE
941                             BC_VOLFLOW_S(BCV,M) = VOLFLOW
942                          ENDIF
943                       ENDIF   ! end if (bc_massflow_s(bcv,m)/=undefined)
944     ! end solids mass flow conversion to volumetric flow
945     ! ----------------------------------------------------------------<<<
946     
947     
948     ! if possible, define bulk density based on ep_g. note if mass_outflow,
949     ! bc_ep_g may still be undefined at this point wherein bc_rop_s would
950     ! become set as 1-undefined. to avoid this issue, a check for bc_ep_g
951     ! defined was added. note if mass_inflow, check_data_07 later performs
952     ! the same calculations as below but with additional checks.
953                       IF (BC_ROP_S(BCV,M) == UNDEFINED .AND. &
954                          BC_EP_G(BCV) /= UNDEFINED ) THEN
955                          IF (BC_EP_G(BCV) == ONE) THEN
956                              BC_ROP_S(BCV,M) = ZERO
957                          ELSEIF (SMAX == 1 .AND. &
958                                   .NOT.DES_CONTINUUM_HYBRID) THEN
959     
960     ! Sanity check on solids phase density.
961                             IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
962                                IF(DMP_LOG)THEN
963                                   WRITE(*,1401) M, BCV
964                                   WRITE(UNIT_LOG,1401) M, BCV
965                                ENDIF
966                                CALL MFIX_EXIT(myPE)
967                             ENDIF
968     
969     
970     ! bulk density must be explicitly defined for hybrid model and cannot be
971     ! defined from 1-bc_ep_g
972                              BC_ROP_S(BCV,M) = (ONE - BC_EP_G(BCV))*BC_ROs
973                          ENDIF
974                       ENDIF
975     ! note bc_rop_s may still be undefined at this point
976     
977     
978     ! If solids volumetric flow is defined convert it to velocity
979     ! ---------------------------------------------------------------->>>
980                       IF (BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
981     
982     ! Sanity check on solids phase density.
983                          IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
984                             IF(DMP_LOG)THEN
985                                WRITE(*,1401) M, BCV
986                                WRITE(UNIT_LOG,1401) M, BCV
987                             ENDIF
988                             CALL MFIX_EXIT(myPE)
989                          ENDIF
990     
991                          IF (BC_ROP_S(BCV,M) /= UNDEFINED) THEN
992                             EPS = BC_ROP_S(BCV,M)/BC_ROs
993     ! volumetric flow rate and solids volume fraction at the boundary are
994     ! specified (known) so that the corresponding solids velocity through
995     ! the boundary plane may be calculated.
996                             IF (EPS /= ZERO) THEN
997                                VEL = BC_VOLFLOW_S(BCV,M)/(BC_AREA(BCV)*EPS)
998                             ELSE
999                                IF (BC_VOLFLOW_S(BCV,M) == ZERO) THEN
1000                                   VEL = ZERO
1001                                ELSE
1002                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1250) BCV, M
1003                                   call mfix_exit(myPE)
1004                                ENDIF
1005                             ENDIF
1006                          ELSE   ! bc_rop_s is undefined
1007                             IF (BC_VOLFLOW_S(BCV,M) == ZERO) THEN
1008                                VEL = ZERO
1009                             ELSE
1010     ! if bc_rop_s is undefined and bc_volflow_s is not zero exit MFIX with
1011     ! error
1012                                IF(DMP_LOG)WRITE (UNIT_LOG, 1260) BCV, M
1013                                call mfix_exit(myPE)
1014                             ENDIF
1015                          ENDIF
1016     
1017     ! if the user also defined the boundary velocity through the plane, then
1018     ! check that the calculated value agrees with the specified value. if
1019     ! the user did not define the boundary velocity through the plane, then
1020     ! if mass_inflow set the value of the boundary velocity to the
1021     ! calculated value. otherwise do nothing.
1022                          CONVERTED = .TRUE.
1023                          SELECT CASE (TRIM(BC_PLANE(BCV)))
1024                          CASE ('W')
1025                             IF (BC_U_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1026                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1027                                    .NOT.COMPARE((-VEL),BC_U_S(BCV,M))) THEN
1028                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1029                                      (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
1030                                   call mfix_exit(myPE)
1031                                ENDIF
1032                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1033                                    .NOT.COMPARE(VEL,BC_U_S(BCV,M))) THEN
1034                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1035                                      VEL, 'BC_U_s', M, BC_U_S(BCV,M)
1036                                   call mfix_exit(myPE)
1037                                ENDIF
1038                             ELSE
1039                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1040                                   BC_U_S(BCV,M) = -VEL
1041                                   BC_V_S(BCV,M) = ZERO
1042                                   BC_W_S(BCV,M) = ZERO
1043                                ELSE
1044                                   BC_U_S(BCV,M) = VEL
1045                                ENDIF
1046                             ENDIF
1047                          CASE ('E')
1048                             IF (BC_U_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1049                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1050                                    .NOT.COMPARE(VEL,BC_U_S(BCV,M))) THEN
1051                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1052                                      VEL, 'BC_U_s', M, BC_U_S(BCV,M)
1053                                   call mfix_exit(myPE)
1054                                ENDIF
1055                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1056                                    .NOT.COMPARE((-VEL),BC_U_S(BCV,M))) THEN
1057                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1058                                      (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
1059                                   call mfix_exit(myPE)
1060                                ENDIF
1061                             ELSE
1062                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1063                                   BC_U_S(BCV,M) = VEL
1064                                   BC_V_S(BCV,M) = ZERO
1065                                   BC_W_S(BCV,M) = ZERO
1066                                ELSE
1067                                   BC_U_S(BCV,M) = -VEL
1068                                ENDIF
1069                             ENDIF
1070                          CASE ('S')
1071                             IF (BC_V_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1072                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1073                                    .NOT.COMPARE((-VEL),BC_V_S(BCV,M))) THEN
1074                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1075                                      (-VEL), 'BC_V_s', M, BC_V_S(BCV,M)
1076                                   call mfix_exit(myPE)
1077                                ENDIF
1078                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1079                                    .NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
1080                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1081                                      VEL, 'BC_V_s', M, BC_V_S(BCV,M)
1082                                   call mfix_exit(myPE)
1083                                ENDIF
1084                             ELSE
1085                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1086                                   BC_U_S(BCV,M) = ZERO
1087                                   BC_V_S(BCV,M) = -VEL
1088                                   BC_W_S(BCV,M) = ZERO
1089                                ELSE
1090                                   BC_V_S(BCV,M) = VEL
1091                                ENDIF
1092                             ENDIF
1093                          CASE ('N')
1094                             IF (BC_V_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1095                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1096                                    .NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
1097                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1098                                      VEL, 'BC_V_s', M, BC_V_S(BCV,M)
1099                                   call mfix_exit(myPE)
1100                                ENDIF
1101                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1102                                    .NOT.COMPARE((-VEL),BC_V_S(BCV,M))) THEN
1103                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1104                                      (-VEL), 'BC_V_s', M, BC_V_S(BCV,M)
1105                                   call mfix_exit(myPE)
1106                                ENDIF
1107                             ELSE
1108                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1109                                   BC_U_S(BCV,M) = ZERO
1110                                   BC_V_S(BCV,M) = VEL
1111                                   BC_W_S(BCV,M) = ZERO
1112                                ELSE
1113                                   BC_V_S(BCV,M) = -VEL
1114                                ENDIF
1115                             ENDIF
1116                          CASE ('B')
1117                             IF (BC_W_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1118                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1119                                    .NOT.COMPARE((-VEL),BC_W_S(BCV,M))) THEN
1120                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1121                                      (-VEL), 'BC_W_s', M, BC_W_S(BCV,M)
1122                                   call mfix_exit(myPE)
1123                                ENDIF
1124                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1125                                    .NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
1126                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1127                                      VEL, 'BC_W_s', M, BC_W_S(BCV,M)
1128                                   call mfix_exit(myPE)
1129                                ENDIF
1130                             ELSE
1131                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1132                                   BC_U_S(BCV,M) = ZERO
1133                                   BC_V_S(BCV,M) = ZERO
1134                                   BC_W_S(BCV,M) = -VEL
1135                                ELSE
1136                                   BC_W_S(BCV,M) = VEL
1137                                ENDIF
1138                             ENDIF
1139                          CASE ('T')
1140                             IF (BC_W_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1141                                IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1142                                    .NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
1143                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1144                                      VEL, 'BC_W_s', M, BC_W_S(BCV,M)
1145                                   call mfix_exit(myPE)
1146                                ENDIF
1147                                IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1148                                   .NOT.COMPARE((-VEL),BC_W_S(BCV,M))) THEN
1149                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1150                                      (-VEL), 'BC_W_s', M, BC_W_S(BCV,M)
1151                                   call mfix_exit(myPE)
1152                                ENDIF
1153                             ELSE
1154                                IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1155                                   BC_U_S(BCV,M) = ZERO
1156                                   BC_V_S(BCV,M) = ZERO
1157                                   BC_W_S(BCV,M) = VEL
1158                                ELSE
1159                                   BC_W_S(BCV,M) = -VEL
1160                                ENDIF
1161                             ENDIF
1162                          END SELECT    ! end select (trim(bc_plane(bcv))
1163                       ENDIF   ! end if (bc_volflow_s(bcv,m) /= undefined)
1164     ! end solids volumetric flow conversion to velocity
1165     ! ----------------------------------------------------------------<<<
1166     
1167                    ENDDO   ! end do m = 1,smax
1168                    ENDIF   ! end if (.not.discrete_element)
1169     
1170                 ENDIF   ! end if (bc_type_enum(bcv)==mass_inflow or mass_outflow)
1171              ENDIF   ! end if (bc_defined(bcv))
1172           ENDDO   ! end do (bcv =1,dimension_bc)
1173     
1174     
1175           IF (CONVERTED .AND. (NO_I .OR. NO_J .OR. NO_K) &
1176               .AND. DMP_LOG)WRITE (UNIT_LOG, 1500)
1177     
1178           RETURN
1179     
1180      1000 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1181              ' Computed volumetric flow is not equal to specified value',/,&
1182              ' Value computed from mass flow  = ',G14.7,/,&
1183              ' Specified value (BC_VOLFLOW_g) = ',G14.7,/1X,70('*')/)
1184      1010 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,&
1185              '  BC_P_g, BC_T_g, and BC_X_g or',/' a nonzero value for ',A,&
1186              ' should be specified',/1X,70('*')/)
1187      1020 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,&
1188              '  BC_P_g, BC_T_g, and BC_X_g',/' should be specified',/1X,70('*')/)
1189      1100 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1190              ' Computed velocity is not equal to specified value',/,&
1191              ' Value computed from vol. or mass flow  = ',G14.7,/,&
1192              ' Specified value (',A,') = ',G14.7,/1X,70('*')/)
1193      1200 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1194              ' Computed volumetric flow is not equal to specified value',/,&
1195              ' Value computed from mass flow  = ',G14.7,/,&
1196              ' Specified value (BC_VOLFLOW_s',I1,') = ',G14.7,/1X,70('*')/)
1197      1250 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1198              ' Non-zero vol. or mass flow specified with BC_ROP_s',&
1199              I1,' = 0.',/1X,70('*')/)
1200      1260 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1201              ' BC_ROP_s',I1,' not specified',/1X,70('*')/)
1202      1300 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1203              ' Computed velocity is not equal to specified value',/,&
1204              ' Value computed from vol. or mass flow  = ',G14.7,/,&
1205              ' Specified value (',A,I1,') = ',G14.7,/1X,70('*')/)
1206      1500 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/&
1207              ' Message: Some volumetric or mass flow rates have been',/&
1208              '   converted to velocity values.  In 2D simulations ensure',/&
1209              '   that the third (unused) dimension is correctly specified;',/&
1210              '   e.g. in axisymmetric cylindrical coordinates ZLENGTH = 2*Pi'/1X,70&
1211              ('*')/)
1212     
1213      1401 FORMAT(//1X,70('*')/' From: FLOW_TO_VEL',/,' Error 1401:',       &
1214              ' Solids phase ',I2,' failed sanity check in BC region ',I3,  &
1215              '. ',/' Please check mfix.dat file.',/1X,70('*')//)
1216     
1217     
1218           END SUBROUTINE FLOW_TO_VEL
1219