![]() |
ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
|
#include <source/euler_aeos/limiter.h>


Public Types | |
Typedefs and constexpr constants | |
| template<int dim, typename Number = double> | |
| using | View = LimiterView< dim, Number > |
Public Member Functions | |
Constructor and setup | |
| Limiter (const HyperbolicSystem &hyperbolic_system, const std::string &subsection="/Limiter") | |
| template<int dim, typename Number > | |
| auto | view () const |
Internal data | |
| template<int , typename > | |
| class | LimiterView |
The convex limiter.
The limiter implements a convex limiting technique as described in [9], [12] and [3]. Given a computed set of bounds and an update direction \(\mathbf P_{ij}\) one can now determine a candidate \(\tilde l_{ij}\) by computing
\begin{align} \tilde l_{ij} = \max_{l\,\in\,[0,1]} \,\Big\{\rho_{\text{min}}\,\le\,\rho\,(\mathbf U_i +\tilde l_{ij}\mathbf P_{ij}) \,\le\,\rho_{\text{max}},\quad \phi_{\text{min}}\,\le\,\phi\,(\mathbf U_{i}+\tilde l_{ij}\mathbf P_{ij})\Big\}, \end{align}
where \(\psi\) denots the specific entropy [12].
Algorithmically this is accomplished as follows: Given an initial interval \([t_L,t_R]\), where \(t_L\) is a good state, we first make the interval smaller ensuring the bounds on the density are fulfilled. If limiting on the specific entropy is selected we then then perform a quadratic Newton iteration (updating \([t_L,t_R]\) solving for the root of a 3-convex function
\begin{align} \Psi(\mathbf U)\;=\;\rho^{\gamma+1}(\mathbf U)\,\big(\phi(\mathbf U)-\phi_{\text{min}}\big). \end{align}
| using ryujin::EulerAEOS::Limiter< ScalarNumber >::View = LimiterView<dim, Number> |
|
inline |
|
inline |