ryujin 2.1.1 revision 46bf70e400e423a8ffffe8300887eeb35b8dfb2c
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 <compile_time_options.h>
11
12#include "hyperbolic_system.h"
13
14#include <simd.h>
15
16#include <deal.II/base/point.h>
17#include <deal.II/base/tensor.h>
18
19namespace ryujin
20{
21 namespace ShallowWater
22 {
23 template <typename ScalarNumber = double>
24 class RiemannSolverParameters : public dealii::ParameterAcceptor
25 {
26 public:
27 RiemannSolverParameters(const std::string &subsection = "/RiemannSolver")
28 : ParameterAcceptor(subsection)
29 {
30 }
31 };
32
33
42 template <int dim, typename Number = double>
44 {
45 public:
50
52
54
56
57 using state_type = typename View::state_type;
58
63 static constexpr unsigned int riemann_data_size = 3;
64
69 using primitive_type = typename std::array<Number, riemann_data_size>;
70
72
74
76
78
82
86 RiemannSolver(const HyperbolicSystem &hyperbolic_system,
87 const Parameters &parameters,
88 const PrecomputedVector &precomputed_values)
89 : hyperbolic_system(hyperbolic_system)
90 , parameters(parameters)
91 , precomputed_values(precomputed_values)
92 {
93 }
94
100 Number compute(const primitive_type &riemann_data_i,
101 const primitive_type &riemann_data_j) const;
102
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
113 protected:
115
119
120 Number f(const primitive_type &primitive_state,
121 const Number &h_star) const;
122
123 Number phi(const primitive_type &riemann_data_i,
124 const primitive_type &riemann_data_j,
125 const Number &h) const;
126
127 Number lambda1_minus(const primitive_type &riemann_data,
128 const Number h_star) const;
129
130 Number lambda3_plus(const primitive_type &riemann_data,
131 const Number h_star) const;
132
133 Number compute_lambda(const primitive_type &riemann_data_i,
134 const primitive_type &riemann_data_j,
135 const Number h_star) const;
136
137 public:
138 Number compute_h_star(const primitive_type &riemann_data_i,
139 const primitive_type &riemann_data_j) const;
140
141 protected:
144 const dealii::Tensor<1, dim, Number> &n_ij) const;
145
146 private:
147 const HyperbolicSystem &hyperbolic_system;
148 const Parameters &parameters;
149 const PrecomputedVector &precomputed_values;
151 };
152 } // namespace ShallowWater
153} // namespace ryujin
typename get_value_type< Number >::type ScalarNumber
Vectors::MultiComponentVector< ScalarNumber, n_precomputed_values > PrecomputedVector
dealii::Tensor< 1, problem_dimension, Number > state_type
std::array< Number, n_precomputed_values > precomputed_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
primitive_type riemann_data_from_state(const state_type &U, const dealii::Tensor< 1, dim, Number > &n_ij) const
typename std::array< Number, riemann_data_size > primitive_type
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 riemann_data_size
Number compute_lambda(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j, const Number h_star) const
typename View::PrecomputedVector PrecomputedVector
RiemannSolver(const HyperbolicSystem &hyperbolic_system, const Parameters &parameters, const PrecomputedVector &precomputed_values)
Number compute_h_star(const primitive_type &riemann_data_i, const primitive_type &riemann_data_j) const
typename View::precomputed_type precomputed_type
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
static constexpr auto problem_dimension