VanAlbadaLimiter Class Reference#
|
DiFfRG
Discretization Framework for functional Renormalization Group flows
|
van Albada (1982) slope limiter — second-order TVD and C¹ in u. More...
#include <van_albada_limiter.hh>
Static Public Member Functions | |
| template<typename NumberType > | |
| static NumberType | slope_limit (const NumberType &a, const NumberType &b) |
Detailed Description
van Albada (1982) slope limiter — second-order TVD and C¹ in u.
Functional form (van Albada–van Leer–Roberts): phi(a, b) = ((a² + ε) · b + (b² + ε) · a) / (a² + b² + 2ε) when a·b > 0, = 0 otherwise.
Equivalent compact form used here: phi(a, b) = step(a·b) · (a · b² + b · a²) / (a² + b² + ε_floor)
Key properties used by this project:
- C¹ in (a, b) on the strict interior of {a·b > 0}: numerator and denominator are both polynomials, and the denominator is bounded away from zero by ε_floor.
- TVD: limited slope vanishes when slopes disagree in sign.
- Smooth-extremum: reduces to (a + b)/2 when a ≈ b > 0 (no clipping at smooth extrema, unlike MinMod).
Diagnostic motivation: MinMod is C⁰ but NOT C¹ in u (sign-change kink AND magnitude-tie kink). SUNDIALS IDA's Newton iteration needs at least a locally Lipschitz Jacobian to converge; MinMod's kinks cause the apparent Jacobian to flip by O(1) inside O(ε) perturbations of the state, which stalls the implicit integrator. van Albada removes the magnitude-tie kink entirely and leaves only the (much less frequently crossed) sign-change boundary.
Note: the sign-change boundary a·b = 0 is implemented here via a branch (the ternary). If even that one kink is too sharp for IDA, a softplus regularisation phi · 0.5·(1 + tanh(a·b/δ)) is a drop-in upgrade — but try the cleaner form first.
Member Function Documentation
◆ slope_limit()
|
inlinestatic |
The documentation for this class was generated from the following file:
- /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/limiter/van_albada_limiter.hh
Generated by