ryujin 2.1.1 revision ef0fcd4010d109b860652ece4a7b8963fb7d46b1
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 <compile_time_options.h>
9
10#include "hyperbolic_system.h"
11
12#include <simd.h>
13
14#include <deal.II/base/point.h>
15#include <deal.II/base/tensor.h>
16
17namespace ryujin
18{
19 namespace EulerAEOS
20 {
21 template <typename ScalarNumber = double>
22 class RiemannSolverParameters : public dealii::ParameterAcceptor
23 {
24 public:
25 RiemannSolverParameters(const std::string &subsection = "/RiemannSolver")
26 : ParameterAcceptor(subsection)
27 {
28 }
29 };
30
31
41 template <int dim, typename Number = double>
43 {
44 public:
49
51
53
55
56 using state_type = typename View::state_type;
57
62 static constexpr unsigned int riemann_data_size = 5;
63
68 using primitive_type = typename std::array<Number, riemann_data_size>;
69
71
73
75
77
81
85 RiemannSolver(const HyperbolicSystem &hyperbolic_system,
86 const Parameters &parameters,
87 const PrecomputedVector &precomputed_values)
88 : hyperbolic_system(hyperbolic_system)
89 , parameters(parameters)
90 , precomputed_values(precomputed_values)
91 {
92 }
93
99 Number compute(const primitive_type &riemann_data_i,
100 const primitive_type &riemann_data_j) const;
101
107 Number compute(const state_type &U_i,
108 const state_type &U_j,
109 const unsigned int i,
110 const unsigned int *js,
111 const dealii::Tensor<1, dim, Number> &n_ij) const;
112
114
115 protected:
118
124 Number c(const Number &gamma_Z) const;
125
131 Number
132 alpha(const Number &rho, const Number &gamma, const Number &a) const;
133
141 Number p_star_RS_full(const primitive_type &riemann_data_i,
142 const primitive_type &riemann_data_j) const;
143
151 Number p_star_SS_full(const primitive_type &riemann_data_i,
152 const primitive_type &riemann_data_j) const;
153
154 /*
155 * Compute only the failsafe the failsafe bound for \f$\tilde
156 * p_2^\ast\f$ (5.11) in @cite ClaytonGuermondPopov-2022
157 *
158 * Cost: 0x pow, 3x division, 3x sqrt
159 */
160 Number p_star_failsafe(const primitive_type &riemann_data_i,
161 const primitive_type &riemann_data_j) const;
162
163 /*
164 * Compute a simultaneous upper bound on (5.7) second formula for
165 * \tilde p_2^\ast (5.8) first formula for \tilde p_1^\ast (5.11)
166 * formula for \tilde p_2^\ast in @cite ClaytonGuermondPopov-2022
167 *
168 * Cost: 3x pow, 9x division, 2x sqrt
169 *
170 * @todo improve documentation
171 */
172 Number p_star_interpolated(const primitive_type &riemann_data_i,
173 const primitive_type &riemann_data_j) const;
174
175
176#ifndef DOXYGEN
177 /*
178 * FIXME
179 */
180 Number f(const primitive_type &riemann_data, const Number p_star) const;
181
182
183 /*
184 * FIXME
185 */
186 Number phi(const primitive_type &riemann_data_i,
187 const primitive_type &riemann_data_j,
188 const Number p_in) const;
189#endif
190
191
206 Number phi_of_p_max(const primitive_type &riemann_data_i,
207 const primitive_type &riemann_data_j) const;
208
209
215 Number lambda1_minus(const primitive_type &riemann_data,
216 const Number p_star) const;
217
218
224 Number lambda3_plus(const primitive_type &primitive_state,
225 const Number p_star) const;
226
227
237 Number compute_lambda(const primitive_type &riemann_data_i,
238 const primitive_type &riemann_data_j,
239 const Number p_star) const;
240
241
251 const Number &p,
252 const dealii::Tensor<1, dim, Number> &n_ij) const;
253
254 private:
255 const HyperbolicSystem &hyperbolic_system;
256 const Parameters &parameters;
257 const PrecomputedVector &precomputed_values;
259 };
260 } // namespace EulerAEOS
261} /* namespace ryujin */
dealii::Tensor< 1, problem_dimension, Number > state_type
typename get_value_type< Number >::type ScalarNumber
static constexpr unsigned int problem_dimension
Vectors::MultiComponentVector< ScalarNumber, n_precomputed_values > PrecomputedVector
std::array< Number, n_precomputed_values > precomputed_type
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
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
Number lambda3_plus(const primitive_type &primitive_state, const Number p_star) const
typename View::state_type state_type
static constexpr unsigned int riemann_data_size
typename std::array< Number, riemann_data_size > primitive_type
Number p_star_interpolated(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
Number phi_of_p_max(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
static constexpr auto problem_dimension
Number compute_lambda(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number p_star) const
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const Parameters &parameters, const PrecomputedVector &precomputed_values)
typename View::precomputed_type precomputed_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
typename View::PrecomputedVector PrecomputedVector