- deferred_correction_factor1Scales the deferred correction strength; 0 gives pure upwind (no deferred correction), 1 gives full deferred correction. Values < 1 can improve fixed point robustness.
Default:1
C++ Type:Real
Unit:(no unit assumed)
Range:deferred_correction_factor>=0 & deferred_correction_factor<=1
Controllable:No
Description:Scales the deferred correction strength; 0 gives pure upwind (no deferred correction), 1 gives full deferred correction. Values < 1 can improve fixed point robustness.
- gradient_methodgreen-gauss-venkatakrishnanGradient method used to compute cell gradients for the high-order reconstruction.
Default:green-gauss-venkatakrishnan
C++ Type:GradientMethodName
Controllable:No
Description:Gradient method used to compute cell gradients for the high-order reconstruction.
FVAdvectedMUSCLDeferredCorrection
Overview
This interpolation method provides a multi-dimensional MUSCL-type reconstruction for advected quantities and applies the high-order component through deferred correction. The cell gradients used for the reconstruction are selected with "gradient_method". This yields second-order accuracy in smooth regions while improving robustness of fully implicit linear FV solves by keeping the matrix contribution low-order (Venkatakrishnan (1993), Jasak (1996), Moukalled et al. (2016)).
Let denote the upwind cell-centered value on a face and let be the selected cell gradient. A MUSCL reconstruction forms a higher-order face value from the upwind cell:
where is the upwind cell centroid and is a face centroid. In MOOSE, the MUSCL reconstruction uses this face point, so on skewed meshes the skewness is included directly in the reconstruction rather than added afterward as a separate correction.
Deferred correction splits the face value into a low-order implicit part and a high-order explicit correction:
where is the upwind (first-order) face value and is controlled by "deferred_correction_factor". With the method reduces to pure upwind; with it applies the full MUSCL reconstruction while still assembling the matrix with the upwind weights and placing the correction explicitly on the right-hand side. Values are sometimes useful for fixed-point iteration robustness.
Gradient method and boundedness
The default gradient method is green-gauss-venkatakrishnan, which uses a Green-Gauss gradient with a Venkatakrishnan limiter. A different named method can be selected with "gradient_method".
This method does not guarantee strict boundedness. The default Venkatakrishnan limiter is smooth and intentionally less restrictive than a hard clipping procedure in order to avoid degrading smooth extrema. As a result, small overshoots or undershoots may still occur. In addition, this method applies the high-order term through deferred correction on the right-hand side, so the overall discretization is not a strict monotone or maximum-principle-preserving scheme.
The positive effect, however, is that this advection discretization is second order on skewed meshes as well.
For limiter definitions and behavior, see Limiters.
Example Syntax
Declare the interpolation method in [FVInterpolationMethods]:
[FVInterpolationMethods<<<{"href": "../../syntax/FVInterpolationMethods/index.html"}>>>]
[muscl]
type = FVAdvectedMUSCLDeferredCorrection<<<{"description": "MUSCL reconstruction with cell gradients from a named gradient method using deferred correction.", "href": "FVAdvectedMUSCLDeferredCorrection.html"}>>>
deferred_correction_factor<<<{"description": "Scales the deferred correction strength; 0 gives pure upwind (no deferred correction), 1 gives full deferred correction. Values < 1 can improve fixed point robustness."}>>> = 1.0
[]
[](../moose/test/tests/linearfvkernels/advection/diagonal-step-2d.i)Use it in a linear FV advection kernel via "advected_interp_method_name":
[LinearFVKernels<<<{"href": "../../syntax/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": "../linearfvkernels/LinearFVAdvection.html"}>>>
variable<<<{"description": "The name of the variable whose linear system this object contributes to"}>>> = u
velocity<<<{"description": "Constant advection velocity"}>>> = "1 1 0"
advected_interp_method_name<<<{"description": "Name of the FVInterpolationMethod to use for the advected quantity."}>>> = muscl
[]
[](../moose/test/tests/linearfvkernels/advection/diagonal-step-2d.i)Input Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
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
Controllable:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
References
- Hrvoje Jasak.
Error analysis and estimation for the finite volume method with applications to fluid flows.
PhD thesis, Imperial College London (University of London), 1996.[Export]
- Fadl Moukalled, L Mangani, Marwan Darwish, and others.
The finite volume method in computational fluid dynamics.
Volume 6.
Springer, 2016.[Export]
- Venkat Venkatakrishnan.
On the accuracy of limiters and convergence to steady state solutions.
In 31st Aerospace Sciences Meeting, 880. 1993.[Export]