- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Unit:(no unit assumed)
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
- muDynamic 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:Dynamic viscosity. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.
- mu_tThe turbulent 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 turbulent viscosity. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.
- rhoDensity. 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:Density. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.
- uThe velocity in the x direction. 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. 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 boundary condition applies to
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this boundary condition applies to
INSFVTurbulentViscosityWallFunction
Implements wall function boundary condition for the turbulent dynamic viscosity .
The boundary conditions are different depending on where the centroid of the cell near the identified boundary lies in the wall function profile. Taking the non-dimensional wall distance as , the three regions of the boundary layer are identified as follows:
Sub-laminar region:
Buffer region:
Logarithmic region:
The wall function goal is to set the total viscosity at the wall , decomposed as , such that the wall shear stress is accurately captured without the need of fully resolving the gradients at the near wall region.
where:
is the total viscosity evaluated at the wall face
is the turbulent viscosity, evaluated at the wall for the purpose of this boundary condition
is the dynamic viscosity, evaluated at the wall for the purpose of this boundary condition
is the wall-shear stress
is the wall-parallel velocity at the centroid
is the wall normal distance to the centroid
To impose a correct boundary condition for , as seen in the Equation above, we need to compute using analytical relationships between the wall shear stress and the dimensionless wall distance . For this purpose, four different formulations are supported as defined by the "wall_treatment" parameter.
To set the grid spacing for the first cell near the wall in your mesh, we recommend using the RANSYPlusAux auxiliary kernel. to estimate the dimensionless wall distance .
Equilibrium wall functions using a Newton solve
This treatment can be enabled by setting the parameter "wall_treatment" to eq_newton
. The treatment uses equilibrium wall functions where the following formulation is used for the turbulent viscosity.
where:
is the density
is the dynamic viscosity
is the friction velocity and is the wall friction
is the distance from the boundary to the center of the near-wall cell
is the parallel velocity to the boundary computed at the center of the near-wall cell
For the buffer layer, a linear blending method is used that defines the turbulent viscosity as follows:
Note that for and we recover the sub-laminar and logarithmic profiles, respectively.
Here the standard or equilibrium law of the wall defines and as follows:
where:
is the molecular dynamic viscosity
is a closure parameter
is the von Kármán constant
In this method, we iterate on the wall function and to find via a Newton solve. Once is defined, is computed followed by the determination of the boundary turbulent viscosity.
eq_newton
solve will converge the fastest for simple flow geometries but it may diverge for more complicated flows. Also, the code will run if the center of the near wall cells are in the buffer layer. However, using a mesh that contains nodes in the buffer layer is not recommended.
Equilibrium wall functions using a fixed-point solve
This treatment is enabled by setting parameter "wall_treatment" to eq_incremental
. The method uses the same equilibrium wall treatment than the Newton solve. However, the main difference is that, instead of computing for the near wall cells, a fixed point iteration is performed in the wall functions to find .
eq_incremental
has a larger convergence radius than the Newton solve and internal controls are added to avoid issues converging the wall function at the buffer layer. However, it will take more iterations than the Newton solve to converge. Using a mesh that contains nodes in the buffer layer is not recommended.
Equilibrium wall functions using linearized wall function
This treatment is enabled by setting parameter "wall_treatment" to eq_linearized
. The treatment uses a linearized version of the wall function, in which a linear Taylor approximation is used for the natural logarithm. This approximation results in a quadratic equation that is solved directly for . Then, is computed from .
eq_linearized
will work fast as there is no nonlinear solve at the near-wall region. However, the method may introduce significant near-wall errors. The method is designed to be used in conjunction with porous media treatment and not necessarily for free flow.
Non-equilibrium wall functions
This treatment is enabled by setting parameter "wall_treatment" to neq
. In this case, the non-dimensional wall distance is computed from the turbulent kinetic energy near the wall as follows:
where:
is a fitting parameter
is the turbulent kinetic energy at the centroid of the near-wall cell
Then, the turbulent viscosity is defined as follows:
For the buffer layer, a linear blending method is used that defines the turbulent viscosity as follows:
neq
should mainly be used for detached flow or other cases for which equilibrium wall functions are not valid. One should try to use equilibrium wall functions when possible.
Input Parameters
- C_mu0.09Coupled turbulent kinetic energy closure.
Default:0.09
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Coupled turbulent kinetic energy closure.
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements
- tkeThe turbulent kinetic energy. 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 turbulent kinetic energy. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.
- vThe velocity in the y direction. 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. 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. 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. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.
- wall_treatmentneqThe method used for computing the wall functions
Default:neq
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:The method used for computing the wall functions
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
- 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.