8#include <compile_time_options.h>
18#include <deal.II/base/parameter_acceptor.h>
19#include <deal.II/base/tensor.h>
27 template <
int dim,
typename Number>
28 class HyperbolicSystemView;
42 "Skeleton Hyperbolic System";
48 : ParameterAcceptor(subsection)
56 template <
int dim,
typename Number =
double>
65 template <
int dim,
typename Number>
79 template <
int dim,
typename ScalarNumber>
84 const bool =
true)
const
95 template <
int dim,
typename Number>
109 template <
int dim,
typename Number>
131 using state_type = dealii::Tensor<1, problem_dimension, Number>;
137 dealii::Tensor<1, problem_dimension, dealii::Tensor<1, dim, Number>>;
149 []() -> std::array<std::string, problem_dimension> {
150 if constexpr (dim == 1)
152 else if constexpr (dim == 2)
154 else if constexpr (dim == 3)
164 []() -> std::array<std::string, problem_dimension> {
165 if constexpr (dim == 1)
167 else if constexpr (dim == 2)
169 else if constexpr (dim == 3)
188 std::array<std::string, n_precomputed_values>{};
199 std::array<Number, n_initial_precomputed_values>;
205 std::array<std::string, n_initial_precomputed_values>{};
211 StateVector<ScalarNumber, problem_dimension, n_precomputed_values>;
232 dealii::VectorizedArray<ScalarNumber>::size(),
233 dealii::MemorySpace::Host,
251 dealii::VectorizedArray<ScalarNumber>::size(),
252 dealii::MemorySpace::Host,
266 : hyperbolic_system_(hyperbolic_system)
295 template <
typename Lambda>
297 const dealii::types::boundary_id ,
299 const dealii::Tensor<1, dim, Number> & ,
300 const Lambda & )
const
342 const unsigned int * ,
355 const dealii::Tensor<1, dim, Number> &c_ij)
const
368 const dealii::Tensor<1, dim, Number> &)
const =
delete;
385 const unsigned int * ,
405 template <
typename ST>
417 return primitive_state;
434 template <
typename Lambda>
436 const Lambda & )
const
std::array< Number, n_precomputed_values > precomputed_type
state_type apply_galilei_transform(const state_type &state, const Lambda &) const
bool is_admissible(const state_type &) const
static constexpr unsigned int n_precomputed_values
static const auto precomputed_names
static constexpr bool have_high_order_flux
dealii::Tensor< 1, problem_dimension, Number > state_type
flux_contribution_type flux_contribution(const PrecomputedVectorView &, const InitialPrecomputedVectorView &, const unsigned int, const state_type &) const
HyperbolicSystemView(const HyperbolicSystem &hyperbolic_system)
state_type flux_divergence(const flux_contribution_type &flux_i, const flux_contribution_type &flux_j, const dealii::Tensor< 1, dim, Number > &c_ij) const
state_type expand_state(const ST &state) const
typename get_value_type< Number >::type ScalarNumber
dealii::Tensor< 1, problem_dimension, dealii::Tensor< 1, dim, Number > > flux_type
state_type apply_boundary_conditions(const dealii::types::boundary_id, const state_type &U, const dealii::Tensor< 1, dim, Number > &, const Lambda &) const
static const auto primitive_component_names
Vectors::StateVector< ScalarNumber, problem_dimension, n_precomputed_values > StateVector
static constexpr bool have_source_terms
state_type high_order_flux_divergence(const flux_contribution_type &, const flux_contribution_type &, const dealii::Tensor< 1, dim, Number > &) const =delete
state_type nodal_source(const PrecomputedVectorView &, const unsigned int *, const state_type &, const ScalarNumber) const =delete
static const auto component_names
static constexpr unsigned int problem_dimension
static constexpr unsigned int n_initial_precomputed_values
state_type to_primitive_state(const state_type &state) const
state_type from_primitive_state(const state_type &primitive_state) const
flux_type flux_contribution_type
std::array< Number, n_initial_precomputed_values > initial_precomputed_type
flux_contribution_type flux_contribution(const PrecomputedVectorView &, const InitialPrecomputedVectorView &, const unsigned int *, const state_type &) const
static const auto initial_precomputed_names
state_type nodal_source(const PrecomputedVectorView &, const unsigned int, const state_type &, const ScalarNumber) const =delete
static const std::string problem_name
void fill_precomputed_values(const OfflineData< dim, ScalarNumber > &, typename HyperbolicSystemView< dim, ScalarNumber >::StateVector &, const bool=true) const
HyperbolicSystem(const std::string &subsection="/HyperbolicSystem")
DEAL_II_HOST_DEVICE_ALWAYS_INLINE dealii::Tensor< 1, problem_dim, T > contract(const FT &flux_ij, const TT &c_ij)
DEAL_II_HOST_DEVICE_ALWAYS_INLINE FT add(const FT &flux_left_ij, const FT &flux_right_ij)