BernoulliPressureVariable

This variable type is specific to the porous media incompressible Navier Stokes equations. When used instead of a typical finite volume variable, faces for which the neighboring elements have different porosity values will be treated as either Dirichlet or extrapolated boundary faces. When this variable is queried for a face value on the downwind side of the face, only downwind information is used to extrapolate and reconstruct the downwind side face value. The upwind side face value is computed using the reconstructed downwind face pressure value and the Bernoulli equation:

where is the pressure, is the density, and is the interstitial velocity (not the superficial velocity). Bernoulli's equation typically contains gravitational terms; however, we have omitted them under the assumption that which should be true when density does not depend on pressure (the incompressible or "weakly" compressible case).

Furthermore, the user can select sidesets in the domain to assign additional irreversible pressure drops. For this, the selected sidesets should be defined using parameters "pressure_drop_sidesets" and "pressure_drop_form_factors". The irreversible pressure drop can be expressed as:

where is the form loss coefficient and is the interstitial velocity. For contractions, the velocity and the density on the upwind side are taken whereas for expansions the downwind side values are used.

The decision to use downstream information to compute the upstream pressure value is based on eigenvalue reasoning for the subsonic Euler equations. For the subsonic Euler equations, mesh dimension + 1 upstream explicit/physical (as opposed to implicit) boundary conditions are required while one downstream explicit/physical boundary condition is required (Novak et al., 2018). In practice this often corresponds to mesh dimension explicit inlet boundary conditions related to velocity, one explicit inlet boundary condition related to temperature, and one explicit outlet boundary condition related to pressure. Thus physics-based discretizations of Euler flows typically (at least partially) upwinds information being advected by the flow field. However, given the propagation of pressure information upstream from the explicit outlet pressure boundary condition, we believe it reasonable to do the same for computing the Bernoulli pressure jump at porosity discontinuities.

commentnote:Behavior with parallel execution

In certain cases multiple porosity jump faces may be connected by cells in a chain. For example at corners or when porous medium zones are one-cell wide. In such scenarios, the two-term expansion for the determination of the face pressure on the downstream side requires a considerably extended stencil which may not be accommodated by the number of ghosting layers set in the kernels. For this reason, the default value of "allow_two_term_expansion_on_bernoulli_faces" is false. If the user wants to enable two-term expansion for the pressure computation on the porosity jump faces, special attention should be paid to moving the porosity jump faces sufficiently far from each other (at least two layers if skewness correction is disabled and three if it is enabled) or adding additional layers of ghosted elements (which can potentially increase local computational and memory costs) using the following FVKernel parameter "ghost_layers".

Input Parameters

  • porosityThe porosity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The porosity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

  • rhoThe density. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The density. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

  • uThe x-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The x-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

Required Parameters

  • allow_two_term_expansion_on_bernoulli_facesFalseSwitch to enable the two-term extrapolation on porosity jump faces. WARNING: This might lead to crushes in parallel runs if porosity jump faces are connected with one cell (usually corners) due to the insufficient number of ghosted layers.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Switch to enable the two-term extrapolation on porosity jump faces. WARNING: This might lead to crushes in parallel runs if porosity jump faces are connected with one cell (usually corners) due to the insufficient number of ghosted layers.

  • arrayFalseTrue to make this variable a array variable regardless of number of components. If 'components' > 1, this will automatically be set to true.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:True to make this variable a array variable regardless of number of components. If 'components' > 1, this will automatically be set to true.

  • array_var_component_namesOnly for use with array variables, allows setting custom names for each array variable component. If this not set, the default name for each array variable componenet is `base_name`+'_'+component number. If used, a name must be provided for each component and the values are used to name the components as `base_name`+'_'+ `array_var_component_names[component]`.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Only for use with array variables, allows setting custom names for each array variable component. If this not set, the default name for each array variable componenet is `base_name`+'_'+component number. If used, a name must be provided for each component and the values are used to name the components as `base_name`+'_'+ `array_var_component_names[component]`.

  • blockThe list of blocks (ids or names) that this object will be applied

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:The list of blocks (ids or names) that this object will be applied

  • cache_cell_gradientsTrueWhether to cache cell gradients or re-compute them.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to cache cell gradients or re-compute them.

  • components1Number of components for an array variable

    Default:1

    C++ Type:unsigned int

    Controllable:No

    Description:Number of components for an array variable

  • disable_p_refinementFalseTrue to disable p-refinement for this variable. Note that because this happens on the family basis, users need to have this flag consistently set for all variables in the same family. Currently MOOSE disables p-refinement for variables in the following families by default: LAGRANGE NEDELEC_ONE RAVIART_THOMAS LAGRANGE_VEC CLOUGH BERNSTEIN and RATIONAL_BERNSTEIN.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:True to disable p-refinement for this variable. Note that because this happens on the family basis, users need to have this flag consistently set for all variables in the same family. Currently MOOSE disables p-refinement for variables in the following families by default: LAGRANGE NEDELEC_ONE RAVIART_THOMAS LAGRANGE_VEC CLOUGH BERNSTEIN and RATIONAL_BERNSTEIN.

  • face_interp_methodaverageSwitch that can select between face interpolation methods.

    Default:average

    C++ Type:MooseEnum

    Options:average, skewness-corrected

    Controllable:No

    Description:Switch that can select between face interpolation methods.

  • familyMONOMIALSpecifies the family of FE shape functions to use for this variable.

    Default:MONOMIAL

    C++ Type:MooseEnum

    Options:LAGRANGE, MONOMIAL, HERMITE, SCALAR, HIERARCHIC, CLOUGH, XYZ, SZABAB, BERNSTEIN, L2_LAGRANGE, L2_HIERARCHIC, NEDELEC_ONE, LAGRANGE_VEC, MONOMIAL_VEC, RAVIART_THOMAS, RATIONAL_BERNSTEIN, SIDE_HIERARCHIC, L2_HIERARCHIC_VEC, L2_LAGRANGE_VEC, L2_RAVIART_THOMAS

    Controllable:No

    Description:Specifies the family of FE shape functions to use for this variable.

  • fvTrueTrue to make this variable a finite volume variable

    Default:True

    C++ Type:bool

    Controllable:No

    Description:True to make this variable a finite volume variable

  • initial_conditionSpecifies a constant initial condition for this variable

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies a constant initial condition for this variable

  • initial_from_file_varGives the name of a variable for which to read an initial condition from a mesh file

    C++ Type:std::string

    Controllable:No

    Description:Gives the name of a variable for which to read an initial condition from a mesh file

  • orderCONSTANTOrder of the FE shape function to use for this variable (additional orders not listed here are allowed, depending on the family).

    Default:CONSTANT

    C++ Type:MooseEnum

    Options:CONSTANT, FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH, SEVENTH, EIGHTH, NINTH, TENTH, ELEVENTH, TWELFTH, THIRTEENTH, FOURTEENTH, FIFTEENTH, SIXTEENTH, SEVENTEENTH, EIGHTTEENTH, NINETEENTH, TWENTIETH, TWENTYFIRST, TWENTYSECOND, TWENTYTHIRD, TWENTYFOURTH, TWENTYFIFTH, TWENTYSIXTH, TWENTYSEVENTH, TWENTYEIGHTH, TWENTYNINTH, THIRTIETH, THIRTYFIRST, THIRTYSECOND, THIRTYTHIRD, THIRTYFOURTH, THIRTYFIFTH, THIRTYSIXTH, THIRTYSEVENTH, THIRTYEIGHTH, THIRTYNINTH, FORTIETH, FORTYFIRST, FORTYSECOND, FORTYTHIRD

    Controllable:No

    Description:Order of the FE shape function to use for this variable (additional orders not listed here are allowed, depending on the family).

  • pressure_drop_form_factorsUser-supplied form loss coefficients to be applied over the sidesets listed above

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:User-supplied form loss coefficients to be applied over the sidesets listed above

  • pressure_drop_sidesetsSidesets over which form loss coefficients are to be applied

    C++ Type:std::vector<BoundaryName>

    Controllable:No

    Description:Sidesets over which form loss coefficients are to be applied

  • solver_sysnl0If this variable is a solver variable, this is the solver system to which it should be added.

    Default:nl0

    C++ Type:SolverSystemName

    Controllable:No

    Description:If this variable is a solver variable, this is the solver system to which it should be added.

  • two_term_boundary_expansionTrueWhether to use a two-term Taylor expansion to calculate boundary face values. If the two-term expansion is used, then the boundary face value depends on the adjoining cell center gradient, which itself depends on the boundary face value. Consequently an implicit solve is used to simultaneously solve for the adjoining cell center gradient and boundary face value(s).

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to use a two-term Taylor expansion to calculate boundary face values. If the two-term expansion is used, then the boundary face value depends on the adjoining cell center gradient, which itself depends on the boundary face value. Consequently an implicit solve is used to simultaneously solve for the adjoining cell center gradient and boundary face value(s).

  • v0The y-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    Default:0

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The y-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

  • w0The z-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

    Default:0

    C++ Type:MooseFunctorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The z-component of velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • eigenFalseTrue to make this variable an eigen variable

    Default:False

    C++ Type:bool

    Controllable:No

    Description:True to make this variable an eigen variable

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Set the enabled status of the MooseObject.

  • outputsVector of output names where you would like to restrict the output of variables(s) associated with this object

    C++ Type:std::vector<OutputName>

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

  • scalingSpecifies a scaling factor to apply to this variable

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:Specifies a scaling factor to apply to this variable

  • use_dualFalseTrue to use dual basis for Lagrange multipliers

    Default:False

    C++ Type:bool

    Controllable:No

    Description:True to use dual basis for Lagrange multipliers

Advanced Parameters

References

  1. April J Novak, Ling Zou, John W Peterson, David Andrs, Joe Kelly, Rachel N Slaybaugh, Richard C Martineau, and Hands D Gougar. Pronghorn theory manual. Technical Report, Idaho National Lab.(INL), Idaho Falls, ID (United States), 2018.[BibTeX]