8#include <compile_time_options.h>
16#include <deal.II/base/point.h>
17#include <deal.II/base/tensor.h>
23 namespace EulerBarotropic
26 typename Number = double,
27 typename MemorySpace = dealii::MemorySpace::Host>
28 class WaveSpeedEstimatorView;
38 template <
typename ScalarNumber =
double>
51 const std::string &subsection =
"/WaveSpeedEstimator")
52 : ParameterAcceptor(subsection)
53 , hyperbolic_system_(&hyperbolic_system)
66 typename MemorySpace = dealii::MemorySpace::Host>
70 hyperbolic_system_->template view<dim, Number, MemorySpace>(),
81 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
83 template <
int,
typename,
typename>
98 template <
int dim,
typename Number,
typename MemorySpace>
103 std::is_same_v<MemorySpace, dealii::MemorySpace::Host> ||
104 std::is_same_v<MemorySpace, dealii::MemorySpace::Default>,
105 "Unexpected memory space");
154 DEAL_II_HOST_DEVICE Number
163 DEAL_II_HOST_DEVICE Number
167 const unsigned int i,
168 const unsigned int *js,
169 const dealii::Tensor<1, dim, Number> &n_ij)
const;
191 template <
int dim,
typename Number,
typename MemorySpace>
192 DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number
197 const auto &[u_i, a_i] = riemann_data_i;
198 const auto &[u_j, a_j] = riemann_data_j;
200#ifdef DEBUG_WAVE_SPEED_ESTIMATOR
201 std::cout <<
"u_left: " << u_i << std::endl;
202 std::cout <<
"a_left: " << a_i << std::endl;
203 std::cout <<
"u_right: " << u_j << std::endl;
204 std::cout <<
"a_right: " << a_j << std::endl;
207 const Number lambda_max =
208 std::max(std::abs(u_i) + a_i, std::abs(u_j) + a_j);
213 template <
int dim,
typename Number,
typename MemorySpace>
214 DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number
219 const unsigned int i,
220 const unsigned int *js,
221 const dealii::Tensor<1, dim, Number> &n_ij)
const
223 const auto &[e_i, p_i, a_i] =
224 pv.template read_tensor<Number, precomputed_type>(i);
226 const auto &[e_j, p_j, a_j] =
227 pv.template read_tensor<Number, precomputed_type>(js);
229 const auto rho_i = view_.density(U_i);
230 const auto rho_i_inverse = Number(1.0) / rho_i;
231 const auto m_i = view_.momentum(U_i);
232 const auto u_i = rho_i_inverse * n_ij * m_i;
234 const auto rho_j = view_.density(U_j);
235 const auto rho_j_inverse = Number(1.0) / rho_j;
236 const auto m_j = view_.momentum(U_j);
237 const auto u_j = rho_j_inverse * n_ij * m_j;
VectorView< n_precomputed_values > PrecomputedVectorView
std::array< Number, n_precomputed_values > precomputed_type
dealii::Tensor< 1, problem_dimension, Number > state_type
typename get_value_type< Number >::type ScalarNumber
typename View::precomputed_type precomputed_type
DEAL_II_HOST_DEVICE Number compute(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
typename std::array< Number, riemann_data_size > primitive_type
typename View::PrecomputedVectorView PrecomputedVectorView
HyperbolicSystemView< dim, Number, MemorySpace > View
typename View::ScalarNumber ScalarNumber
typename View::state_type state_type
WaveSpeedEstimatorView(const View &view, const WaveSpeedEstimator< ScalarNumber > &)
static constexpr unsigned int riemann_data_size
WaveSpeedEstimator(const HyperbolicSystem &hyperbolic_system, const std::string &subsection="/WaveSpeedEstimator")