- momentum_componentThe component of the momentum equation that this kernel applies to.
C++ Type:MooseEnum
Controllable:No
Description:The component of the momentum equation that this kernel applies to.
- rhie_chow_user_objectThe rhie-chow user-object
C++ Type:UserObjectName
Controllable:No
Description:The rhie-chow user-object
- 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.
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this residual object operates on
PINSFVMomentumFriction
This kernel adds the friction term to the porous media Navier Stokes momentum equations. This kernel must be used with the canonical PINSFV variable set, e.g. pressure and superficial velocity, and supports Darcy and Forchheimer friction models in two flavors:
Standard friction formulation
Set parameter: "standard_friction_formulation" = 'true'
Darcy drag model (1) Forchheimer drag model (2)
Simplified friction formulation
Set parameter: "standard_friction_formulation" = 'false'
Darcy drag model (3) Forchheimer drag model (4)
where is the i-th component of the friction force (denoted by in Finite Volume Incompressible Porous media Navier Stokes, Eq. (1)), the friction factor, which may be anisotropic, the fluid dynamic viscosity, the fluid density, and the i-th component of the fluid superficial velocity. We have used a negative sign to match the notation used in Finite Volume Incompressible Porous media Navier Stokes, Eq. (1) where the friction force is on the right-hand-side of the equation. When moved to the left-hand side, which is done when setting up a Newton scheme, the term becomes positive which is what is shown in the source code itself. Darcy and Forchheimer terms represent fundamentally different friction effects. Darcy is meant to represent viscous effects and as shown in Eq. (1),Eq. (3), it has a linear dependence on the fluid velocity. Meanwhile, Forchheimer is meant to represent inertial effects and as shown in Eq. (2), Eq. (4) it has a quadratic dependence on velocity.
For the non-porous medium version of the above equations set parameter "is_porous_medium" to false
. (epsilon = 1)
Computation of friction factors and pre-factors
To outline how friction factors for Darcy and Forchheimer may be calculated, let's consider a specific example. We'll draw from the Ergun equation, which is outlined here. Let's consider the form:
where is the bed length, is the fluid dynamic viscosity and is representative of the diameter of the pebbles in the pebble bed. We can divide the equation through by , recognize that denotes such that , multiply the equation through by , move all terms to the left-hand-side, and do some term manipulation in order to yield:
If we define the hydraulic diameter as , then the above equation can be rewritten as:
Let's introduce the interstitial fluid velocity to rewrite the above equation as:
Then dividing through by :
(5)
We are now very close the forms for Darcy and Forchheimer espoused by Holzmann and SimScale which is:
(6)
Looking at Eq. (6) we can rearrange Eq. (5):
and arrive at the Ergun expression for the Darcy coefficient:
and the Ergun expression for the Forchheimer coefficient:
where we have made the multiplication explicit to make the 1.75 factor from the Ergun wikipedia page more recognizable. We perform a similar separation in the implementation of the Ergun Forchheimer coefficient outlined in FunctorErgunDragCoefficients.
Input Parameters
- Darcy_nameName of the Darcy coefficients property. 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:Name of the Darcy coefficients property. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- Forchheimer_nameName of the Forchheimer coefficients property. 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:Name of the Forchheimer coefficients property. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- 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
- is_porous_mediumTrueBoolean to choose the type of medium.
Default:True
C++ Type:bool
Controllable:No
Description:Boolean to choose the type of medium.
- matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)
Default:False
C++ Type:bool
Controllable:No
Description:Whether this object is only doing assembly to matrices (no vectors)
- muThe dynamic viscosity. 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 dynamic viscosity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- porosity1The porosity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
Default:1
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.
- speedThe magnitude of the interstitial 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 magnitude of the interstitial velocity. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- standard_friction_formulationTrueBoolean to choose the type of friction formulation.
Default:True
C++ Type:bool
Controllable:No
Description:Boolean to choose the type of friction formulation.
- uThe velocity in the x direction. Superficial in the case of porous treatment, interstitial otherwise. 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 velocity in the x direction. Superficial in the case of porous treatment, interstitial otherwise. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- vThe velocity in the y direction. Superficial in the case of porous treatment, interstitial otherwise. 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 velocity in the y direction. Superficial in the case of porous treatment, interstitial otherwise. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
- wThe velocity in the z direction. Superficial in the case of porous treatment, interstitial otherwise. 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 velocity in the z direction. Superficial in the case of porous treatment, interstitial otherwise. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the vectors this Kernel should fill
Contribution To Tagged Field Data 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.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- ghost_layers1The number of layers of elements to ghost.
Default:1
C++ Type:unsigned short
Controllable:No
Description:The number of layers of elements to ghost.
- use_point_neighborsFalseWhether to use point neighbors, which introduces additional ghosting to that used for simple face neighbors.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to use point neighbors, which introduces additional ghosting to that used for simple face neighbors.
Parallel Ghosting Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.