Discontinuous Galerkin Finite Element (DGFE) Navier-Stokes
MOOSE can assemble a compatible incompressible flow and energy-transport discretization using discontinuous finite element spaces. Unlike the hybrid CG-DG discretization, the pressure is also discontinuous, so its momentum contribution requires numerical flux terms on element faces.
This page describes the tested channel-flow demonstration in dg.i. It uses first-order discontinuous velocity, piecewise-constant pressure, and piecewise-constant temperature on triangular elements.
Compatible flow and scalar transport
The concept of compatibility for coupled flow and transport was introduced by (Dawson et al., 2004). A compatible discretization retains the accuracy and conservation properties of the transport method when it uses a discrete velocity field. In (Cesmelioglu and Rhebergen, 2022) the authors proved that if a Stokes or Navier-Stokes discretization is exactly mass conserving, which requires two properties
the velocity be divergence conforming, e.g. across element faces
that where is the space of velocity functions and is the space of pressure functions,
then the space of the transport functions is not tied to the space of the pressure functions in order to be compatible. (The IP-HDG discretization in HDG Navier-Stokes is exactly mass conserving; the L-HDG qualification is discussed there.) However, for non-free flow such as Darcy, the transport test space must be contained in the pressure test space, . The same inclusion is also required, at least in our experience, for a compatible free-flow discretization when mass conservation is not exact. Intuitively this makes sense because the discretization no longer satisfies the strong form of the mass conservation equation, but instead only does so weakly against pressure test functions, which are the mass-equation test functions. Every transport test function must therefore also be an admissible pressure test function for its discrete balance to use the same mass conservation statement. Equal transport and pressure spaces are sufficient but not necessary. In the example below, pressure and temperature both use a constant MONOMIAL space and therefore satisfy this inclusion.
Variables
The velocity components u and v use first-order MONOMIAL bases. Pressure and temperature use constant MONOMIAL bases, so all four solution fields are discontinuous across element faces.
[Variables<<<{"href": "../../syntax/Variables/index.html"}>>>]
[u]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
[]
[v]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
[]
[pressure]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
[]
[temperature]
family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg-stokes.i)Volume and interior-face terms
The base input assembles the Stokes, mass-continuity, and temperature-diffusion terms. MatDiffusion supplies the element-volume diffusion terms and DGDiffusion supplies their interior numerical fluxes. The pressure gradient is integrated by parts: PressureGradient supplies the volume term, while INSPressureGradientDGKernel uses the centered pressure to supply the interior-face term. Mass continuity is assembled with ADConservativeAdvection and ADDGAdvection by advecting the constant quantity -1 with the computed velocity.
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
[momentum_x_diffusion]
type = MatDiffusion<<<{"description": "Diffusion equation Kernel that takes an isotropic Diffusivity from a material property", "href": "../../source/kernels/MatDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
diffusivity<<<{"description": "The diffusivity value or material property"}>>> = mu
[]
[momentum_x_pressure]
type = PressureGradient<<<{"description": "Implements the pressure gradient term for one of the Navier Stokes momentum equations.", "href": "../../source/kernels/PressureGradient.html"}>>>
integrate_p_by_parts<<<{"description": "Whether to integrate the pressure term by parts"}>>> = true
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
pressure<<<{"description": "pressure"}>>> = pressure
component<<<{"description": "number of component (0 = x, 1 = y, 2 = z)"}>>> = 0
[]
[momentum_y_diffusion]
type = MatDiffusion<<<{"description": "Diffusion equation Kernel that takes an isotropic Diffusivity from a material property", "href": "../../source/kernels/MatDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
diffusivity<<<{"description": "The diffusivity value or material property"}>>> = mu
[]
[momentum_y_pressure]
type = PressureGradient<<<{"description": "Implements the pressure gradient term for one of the Navier Stokes momentum equations.", "href": "../../source/kernels/PressureGradient.html"}>>>
integrate_p_by_parts<<<{"description": "Whether to integrate the pressure term by parts"}>>> = true
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
pressure<<<{"description": "pressure"}>>> = pressure
component<<<{"description": "number of component (0 = x, 1 = y, 2 = z)"}>>> = 1
[]
[mass]
type = ADConservativeAdvection<<<{"description": "Conservative form of $\\nabla \\cdot \\vec{v} u$ which in its weak form is given by: $(-\\nabla \\psi_i, \\vec{v} u)$. Velocity can be given as 1) a variable, for which the gradient is automatically taken, 2) a vector variable, or a 3) vector material.", "href": "../../source/kernels/ConservativeAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = pressure
velocity_material<<<{"description": "Velocity vector given as a material"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = -1
[]
[temperature_diffusion]
type = MatDiffusion<<<{"description": "Diffusion equation Kernel that takes an isotropic Diffusivity from a material property", "href": "../../source/kernels/MatDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
diffusivity<<<{"description": "The diffusivity value or material property"}>>> = 1
[]
[]
[DGKernels<<<{"href": "../../syntax/DGKernels/index.html"}>>>]
[momentum_x_diffusion]
type = DGDiffusion<<<{"description": "Computes residual contribution for the diffusion operator using discontinous Galerkin method.", "href": "../../source/dgkernels/DGDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
sigma<<<{"description": "sigma"}>>> = ${sigma}
epsilon<<<{"description": "epsilon"}>>> = -1
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[momentum_y_diffusion]
type = DGDiffusion<<<{"description": "Computes residual contribution for the diffusion operator using discontinous Galerkin method.", "href": "../../source/dgkernels/DGDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
sigma<<<{"description": "sigma"}>>> = ${sigma}
epsilon<<<{"description": "epsilon"}>>> = -1
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[momentum_x_pressure]
type = INSPressureGradientDGKernel<<<{"description": "Adds the pressure term on interior faces. This is appropriate when the pressure term is integrated by parts", "href": "../../source/dgkernels/INSPressureGradientDGKernel.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
pressure<<<{"description": "The current value of the pressure"}>>> = pressure
component<<<{"description": "(0,1,2) = (x,y,z) for which momentum component this BC is applied to"}>>> = 0
[]
[momentum_y_pressure]
type = INSPressureGradientDGKernel<<<{"description": "Adds the pressure term on interior faces. This is appropriate when the pressure term is integrated by parts", "href": "../../source/dgkernels/INSPressureGradientDGKernel.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
pressure<<<{"description": "The current value of the pressure"}>>> = pressure
component<<<{"description": "(0,1,2) = (x,y,z) for which momentum component this BC is applied to"}>>> = 1
[]
[mass_convection]
type = ADDGAdvection<<<{"description": "Adds internal face advection flux contributions for discontinuous Galerkin discretizations", "href": "../../source/dgkernels/ADDGAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = pressure
velocity<<<{"description": "Velocity vector"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = -1
[]
[temperature_diffusion]
type = DGDiffusion<<<{"description": "Computes residual contribution for the diffusion operator using discontinous Galerkin method.", "href": "../../source/dgkernels/DGDiffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
epsilon<<<{"description": "epsilon"}>>> = -1
sigma<<<{"description": "sigma"}>>> = ${sigma}
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg-stokes.i)The including input adds the nonlinear momentum and temperature advection terms. ADConservativeAdvection supplies the element-volume terms, and ADDGAdvection supplies upwind numerical fluxes on interior faces.
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
[momentum_x_convection]
type = ADConservativeAdvection<<<{"description": "Conservative form of $\\nabla \\cdot \\vec{v} u$ which in its weak form is given by: $(-\\nabla \\psi_i, \\vec{v} u)$. Velocity can be given as 1) a variable, for which the gradient is automatically taken, 2) a vector variable, or a 3) vector material.", "href": "../../source/kernels/ConservativeAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
velocity_material<<<{"description": "Velocity vector given as a material"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhou
[]
[momentum_y_convection]
type = ADConservativeAdvection<<<{"description": "Conservative form of $\\nabla \\cdot \\vec{v} u$ which in its weak form is given by: $(-\\nabla \\psi_i, \\vec{v} u)$. Velocity can be given as 1) a variable, for which the gradient is automatically taken, 2) a vector variable, or a 3) vector material.", "href": "../../source/kernels/ConservativeAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
velocity_material<<<{"description": "Velocity vector given as a material"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhov
[]
[temperature_convection]
type = ADConservativeAdvection<<<{"description": "Conservative form of $\\nabla \\cdot \\vec{v} u$ which in its weak form is given by: $(-\\nabla \\psi_i, \\vec{v} u)$. Velocity can be given as 1) a variable, for which the gradient is automatically taken, 2) a vector variable, or a 3) vector material.", "href": "../../source/kernels/ConservativeAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
velocity_material<<<{"description": "Velocity vector given as a material"}>>> = velocity
[]
[]
[DGKernels<<<{"href": "../../syntax/DGKernels/index.html"}>>>]
[momentum_x_convection]
type = ADDGAdvection<<<{"description": "Adds internal face advection flux contributions for discontinuous Galerkin discretizations", "href": "../../source/dgkernels/ADDGAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
velocity<<<{"description": "Velocity vector"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhou
[]
[momentum_y_convection]
type = ADDGAdvection<<<{"description": "Adds internal face advection flux contributions for discontinuous Galerkin discretizations", "href": "../../source/dgkernels/ADDGAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
velocity<<<{"description": "Velocity vector"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhov
[]
[temperature_convection]
type = ADDGAdvection<<<{"description": "Adds internal face advection flux contributions for discontinuous Galerkin discretizations", "href": "../../source/dgkernels/ADDGAdvection.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
velocity<<<{"description": "Velocity vector"}>>> = velocity
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg.i)Boundary terms
External faces complete the weak forms. DGFunctionDiffusionDirichletBC weakly imposes the velocity and temperature diffusion conditions, ADConservativeAdvectionBC supplies inlet and outlet advective fluxes, and INSPressureGradientBC supplies the pressure term on the inlet and wall boundaries.
[BCs<<<{"href": "../../syntax/BCs/index.html"}>>>]
[diffusion_momentum_x_in]
type = DGFunctionDiffusionDirichletBC<<<{"description": "Diffusion Dirichlet boundary condition for discontinuous Galerkin method.", "href": "../../source/bcs/DGFunctionDiffusionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
sigma<<<{"description": "Sigma"}>>> = ${sigma}
epsilon<<<{"description": "Epsilon"}>>> = -1
function<<<{"description": "The forcing function."}>>> = u_inlet
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[diffusion_momentum_y_in]
type = DGFunctionDiffusionDirichletBC<<<{"description": "Diffusion Dirichlet boundary condition for discontinuous Galerkin method.", "href": "../../source/bcs/DGFunctionDiffusionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
sigma<<<{"description": "Sigma"}>>> = ${sigma}
epsilon<<<{"description": "Epsilon"}>>> = -1
function<<<{"description": "The forcing function."}>>> = 0
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[diffusion_temperature_in]
type = DGFunctionDiffusionDirichletBC<<<{"description": "Diffusion Dirichlet boundary condition for discontinuous Galerkin method.", "href": "../../source/bcs/DGFunctionDiffusionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
function<<<{"description": "The forcing function."}>>> = 1
epsilon<<<{"description": "Epsilon"}>>> = -1
sigma<<<{"description": "Sigma"}>>> = ${sigma}
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
[]
[diffusion_momentum_x_walls]
type = DGFunctionDiffusionDirichletBC<<<{"description": "Diffusion Dirichlet boundary condition for discontinuous Galerkin method.", "href": "../../source/bcs/DGFunctionDiffusionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom top'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
sigma<<<{"description": "Sigma"}>>> = ${sigma}
epsilon<<<{"description": "Epsilon"}>>> = -1
function<<<{"description": "The forcing function."}>>> = 0
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[diffusion_momentum_y_walls]
type = DGFunctionDiffusionDirichletBC<<<{"description": "Diffusion Dirichlet boundary condition for discontinuous Galerkin method.", "href": "../../source/bcs/DGFunctionDiffusionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom top'
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
sigma<<<{"description": "Sigma"}>>> = ${sigma}
epsilon<<<{"description": "Epsilon"}>>> = -1
function<<<{"description": "The forcing function."}>>> = 0
diff<<<{"description": "The diffusion (or thermal conductivity or viscosity) coefficient."}>>> = mu
[]
[advection_mass_in]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = pressure
velocity_function<<<{"description": "Function describing the values of velocity on the boundary."}>>> = v_inlet
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = -1
[]
[advection_mass_out]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = pressure
velocity_mat_prop<<<{"description": "Velocity vector as a material property. Should be provided when we want the velocity value to be determined implicitly (e.g. we don't have a Dirichlet condition)"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = -1
[]
[implicit_pressure_x_in]
type = INSPressureGradientBC<<<{"description": "Adds an implicit pressure term on a boundary. This is appropriate on wall and inlet boundaries when the pressure term is integrated by parts", "href": "../../source/bcs/INSPressureGradientBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
component<<<{"description": "(0,1,2) = (x,y,z) for which momentum component this BC is applied to"}>>> = 0
pressure<<<{"description": "The current value of the pressure"}>>> = pressure
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
[]
[implicit_pressure_y_in_and_walls]
type = INSPressureGradientBC<<<{"description": "Adds an implicit pressure term on a boundary. This is appropriate on wall and inlet boundaries when the pressure term is integrated by parts", "href": "../../source/bcs/INSPressureGradientBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'left top bottom'
component<<<{"description": "(0,1,2) = (x,y,z) for which momentum component this BC is applied to"}>>> = 1
pressure<<<{"description": "The current value of the pressure"}>>> = pressure
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg-stokes.i)The including input adds the inlet and outlet momentum and temperature advection conditions:
[BCs<<<{"href": "../../syntax/BCs/index.html"}>>>]
[advection_momentum_x_in]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
velocity_function<<<{"description": "Function describing the values of velocity on the boundary."}>>> = v_inlet
primal_dirichlet_value<<<{"description": "The value of the primal variable on the boundary."}>>> = u_inlet
primal_coefficient<<<{"description": "If a primal Dirichlet value is supplied, then a coefficient may be optionally multiplied that multiples the Dirichlet value"}>>> = rho
[]
[advection_momentum_y_in]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
velocity_function<<<{"description": "Function describing the values of velocity on the boundary."}>>> = v_inlet
primal_dirichlet_value<<<{"description": "The value of the primal variable on the boundary."}>>> = 0
primal_coefficient<<<{"description": "If a primal Dirichlet value is supplied, then a coefficient may be optionally multiplied that multiples the Dirichlet value"}>>> = rho
[]
[advection_temperature_in]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
velocity_function<<<{"description": "Function describing the values of velocity on the boundary."}>>> = v_inlet
primal_dirichlet_value<<<{"description": "The value of the primal variable on the boundary."}>>> = 1
[]
[advection_momentum_x_out]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
velocity_mat_prop<<<{"description": "Velocity vector as a material property. Should be provided when we want the velocity value to be determined implicitly (e.g. we don't have a Dirichlet condition)"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhou
[]
[advection_momentum_y_out]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = v
velocity_mat_prop<<<{"description": "Velocity vector as a material property. Should be provided when we want the velocity value to be determined implicitly (e.g. we don't have a Dirichlet condition)"}>>> = velocity
advected_quantity<<<{"description": "An optional material property to be advected. If not supplied, then the variable will be used."}>>> = rhov
[]
[advection_temperature_out]
type = ADConservativeAdvectionBC<<<{"description": "Boundary condition for advection when it is integrated by parts. Supports Dirichlet (inlet-like) and implicit (outlet-like) conditions.", "href": "../../source/bcs/ConservativeAdvectionBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
velocity_mat_prop<<<{"description": "Velocity vector as a material property. Should be provided when we want the velocity value to be determined implicitly (e.g. we don't have a Dirichlet condition)"}>>> = velocity
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg.i)Conservation demonstration
The demonstration uses a 10-by-2 triangular channel mesh with unit density, a unit-mean parabolic inlet x-velocity, and unit inlet temperature. Materials construct the velocity and momentum properties used by the conservative kernels, and a steady Newton solve computes the coupled flow and temperature fields.
The dg test compares the outlet side averages against CSV gold values. Both the outlet x-velocity and outlet temperature are one, matching their inlet values and demonstrating mass conservation and conservative energy transport for this configuration.
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[outlet_velocity]
type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "../../source/postprocessors/SideAverageValue.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = u
[]
[outlet_temperature]
type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "../../source/postprocessors/SideAverageValue.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temperature
[]
[](modules/navier_stokes/test/tests/finite_element/ins/compatibility/dg-stokes.i)References
- Aycil Cesmelioglu and Sander Rhebergen.
A compatible embedded-hybridized discontinuous galerkin method for the stokes–darcy-transport problem.
Communications on Applied Mathematics and Computation, 4(1):293–318, 2022.
doi:10.1007/s42967-020-00115-0.[Export]
- Clint Dawson, Shuyu Sun, and Mary F Wheeler.
Compatible algorithms for coupled flow and transport.
Computer Methods in Applied Mechanics and Engineering, 193(23–26):2565–2580, 2004.
doi:10.1016/j.cma.2003.12.059.[Export]