/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/reconstructor/advection/abstract_reconstructor.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/discretization/FV/reconstructor/advection/abstract_reconstructor.hh Source File
DiFfRG
Discretization Framework for functional Renormalization Group flows
abstract_reconstructor.hh
Go to the documentation of this file.
1#pragma once
2
4
5// deal.II
6#include <deal.II/base/point.h>
7
8// autodiff
9#include <autodiff/forward/real/real.hpp>
10
11#include <array>
12#include <concepts>
13
14namespace DiFfRG
15{
16 namespace def
17 {
21 template <typename T>
23 requires {
24 {
25 T::dim
26 } -> std::convertible_to<int>;
27 {
28 T::jacobian_stencil_radius
29 } -> std::convertible_to<int>;
30 } &&
31 // ---- compute_gradient (n_components=1) ----
32 requires(const dealii::Point<T::dim> &center, const std::array<double, 1> &u_center,
33 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
34 const std::array<std::array<double, 1>, n_faces<T::dim>> &u_n) {
35 {
36 T::template compute_gradient<1>(center, u_center, x_n, u_n)
37 } -> std::same_as<GradientType<T::dim, double, 1>>;
38 } &&
39 // ---- compute_gradient (n_components=2) ----
40 requires(const dealii::Point<T::dim> &center, const std::array<double, 2> &u_center,
41 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
42 const std::array<std::array<double, 2>, n_faces<T::dim>> &u_n) {
43 {
44 T::template compute_gradient<2>(center, u_center, x_n, u_n)
45 } -> std::same_as<GradientType<T::dim, double, 2>>;
46 } &&
47 // ---- compute_gradient_at_point (n_components=1) ----
48 requires(const dealii::Point<T::dim> &center, const dealii::Point<T::dim> &x,
49 const std::array<double, 1> &u_center, const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
50 const std::array<std::array<double, 1>, n_faces<T::dim>> &u_n) {
51 {
52 T::template compute_gradient_at_point<1>(center, x, u_center, x_n, u_n)
53 } -> std::same_as<GradientType<T::dim, double, 1>>;
54 } &&
55 // ---- compute_gradient_at_point (n_components=2) ----
56 requires(const dealii::Point<T::dim> &center, const dealii::Point<T::dim> &x,
57 const std::array<double, 2> &u_center, const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
58 const std::array<std::array<double, 2>, n_faces<T::dim>> &u_n) {
59 {
60 T::template compute_gradient_at_point<2>(center, x, u_center, x_n, u_n)
61 } -> std::same_as<GradientType<T::dim, double, 2>>;
62 } &&
63 // ---- compute_gradient_derivative (n_components=1) ----
64 requires(const dealii::Point<T::dim> &center, const std::array<autodiff::Real<1, double>, 1> &u_center,
65 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
66 const std::array<std::array<autodiff::Real<1, double>, 1>, n_faces<T::dim>> &u_n) {
67 {
68 T::template compute_gradient_derivative<1>(center, u_center, x_n, u_n)
69 } -> std::same_as<GradientType<T::dim, double, 1>>;
70 } &&
71 // ---- compute_gradient_derivative (n_components=2) ----
72 requires(const dealii::Point<T::dim> &center, const std::array<autodiff::Real<1, double>, 2> &u_center,
73 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
74 const std::array<std::array<autodiff::Real<1, double>, 2>, n_faces<T::dim>> &u_n) {
75 {
76 T::template compute_gradient_derivative<2>(center, u_center, x_n, u_n)
77 } -> std::same_as<GradientType<T::dim, double, 2>>;
78 } &&
79 // ---- compute_gradient_at_point_derivative (n_components=1) ----
80 requires(const dealii::Point<T::dim> &center, const dealii::Point<T::dim> &x,
81 const std::array<autodiff::Real<1, double>, 1> &u_center,
82 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
83 const std::array<std::array<autodiff::Real<1, double>, 1>, n_faces<T::dim>> &u_n) {
84 {
85 T::template compute_gradient_at_point_derivative<1>(center, x, u_center, x_n, u_n)
86 } -> std::same_as<GradientType<T::dim, double, 1>>;
87 } &&
88 // ---- compute_gradient_at_point_derivative (n_components=2) ----
89 requires(const dealii::Point<T::dim> &center, const dealii::Point<T::dim> &x,
90 const std::array<autodiff::Real<1, double>, 2> &u_center,
91 const std::array<dealii::Point<T::dim>, n_faces<T::dim>> &x_n,
92 const std::array<std::array<autodiff::Real<1, double>, 2>, n_faces<T::dim>> &u_n) {
93 {
94 T::template compute_gradient_at_point_derivative<2>(center, x, u_center, x_n, u_n)
95 } -> std::same_as<GradientType<T::dim, double, 2>>;
96 } &&
97 // ---- compute_third_derivatives_at_face (n_components=1) ----
98 requires(const std::array<dealii::Point<T::dim>, 4> &x_stencil,
99 const std::array<std::array<double, 1>, 4> &u_stencil) {
100 {
101 T::template compute_third_derivatives_at_face<1>(x_stencil, u_stencil)
102 } -> std::same_as<ThirdDerivativeType<T::dim, double, 1>>;
103 } &&
104 // ---- compute_third_derivatives_at_face (n_components=2) ----
105 requires(const std::array<dealii::Point<T::dim>, 4> &x_stencil,
106 const std::array<std::array<double, 2>, 4> &u_stencil) {
107 {
108 T::template compute_third_derivatives_at_face<2>(x_stencil, u_stencil)
109 } -> std::same_as<ThirdDerivativeType<T::dim, double, 2>>;
110 } &&
111 // ---- compute_third_derivatives_at_face_derivative (n_components=1) ----
112 requires(const std::array<dealii::Point<T::dim>, 4> &x_stencil,
113 const std::array<std::array<autodiff::Real<1, double>, 1>, 4> &u_stencil) {
114 {
115 T::template compute_third_derivatives_at_face_derivative<1>(x_stencil, u_stencil)
116 } -> std::same_as<ThirdDerivativeType<T::dim, double, 1>>;
117 } &&
118 // ---- compute_third_derivatives_at_face_derivative (n_components=2) ----
119 requires(const std::array<dealii::Point<T::dim>, 4> &x_stencil,
120 const std::array<std::array<autodiff::Real<1, double>, 2>, 4> &u_stencil) {
121 {
122 T::template compute_third_derivatives_at_face_derivative<2>(x_stencil, u_stencil)
123 } -> std::same_as<ThirdDerivativeType<T::dim, double, 2>>;
124 };
125
126 } // namespace def
127} // namespace DiFfRG
Concept that any gradient-reconstruction strategy must satisfy.
Definition abstract_reconstructor.hh:22
constexpr std::size_t n_faces
Definition types.hh:11
Definition complex_math.hh:10