12#include <deal.II/base/point.h>
13#include <deal.II/base/tensor.h>
19 namespace ShallowWater
30 template <
int dim,
typename Number =
double>
38 HyperbolicSystem::problem_dimension<dim>;
57 HyperbolicSystem::n_precomputed_values<dim>;
76 : hyperbolic_system(hyperbolic_system)
77 , precomputed_values(precomputed_values)
99 const unsigned int *js,
100 const dealii::Tensor<1, dim, Number> &n_ij)
const;
109 const Number &h_star)
const;
113 const Number &h)
const;
116 const Number h_star)
const;
119 const Number h_star)
const;
123 const Number h_star)
const;
130 const dealii::Tensor<1, dim, Number> &n_ij)
const;
144 template <
int dim,
typename Number>
145 DEAL_II_ALWAYS_INLINE
inline auto
147 const state_type &U,
const dealii::Tensor<1, dim, Number> &n_ij)
const
150 const Number h = hyperbolic_system.water_depth_sharp(U);
151 const Number gravity = hyperbolic_system.gravity();
153 const auto vel = hyperbolic_system.momentum(U) / h;
154 const auto proj_vel = n_ij * vel;
155 const auto a = std::sqrt(h * gravity);
157 return {{h, proj_vel, a}};
161 template <
int dim,
typename Number>
166 const unsigned int * ,
167 const dealii::Tensor<1, dim, Number> &n_ij)
const
169 const auto riemann_data_i = riemann_data_from_state(U_i, n_ij);
170 const auto riemann_data_j = riemann_data_from_state(U_j, n_ij);
171 return compute(riemann_data_i, riemann_data_j);
std::array< Number, n_precomputed_values< dim > > precomputed_type
dealii::Tensor< 1, problem_dimension< dim >, Number > state_type
Number phi(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number &h) const
static constexpr unsigned int problem_dimension
primitive_type riemann_data_from_state(const state_type &U, const dealii::Tensor< 1, dim, Number > &n_ij) const
Number lambda3_plus(const primitive_type &riemann_data, const Number h_star) const
Number lambda1_minus(const primitive_type &riemann_data, const Number h_star) const
static constexpr unsigned int n_precomputed_values
static constexpr unsigned int riemann_data_size
Number h_star_two_rarefaction(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
Number compute_lambda(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number h_star) const
std::array< Number, riemann_data_size > primitive_type
typename get_value_type< Number >::type ScalarNumber
HyperbolicSystem::precomputed_type< dim, Number > precomputed_type
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const MultiComponentVector< ScalarNumber, n_precomputed_values > &precomputed_values)
HyperbolicSystem::state_type< dim, Number > state_type
Number compute(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
Number f(const primitive_type &primitive_state, const Number &h_star) const