ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
Loading...
Searching...
No Matches
wave_speed_estimator.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0
3// [LANL Copyright Statement]
4// Copyright (C) 2023 - 2025 by the ryujin authors
5// Copyright (C) 2023 - 2024 by Triad National Security, LLC
6//
7
8#pragma once
9
10#include <compile_time_options.h>
11
12#include "hyperbolic_system.h"
13
14#include <observer_pointer.h>
15#include <simd.h>
16
17#include <deal.II/base/point.h>
18#include <deal.II/base/tensor.h>
19
20namespace ryujin
21{
22 namespace ShallowWater
23 {
24 template <int dim, typename Number = double>
25 class WaveSpeedEstimatorView;
26
35 template <typename ScalarNumber = double>
36 class WaveSpeedEstimator : public dealii::ParameterAcceptor
37 {
38 public:
43
48 template <int dim, typename Number = double>
50
52
56
60 WaveSpeedEstimator(const HyperbolicSystem &hyperbolic_system,
61 const std::string &subsection = "/WaveSpeedEstimator")
62 : ParameterAcceptor(subsection)
63 , hyperbolic_system_(&hyperbolic_system)
64 {
65 }
66
68
72
78 template <int dim, typename Number>
79 auto view() const
80 {
81 return View<dim, Number>{
82 hyperbolic_system_->template view<dim, Number>(), *this};
83 }
84
85 private:
87
91
92 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
93
95 };
96
97
106 template <int dim, typename Number>
108 {
109 public:
114
116
118
120
121 using state_type = typename View::state_type;
122
127 static constexpr unsigned int riemann_data_size = 3;
128
133 using primitive_type = typename std::array<Number, riemann_data_size>;
134
136
138
140
144
150 const View &view,
151 const WaveSpeedEstimator<ScalarNumber> &wave_speed_estimator)
152 : view_(view)
153 , wave_speed_estimator_(wave_speed_estimator)
154 {
155 }
156
162 Number compute(const primitive_type &riemann_data_i,
163 const primitive_type &riemann_data_j) const;
164
169 Number compute(const PrecomputedVectorView &pv,
170 const state_type &U_i,
171 const state_type &U_j,
172 const unsigned int i,
173 const unsigned int *js,
174 const dealii::Tensor<1, dim, Number> &n_ij) const;
175
176 protected:
178
182
183 Number f(const primitive_type &primitive_state,
184 const Number &h_star) const;
185
186 Number phi(const primitive_type &riemann_data_i,
187 const primitive_type &riemann_data_j,
188 const Number &h) const;
189
190 Number lambda1_minus(const primitive_type &riemann_data,
191 const Number h_star) const;
192
193 Number lambda3_plus(const primitive_type &riemann_data,
194 const Number h_star) const;
195
196 Number compute_lambda(const primitive_type &riemann_data_i,
197 const primitive_type &riemann_data_j,
198 const Number h_star) const;
199
200 public:
201 Number compute_h_star(const primitive_type &riemann_data_i,
202 const primitive_type &riemann_data_j) const;
203
204 protected:
207 const dealii::Tensor<1, dim, Number> &n_ij) const;
208
209 private:
211
215
216 const View view_;
217 const WaveSpeedEstimator<ScalarNumber> &wave_speed_estimator_;
218
220 };
221 } // namespace ShallowWater
222} // namespace ryujin
typename get_value_type< Number >::type ScalarNumber
dealii::Tensor< 1, problem_dimension, Number > state_type
Vectors::MultiComponentVectorView< ScalarNumber, n_precomputed_values, dealii::VectorizedArray< ScalarNumber >::size(), dealii::MemorySpace::Host, false > PrecomputedVectorView
std::array< Number, n_precomputed_values > precomputed_type
static constexpr unsigned int problem_dimension
typename View::PrecomputedVectorView PrecomputedVectorView
Number compute(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
primitive_type riemann_data_from_state(const state_type &U, const dealii::Tensor< 1, dim, Number > &n_ij) const
WaveSpeedEstimatorView(const View &view, const WaveSpeedEstimator< ScalarNumber > &wave_speed_estimator)
Number compute_h_star(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
HyperbolicSystemView< dim, Number > View
Number f(const primitive_type &primitive_state, const Number &h_star) const
Number lambda1_minus(const primitive_type &riemann_data, const Number h_star) const
Number phi(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number &h) const
typename View::precomputed_type precomputed_type
typename std::array< Number, riemann_data_size > primitive_type
Number lambda3_plus(const primitive_type &riemann_data, const Number h_star) const
WaveSpeedEstimator(const HyperbolicSystem &hyperbolic_system, const std::string &subsection="/WaveSpeedEstimator")