https://mooseframework.inl.gov
Loading...
Searching...
No Matches
VanLeerLimiter.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "Limiter.h"
13#include "MathFVUtils.h"
14
15namespace Moose
16{
17namespace FV
18{
30template <typename T>
31class VanLeerLimiter : public Limiter<T>
32{
33public:
43 T limit(const T & phi_upwind,
44 const T & phi_downwind,
45 const VectorValue<T> * grad_phi_upwind,
46 const VectorValue<T> * grad_phi_downwind,
47 const RealVectorValue & dCD,
48 const Real & /* max_value */,
49 const Real & /* min_value */,
50 const FaceInfo * /* fi */,
51 const bool & /* fi_elem_is_upwind */) const override final
52 {
53 mooseAssert(grad_phi_upwind, "Van Leer limiter requires the upwind gradient");
54 using std::abs;
55
56 // Compute gradient ratio coefficient
57 T r_f;
58 if (grad_phi_downwind) // compute full slope-reconstruction limiter
59 r_f = this->rf_grad(grad_phi_upwind, grad_phi_downwind, dCD);
60 else // compute upwind slope reconstruction limiter
61 r_f = Moose::FV::rF(phi_upwind, phi_downwind, *grad_phi_upwind, dCD);
62
63 // Return limiter value
64 return (r_f + abs(r_f)) / (1.0 + abs(r_f));
65 }
66
67 bool constant() const override final { return false; }
68
69 InterpMethod interpMethod() const override final { return InterpMethod::VanLeer; }
70
71 VanLeerLimiter() = default;
72};
73}
74}
This data structure is used to store geometric and variable related metadata about each cell face in ...
Definition FaceInfo.h:38
Base class for defining slope limiters for finite volume or potentially reconstructed Discontinuous-G...
Definition Limiter.h:63
T rf_grad(const VectorValue< T > *grad_phi_upwind, const VectorValue< T > *grad_phi_downwind, const RealVectorValue &dCD) const
Definition Limiter.h:169
The Van Leer limiter limiter function $\beta(r_f)$ is defined as:
bool constant() const override final
InterpMethod interpMethod() const override final
T limit(const T &phi_upwind, const T &phi_downwind, const VectorValue< T > *grad_phi_upwind, const VectorValue< T > *grad_phi_downwind, const RealVectorValue &dCD, const Real &, const Real &, const FaceInfo *, const bool &) const override final
This method overrides the pure virtual limit method in the base Limiter class.
Scalar rF(const Scalar &phiC, const Scalar &phiD, const Vector &gradC, const RealVectorValue &dCD)
From Moukalled 12.30.
InterpMethod
This codifies a set of available ways to interpolate with elem+neighbor solution information to calcu...
Definition MathFVUtils.h:39
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...