ryujin 2.1.1 revision d0a94ad2ccc0c4c2e8c2485c52b06b90e2fc9853
riemann_solver.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2020 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include "hyperbolic_system.h"
9
10#include <simd.h>
11
12#include <deal.II/base/point.h>
13#include <deal.II/base/tensor.h>
14
15namespace ryujin
16{
17 namespace EulerAEOS
18 {
19 template <typename ScalarNumber = double>
20 class RiemannSolverParameters : public dealii::ParameterAcceptor
21 {
22 public:
23 RiemannSolverParameters(const std::string &subsection = "/RiemannSolver")
24 : ParameterAcceptor(subsection)
25 {
26 }
27 };
28
29
39 template <int dim, typename Number = double>
41 {
42 public:
47
51 static constexpr unsigned int problem_dimension = View::problem_dimension;
52
57 static constexpr unsigned int riemann_data_size = 5;
58
63 using primitive_type = std::array<Number, riemann_data_size>;
64
68 using state_type = typename View::state_type;
69
73 static constexpr unsigned int n_precomputed_values =
75
80
85
90
95
100 const HyperbolicSystem &hyperbolic_system,
101 const Parameters &parameters,
103 &precomputed_values)
104 : hyperbolic_system(hyperbolic_system)
105 , parameters(parameters)
106 , precomputed_values(precomputed_values)
107 {
108 }
109
115 Number compute(const primitive_type &riemann_data_i,
116 const primitive_type &riemann_data_j) const;
117
123 Number compute(const state_type &U_i,
124 const state_type &U_j,
125 const unsigned int i,
126 const unsigned int *js,
127 const dealii::Tensor<1, dim, Number> &n_ij) const;
128
130
131 protected:
134
140 Number c(const Number gamma_Z) const;
141
147 Number
148 alpha(const Number &rho, const Number &gamma, const Number &a) const;
149
157 Number p_star_RS_full(const primitive_type &riemann_data_i,
158 const primitive_type &riemann_data_j) const;
159
167 Number p_star_SS_full(const primitive_type &riemann_data_i,
168 const primitive_type &riemann_data_j) const;
169
170 /*
171 * Compute only the failsafe the failsafe bound for \f$\tilde
172 * p_2^\ast\f$ (5.11) in @cite ClaytonGuermondPopov-2022
173 *
174 * Cost: 0x pow, 3x division, 3x sqrt
175 */
176 Number p_star_failsafe(const primitive_type &riemann_data_i,
177 const primitive_type &riemann_data_j) const;
178
179 /*
180 * Compute a simultaneous upper bound on (5.7) second formula for
181 * \tilde p_2^\ast (5.8) first formula for \tilde p_1^\ast (5.11)
182 * formula for \tilde p_2^\ast in @cite ClaytonGuermondPopov-2022
183 *
184 * Cost: 3x pow, 9x division, 2x sqrt
185 *
186 * @todo improve documentation
187 */
188 Number p_star_interpolated(const primitive_type &riemann_data_i,
189 const primitive_type &riemann_data_j) const;
190
191
192#ifndef DOXYGEN
193 /*
194 * FIXME
195 */
196 Number f(const primitive_type &riemann_data, const Number p_star) const;
197
198
199 /*
200 * FIXME
201 */
202 Number phi(const primitive_type &riemann_data_i,
203 const primitive_type &riemann_data_j,
204 const Number p_in) const;
205#endif
206
207
222 Number phi_of_p_max(const primitive_type &riemann_data_i,
223 const primitive_type &riemann_data_j) const;
224
225
231 Number lambda1_minus(const primitive_type &riemann_data,
232 const Number p_star) const;
233
234
240 Number lambda3_plus(const primitive_type &primitive_state,
241 const Number p_star) const;
242
243
253 Number compute_lambda(const primitive_type &riemann_data_i,
254 const primitive_type &riemann_data_j,
255 const Number p_star) const;
256
257
267 const Number &p,
268 const dealii::Tensor<1, dim, Number> &n_ij) const;
269
270 private:
271 const HyperbolicSystem &hyperbolic_system;
272 const Parameters &parameters;
273
275 &precomputed_values;
277 };
278 } // namespace EulerAEOS
279} /* namespace ryujin */
dealii::Tensor< 1, problem_dimension, Number > state_type
std::array< Number, n_precomputed_values > precomputed_state_type
typename get_value_type< Number >::type ScalarNumber
static constexpr unsigned int n_precomputed_values
static constexpr unsigned int problem_dimension
RiemannSolverParameters(const std::string &subsection="/RiemannSolver")
Number p_star_RS_full(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
RiemannSolverParameters< ScalarNumber > Parameters
Number lambda1_minus(const primitive_type &riemann_data, const Number p_star) const
Number alpha(const Number &rho, const Number &gamma, const Number &a) const
static constexpr unsigned int problem_dimension
primitive_type riemann_data_from_state(const state_type &U, const Number &p, const dealii::Tensor< 1, dim, Number > &n_ij) const
Number p_star_failsafe(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
Number p_star_SS_full(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
static constexpr unsigned int n_precomputed_values
Number lambda3_plus(const primitive_type &primitive_state, const Number p_star) const
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const Parameters &parameters, const MultiComponentVector< ScalarNumber, n_precomputed_values > &precomputed_values)
typename View::state_type state_type
static constexpr unsigned int riemann_data_size
Number p_star_interpolated(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
typename View::precomputed_state_type precomputed_state_type
Number phi_of_p_max(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 p_star) const
std::array< Number, riemann_data_size > primitive_type
typename View::ScalarNumber ScalarNumber
Number c(const Number gamma_Z) const
Number compute(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const