8#include <compile_time_options.h>
12#include <compile_time_options.h>
22 template <
int dim,
typename Number =
double>
30 template <
typename ScalarNumber =
double>
31 class Limiter :
public dealii::ParameterAcceptor
43 template <
int dim,
typename Number =
double>
56 const std::string &subsection =
"/Limiter")
57 : ParameterAcceptor(subsection)
58 , hyperbolic_system_(&hyperbolic_system)
62 "iterations", iterations_,
"Number of limiter iterations");
70 template <
int dim,
typename Number>
74 hyperbolic_system_->template view<dim, Number>(), *
this};
84 unsigned int iterations_;
92 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
96 template <
int,
typename>
109 template <
int dim,
typename Number>
141 using Bounds = std::array<Number, n_bounds>;
158 return limiter_.iterations_;
189 const Number & )
const
231 const unsigned int * ,
234 const dealii::Tensor<1, dim, Number> & ,
247 return relaxed_bounds;
265 const Number = Number(0.),
266 const Number t_max = Number(1.))
const
268 return {t_max,
true};
Vectors::MultiComponentVectorView< ScalarNumber, n_precomputed_values, dealii::VectorizedArray< ScalarNumber >::size(), dealii::MemorySpace::Host, false > PrecomputedVectorView
dealii::Tensor< 1, problem_dimension, Number > state_type
typename get_value_type< Number >::type ScalarNumber
flux_type flux_contribution_type
Bounds bounds(const Number hd_i) const
LimiterView(const View &view, const Limiter< ScalarNumber > &limiter)
typename View::flux_contribution_type flux_contribution_type
HyperbolicSystemView< dim, Number > View
unsigned int iterations() const
Bounds projection_bounds_from_state(const PrecomputedVectorView &, const unsigned int, const state_type &) const
void reset(const PrecomputedVectorView &, const unsigned int, const state_type &, const flux_contribution_type &)
typename View::ScalarNumber ScalarNumber
std::array< Number, n_bounds > Bounds
Bounds combine_bounds(const Bounds &, const Bounds &) const
typename View::PrecomputedVectorView PrecomputedVectorView
static constexpr unsigned int n_bounds
Bounds fully_relax_bounds(const Bounds &, const Number &) const
void accumulate(const PrecomputedVectorView &, const unsigned int *, const state_type &, const flux_contribution_type &, const dealii::Tensor< 1, dim, Number > &, const state_type &)
std::tuple< Number, bool > limit(const Bounds &, const state_type &, const state_type &, const Number=Number(0.), const Number t_max=Number(1.)) const
typename View::state_type state_type
Limiter(const HyperbolicSystem &hyperbolic_system, const std::string &subsection="/Limiter")