/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/wave_speed/abstract_wave_speed.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/wave_speed/abstract_wave_speed.hh Source File
DiFfRG
Discretization Framework for functional Renormalization Group flows
abstract_wave_speed.hh
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <concepts>
5#include <cstddef>
6#include <utility>
7
9
10namespace DiFfRG
11{
12 namespace def
13 {
44 template <typename T>
45 concept HasWaveSpeed =
46 // ---- compute_speeds (dim=1, n_components=1) ----
47 requires(const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 1>, 1> &J1_plus,
48 const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 1>, 1> &J1_minus) {
49 {
50 T::template compute_speeds<double, 1, 1>(J1_plus, J1_minus)
51 } -> std::same_as<std::array<double, 1>>;
52 } &&
53 // ---- compute_speeds (dim=2, n_components=2) ----
54 requires(const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 2>, 2> &J2_plus,
55 const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 2>, 2> &J2_minus) {
56 {
57 T::template compute_speeds<double, 2, 2>(J2_plus, J2_minus)
58 } -> std::same_as<std::array<double, 2>>;
59 } &&
60 // ---- compute_selected_speed_derivatives (dim=1, n_components=1) ----
61 requires(const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 1>, 1> &J1_plus,
62 const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 1>, 1> &J1_minus,
65 {
66 T::template compute_selected_speed_derivatives<double, 1, 1>(J1_plus, J1_minus, H1_plus, H1_minus)
67 } -> std::same_as<std::pair<std::array<std::array<double, 1>, 1>, std::array<std::array<double, 1>, 1>>>;
68 } &&
69 // ---- compute_selected_speed_derivatives (dim=2, n_components=2) ----
70 requires(const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 2>, 2> &J2_plus,
71 const std::array<FV::KurganovTadmor::internal::JacobianMatrix<double, 2>, 2> &J2_minus,
74 {
75 T::template compute_selected_speed_derivatives<double, 2, 2>(J2_plus, J2_minus, H2_plus, H2_minus)
76 } -> std::same_as<std::pair<std::array<std::array<double, 2>, 2>, std::array<std::array<double, 2>, 2>>>;
77 };
78
79 } // namespace def
80} // namespace DiFfRG
Concept that any wave-speed strategy must satisfy.
Definition abstract_wave_speed.hh:45
std::array< std::array< std::array< std::array< NumberType, n_components >, n_components >, n_components >, dim > HessianTensor
Definition flux_jacobian_hessian.hh:24
Definition complex_math.hh:10