24 "Minmod interpolation for advected quantities implemented as limited blending weights " 25 "(no MUSCL reconstruction, no deferred correction).");
29 "Whether to limit the scheme to be no more downwind-biased than linear interpolation.");
33 "blending_factor>=0 & blending_factor<=1",
34 "Scales the high-order blending strength; 0 gives pure upwind, 1 gives the full limited " 35 "blending. Values < 1 can improve linear solver robustness for fully implicit assembly.");
41 _limit_to_linear(getParam<bool>(
"limit_to_linear")),
42 _blending_factor(getParam<
Real>(
"blending_factor"))
54 mooseAssert(elem_grad && neighbor_grad,
55 "Minmod advected interpolation requires both element and neighbor gradients.");
57 const bool upwind_is_elem = mass_flux >= 0.0;
59 const Real phi_upwind = upwind_is_elem ? elem_value : neighbor_value;
60 const Real phi_downwind = upwind_is_elem ? neighbor_value : elem_value;
62 const VectorValue<Real> grad_upwind = upwind_is_elem ? *elem_grad : *neighbor_grad;
63 const Point upwind_to_downwind = upwind_is_elem ? face.
dCN() : Point(-face.
dCN());
65 const auto r_f =
Moose::FV::rF(phi_upwind, phi_downwind, grad_upwind, upwind_to_downwind);
69 const Real w_f = upwind_is_elem ? face.
gC() : (1.0 - face.
gC());
78 const Real w_upwind = 1.0 - g;
79 const Real w_downwind = g;
82 const Real w_elem = upwind_is_elem ? w_upwind : w_downwind;
83 const Real w_neighbor = upwind_is_elem ? w_downwind : w_upwind;
100 advectedInterpolate(face, elem_value, neighbor_value, elem_grad, neighbor_grad, mass_flux);
101 return result.weights_matrix.first * elem_value + result.weights_matrix.second * neighbor_value;
const bool _limit_to_linear
Whether to clamp the blending to be no more downwind-biased than linear.
Real advectedInterpolateValue(const FaceInfo &face, Real elem_value, Real neighbor_value, const VectorValue< Real > *elem_grad, const VectorValue< Real > *neighbor_grad, Real mass_flux) const override
Compute the advected face value.
registerMooseObject("MooseApp", FVAdvectedMinmodWeightBased)
Scalar rF(const Scalar &phiC, const Scalar &phiD, const Vector &gradC, const RealVectorValue &dCD)
From Moukalled 12.30.
Registered base class for linear FV interpolation objects.
const Real _blending_factor
Scales the high-order blending strength (0 = upwind, 1 = full limited blending).
std::pair< Real, Real > weights_matrix
auto max(const L &left, const R &right)
This data structure is used to store geometric and variable related metadata about each cell face in ...
Minmod interpolation for advected quantities that blends between upwind and the higher-order limited ...
Real gC() const
Return the geometric weighting factor.
AdvectedSystemContribution advectedInterpolate(const FaceInfo &face, Real elem_value, Real neighbor_value, const VectorValue< Real > *elem_grad, const VectorValue< Real > *neighbor_grad, Real mass_flux) const override
Compute the matrix weights for the advected face value.
static InputParameters validParams()
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Matrix/RHS contribution for an advected face interpolation.
auto min(const L &left, const R &right)
FVAdvectedMinmodWeightBased(const InputParameters ¶ms)
const Point & dCN() const