![]() |
ryujin 2.1.1 revision 4bf2aee841e245e84ddb1251f8ca4f7f06dda1bb
|
#include <source/euler/limiter.h>


Classes | |
| struct | Parameters |
Public Member Functions | |
Constructor and setup | |
| Limiter (const HyperbolicSystem &hyperbolic_system, const std::string &subsection="/Limiter") | |
| template<int dim, typename Number , typename MemorySpace = dealii::MemorySpace::Host> | |
| auto | view () const |
Internal data | |
| template<int , typename , typename > | |
| class | LimiterView |
The convex limiter.
The limiter implements a convex limiting technique as described in [9] and [12]. 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}
|
inline |
|
inline |
Return a view on the Limiter for a given dimension dim and choice of number type Number (which can be a scalar float, or double, as well as a VectorizedArray holding packed scalars). The optional MemorySpace template parameter selects whether the view is intended for the host or device memory space.
|
friend |