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