- momentum_componentThe component of the momentum equation that this kernel applies to.
C++ Type:MooseEnum
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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 post-processor, 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 post-processor, 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 post-processor, 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 post-processor, 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 post-processor, 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 post-processor, or a number.
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
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
Unit:(no unit assumed)
Controllable:No
Description:Boolean to choose the type of medium.
- muThe dynamic viscosity. A functor is any of the following: a variable, a functor material property, a function, a post-processor, 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 post-processor, or a number.
- porosity1The porosity. A functor is any of the following: a variable, a functor material property, a function, a post-processor, 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 post-processor, or a number.
- 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.
- speedThe magnitude of the interstitial velocity. A functor is any of the following: a variable, a functor material property, a function, a post-processor, 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 post-processor, or a number.
- standard_friction_formulationTrueBoolean to choose the type of friction formulation.
Default:True
C++ Type:bool
Unit:(no unit assumed)
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 post-processor, 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 post-processor, or a number.
- 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
Unit:(no unit assumed)
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.
- 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 post-processor, 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 post-processor, 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 post-processor, 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 post-processor, 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>
Unit:(no unit assumed)
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>
Unit:(no unit assumed)
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>
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
Controllable:No
Description:Whether to use point neighbors, which introduces additional ghosting to that used for simple face neighbors.