LinearWCNSFVMomentumFlux

This kernel adds the contributions of two terms that require face fluxes in the momentum equations of the incompressible/weakly-compressible Navier Stokes equations:

  • Momentum advection term

  • Viscous stress term

We discuss these two terms in detail below.

Momentum advection term

This term is described by the (ρuu)\nabla \cdot \left(\rho\vec{u} \otimes \vec{u}\right) component of the incompressible/weakly-compressible Navier Stokes momentum equation.

The face mass flux is provided by the RhieChowMassFlux object which uses pressure gradients and the discrete momentum equation to compute face velocities and mass fluxes. For more information on the expression that is used, see SIMPLE.

Once the face flux is given ($(\rho \vec{u}\cdot \vec{n})_{RC} $), the integral of the advection term over a cell can be expressed as:

VC(ρuu)dVf(ρun)RCufSf\int\limits_{V_C} \nabla \cdot \left(\rho\vec{u} \otimes \vec{u}\right) dV \approx \sum\limits_f (\rho \vec{u}\cdot \vec{n})_{RC} \vec{u}_f |S_f| \,

where \vec{u}_f is a face velocity. This face velocity acts as the advected quantity and a linear average or upwind scheme can be used to compute it. This kernel adds the face contribution for each face ff to the right hand side and matrix.

Viscous stress term

This term is described by the (μeff(u+uT23uI))\nabla \cdot \left(\mu_\text{eff} \left(\nabla\vec{u} +\nabla \vec{u}^T - \frac{2}{3} \nabla \cdot \vec{u} \mathbb{I} \right)\right) component of the incompressible/weakly-compressible Navier Stokes momentum equation. Using the divergence theorem and the finite volume approximation, this term can be expressed as

VC(μeff(u+uT23uI))dVfμeff(u+uT23uI)nfSf\int\limits_{V_C} \nabla \cdot \left(\mu_\text{eff} \left(\nabla\vec{u} +\nabla \vec{u}^T - \frac{2}{3} \nabla \cdot \vec{u} \mathbb{I} \right)\right) dV \approx \sum\limits_f \mu_\text{eff} \left(\nabla\vec{u} +\nabla \vec{u}^T - \frac{2}{3} \nabla \cdot \vec{u} \mathbb{I} \right) \cdot \vec{n}_f |S_f| \,

where the first term (μeffunfSf\mu_\text{eff}\nabla\vec{u} \cdot \vec{n}_f |S_f|) can be discretized using the same method as in LinearFVDiffusion. The other two terms, ((μeffuT23uI)nfSf\left(\mu_\text{eff}\nabla\vec{u}^T - \frac{2}{3} \nabla \cdot \vec{u} \mathbb{I} \right)\cdot \vec{n}_f |S_f|) are treated explicitly meaning that they don't contribute to the system matrix, only to the right hand side.

For incompressible simulations with constant viscosity fields, the last two terms are provably 0. Furthermore, in most scenarios, these two terms are negligible compared to the first term so the user can elect to disable them using "use_deviatoric_terms" parameter.

Similarly to LinearFVDiffusion, once can select to utilize nonorthogonal corrections for the first term using the "use_nonorthogonal_correction" parameter.

Input Parameters

  • momentum_componentThe component of the momentum equation that this kernel applies to.

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:x, y, z

    Controllable:No

    Description:The component of the momentum equation that this kernel applies to.

  • muThe diffusion coefficient. 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 diffusion coefficient. A functor is any of the following: a variable, a functor material property, a function, a post-processor, or a number.

  • rhie_chow_user_objectThe rhie-chow user-object which is used to determine the face velocity.

    C++ Type:UserObjectName

    Unit:(no unit assumed)

    Controllable:No

    Description:The rhie-chow user-object which is used to determine the face velocity.

  • uThe velocity in the x direction.

    C++ Type:SolverVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The velocity in the x direction.

  • variableThe name of the variable whose linear system this object contributes to

    C++ Type:LinearVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the variable whose linear system this object contributes to

Required Parameters

  • advected_interp_methodupwindThe interpolation to use for the advected quantity. Options are 'upwind', 'average', 'sou' (for second-order upwind), 'min_mod', 'vanLeer', 'quick', and 'skewness-corrected' with the default being 'upwind'.

    Default:upwind

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:average, upwind, sou, min_mod, vanLeer, quick, skewness-corrected

    Controllable:No

    Description:The interpolation to use for the advected quantity. Options are 'upwind', 'average', 'sou' (for second-order upwind), 'min_mod', 'vanLeer', 'quick', and 'skewness-corrected' with the default being 'upwind'.

  • 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

  • force_boundary_executionFalseWhether to force execution of this object on all external boundaries.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to force execution of this object on all external boundaries.

  • use_deviatoric_termsFalseIf deviatoric terms in the stress terms need to be used.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:If deviatoric terms in the stress terms need to be used.

  • use_nonorthogonal_correctionTrueIf the nonorthogonal correction should be used when computing the normal gradient.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:If the nonorthogonal correction should be used when computing the normal gradient.

  • vThe velocity in the y direction.

    C++ Type:SolverVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The velocity in the y direction.

  • wThe velocity in the z direction.

    C++ Type:SolverVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The velocity in the z direction.

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)

    Options:nontime, system

    Controllable:No

    Description:The tag for the matrices this Kernel should fill

  • vector_tagsrhsThe tag for the vectors this Kernel should fill

    Default:rhs

    C++ Type:MultiMooseEnum

    Unit:(no unit assumed)

    Options:rhs, time

    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.

Parallel Ghosting Parameters