FVInterpolationMethods System

FVInterpolationMethod objects define how cell-centered quantities are interpolated to finite-volume faces. Methods are declared in the [FVInterpolationMethods] block and referenced by name from kernels that support them.

These methods are commonly used by linear FV kernels. For example:

For a general overview of FV interpolation and design choices, see Linear Finite Volume Design Decisions in MOOSE.

Design

FVInterpolationMethod derived classes override the operations they support:

  • interpolate(...) for coefficient/face interpolation

  • advectedInterpolate(...) for advected interpolation (matrix weights + right-hand-side face term)

  • optionally advectedInterpolationNeedsGradients() and gradientLimiter() when the method needs adjacent-cell gradients

We enable guard rails to ensure that advected interpolation methods are not used out of context and interpolation methods not supporting advection schemes are not used in that context either. For examples on how to enforce this, see:

  • LinearFVDiffusion only accepts methods with supportsFaceInterpolation() == true.

  • LinearFVAdvection only accepts methods with supportsAdvectedInterpolation() == true.

Selecting an incompatible interpolation method causes a runtime error during kernel setup.

FVInterpolationMethods block

Declare methods in the [FVInterpolationMethods] block, for example a geometric average used to interpolate diffusion coefficients:

[FVInterpolationMethods<<<{"href": "index.html"}>>>]
  [geom]
    type = FVGeometricAverage<<<{"description": "Linear interpolation that uses the geometric weighting on FaceInfo.", "href": "../../source/fvinterpolationmethods/FVGeometricAverage.html"}>>>
  []
[]
(moose/test/tests/linearfvkernels/diffusion/diffusion-1d.i)

Use it in a kernel via the interpolation method name in a dedicated parameter:

[LinearFVKernels<<<{"href": "../LinearFVKernels/index.html"}>>>]
  [diffusion]
    type = LinearFVDiffusion<<<{"description": "Represents the matrix and right hand side contributions of a diffusion term in a partial differential equation.", "href": "../../source/linearfvkernels/LinearFVDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable whose linear system this object contributes to"}>>> = u
    diffusion_coeff<<<{"description": "The diffusion coefficient. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = coeff_func
  []
[]
(moose/test/tests/linearfvkernels/diffusion/diffusion-1d.i)

For advection, declare an advected interpolation method (for example, upwind):

[FVInterpolationMethods<<<{"href": "index.html"}>>>]
  [upwind]
    type = FVAdvectedUpwind<<<{"description": "Upwind interpolation for advected quantities using the face mass flux sign.", "href": "../../source/fvinterpolationmethods/FVAdvectedUpwind.html"}>>>
  []
[]
(moose/test/tests/linearfvkernels/advection/advection-1d.i)

Use it in a linear FV advection kernel:

[LinearFVKernels<<<{"href": "../LinearFVKernels/index.html"}>>>]
  [advection]
    type = LinearFVAdvection<<<{"description": "Represents the matrix and right hand side contributions of an advection term in a partial differential equation.", "href": "../../source/linearfvkernels/LinearFVAdvection.html"}>>>
    variable<<<{"description": "The name of the variable whose linear system this object contributes to"}>>> = u
    velocity<<<{"description": "Constant advection velocity"}>>> = "0.5 0 0"
    advected_interp_method_name<<<{"description": "Name of the FVInterpolationMethod to use for the advected quantity."}>>> = upwind
  []
[]
(moose/test/tests/linearfvkernels/advection/advection-1d.i)

See the individual method pages listed below for details.

Available Objects

  • Moose App
  • FVAdvectedMinmodWeightBasedMinmod interpolation for advected quantities implemented as limited blending weights (no MUSCL reconstruction, no deferred correction).
  • FVAdvectedUpwindUpwind interpolation for advected quantities using the face mass flux sign.
  • FVAdvectedVanLeerWeightBasedVan Leer interpolation for advected quantities implemented as limited blending weights (no MUSCL reconstruction, no deferred correction).
  • FVAdvectedVenkatakrishnanDeferredCorrectionMUSCL reconstruction with Venkatakrishnan-limited cell gradients using deferred correction.
  • FVGeometricAverageLinear interpolation that uses the geometric weighting on FaceInfo.
  • FVHarmonicAverageHarmonic mean interpolation for finite-volume quantities using FaceInfo geometry weights.