ryujin 2.1.1 revision 5a1111835e8617c1fa5372346ab85a0bd39a2720
riemann_solver.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0
3// [LANL Copyright Statement]
4// Copyright (C) 2023 - 2024 by the ryujin authors
5// Copyright (C) 2023 - 2024 by Triad National Security, LLC
6//
7
8#pragma once
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 ShallowWater
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
40 template <int dim, typename Number = double>
42 {
43 public:
48
52 static constexpr unsigned int problem_dimension = View::problem_dimension;
53
58 static constexpr unsigned int riemann_data_size = 3;
59
64 using primitive_type = std::array<Number, riemann_data_size>;
65
69 using state_type = typename View::state_type;
70
74 static constexpr unsigned int n_precomputed_values =
76
81
86
91
96 const HyperbolicSystem &hyperbolic_system,
97 const Parameters &parameters,
99 &precomputed_values)
100 : hyperbolic_system(hyperbolic_system)
101 , parameters(parameters)
102 , precomputed_values(precomputed_values)
103 {
104 }
105
111 Number compute(const primitive_type &riemann_data_i,
112 const primitive_type &riemann_data_j) const;
113
118 Number compute(const state_type &U_i,
119 const state_type &U_j,
120 const unsigned int i,
121 const unsigned int *js,
122 const dealii::Tensor<1, dim, Number> &n_ij) const;
123
124 protected:
126
130
131 Number f(const primitive_type &primitive_state,
132 const Number &h_star) const;
133
134 Number phi(const primitive_type &riemann_data_i,
135 const primitive_type &riemann_data_j,
136 const Number &h) const;
137
138 Number lambda1_minus(const primitive_type &riemann_data,
139 const Number h_star) const;
140
141 Number lambda3_plus(const primitive_type &riemann_data,
142 const Number h_star) const;
143
144 Number compute_lambda(const primitive_type &riemann_data_i,
145 const primitive_type &riemann_data_j,
146 const Number h_star) const;
147
148 public:
149 Number compute_h_star(const primitive_type &riemann_data_i,
150 const primitive_type &riemann_data_j) const;
151
152 protected:
155 const dealii::Tensor<1, dim, Number> &n_ij) const;
156
157 private:
158 const HyperbolicSystem &hyperbolic_system;
159 const Parameters &parameters;
160
162 &precomputed_values;
164 };
165 } // namespace ShallowWater
166} // namespace ryujin
typename get_value_type< Number >::type ScalarNumber
static constexpr unsigned int n_precomputed_values
dealii::Tensor< 1, problem_dimension, Number > state_type
static constexpr unsigned int problem_dimension
RiemannSolverParameters(const std::string &subsection="/RiemannSolver")
Number phi(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number &h) const
static constexpr unsigned int problem_dimension
primitive_type riemann_data_from_state(const state_type &U, const dealii::Tensor< 1, dim, Number > &n_ij) const
typename View::ScalarNumber ScalarNumber
RiemannSolverParameters< ScalarNumber > Parameters
Number lambda3_plus(const primitive_type &riemann_data, const Number h_star) const
Number lambda1_minus(const primitive_type &riemann_data, const Number h_star) const
static constexpr unsigned int n_precomputed_values
static constexpr unsigned int riemann_data_size
Number compute_lambda(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number h_star) const
std::array< Number, riemann_data_size > primitive_type
Number compute_h_star(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
typename View::state_type state_type
Number compute(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
Number f(const primitive_type &primitive_state, const Number &h_star) const
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const Parameters &parameters, const MultiComponentVector< ScalarNumber, n_precomputed_values > &precomputed_values)