ryujin 2.1.1 revision 3913ebe5e1d74c8fef21bcd286906a244031ce08
riemann_solver.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2023 - 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 ScalarConservation
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 use_greedy_wavespeed_ = false;
29 add_parameter("use greedy wavespeed",
30 use_greedy_wavespeed_,
31 "Use a greedy wavespeed estimate instead of a guaranteed "
32 "upper bound "
33 "on the maximal wavespeed (for convex fluxes).");
34
35 use_averaged_entropy_ = false;
36 add_parameter("use averaged entropy",
37 use_averaged_entropy_,
38 "In addition to the wavespeed estimate based on the Roe "
39 "average and "
40 "flux gradients of the left and right state also enforce "
41 "an entropy "
42 "inequality on the averaged Krŭzkov entropy.");
43
44 random_entropies_ = 0;
45 add_parameter(
46 "random entropies",
47 random_entropies_,
48 "In addition to the wavespeed estimate based on the Roe average "
49 "and "
50 "flux gradients of the left and right state also enforce an "
51 "entropy "
52 "inequality on the prescribed number of random Krŭzkov entropies.");
53 }
54
55 ACCESSOR_READ_ONLY(use_greedy_wavespeed);
56 ACCESSOR_READ_ONLY(use_averaged_entropy);
57 ACCESSOR_READ_ONLY(random_entropies);
58
59 private:
60 bool use_greedy_wavespeed_;
61 bool use_averaged_entropy_;
62 unsigned int random_entropies_;
63 };
64
65
76 template <int dim, typename Number = double>
78 {
79 public:
84
86
88
90
91 using state_type = typename View::state_type;
92
94
96
98
100
105
109 RiemannSolver(const HyperbolicSystem &hyperbolic_system,
110 const Parameters &parameters,
111 const PrecomputedVector &precomputed_values)
112 : hyperbolic_system(hyperbolic_system)
113 , parameters(parameters)
114 , precomputed_values(precomputed_values)
115 {
116 }
117
123 Number compute(const Number &u_i,
124 const Number &u_j,
125 const precomputed_type &prec_i,
126 const precomputed_type &prec_j,
127 const dealii::Tensor<1, dim, Number> &n_ij) const;
128
133 Number compute(const state_type &U_i,
134 const state_type &U_j,
135 const unsigned int i,
136 const unsigned int *js,
137 const dealii::Tensor<1, dim, Number> &n_ij) const;
138
139 private:
140 const HyperbolicSystem &hyperbolic_system;
141 const Parameters &parameters;
142 const PrecomputedVector &precomputed_values;
144 };
145 } // namespace ScalarConservation
146} // namespace ryujin
std::array< Number, n_precomputed_values > precomputed_type
Vectors::MultiComponentVector< ScalarNumber, n_precomputed_values > PrecomputedVector
typename get_value_type< Number >::type ScalarNumber
dealii::Tensor< 1, problem_dimension, Number > state_type
RiemannSolverParameters(const std::string &subsection="/RiemannSolver")
typename View::state_type state_type
typename View::ScalarNumber ScalarNumber
Number compute(const Number &u_i, const Number &u_j, const precomputed_type &prec_i, const precomputed_type &prec_j, const dealii::Tensor< 1, dim, Number > &n_ij) const
typename View::PrecomputedVector PrecomputedVector
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const Parameters &parameters, const PrecomputedVector &precomputed_values)
typename View::precomputed_type precomputed_type
RiemannSolverParameters< ScalarNumber > Parameters