/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/physics/integration/vacuum/integrator_p2_4d_2ang.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/physics/integration/vacuum/integrator_p2_4d_2ang.hh Source File
DiFfRG
integrator_p2_4d_2ang.hh
Go to the documentation of this file.
1#pragma once
2
3// DiFfRG
6
7// standard libraries
8#include <array>
9
10namespace DiFfRG
11{
12 namespace internal
13 {
14 template <typename NT, typename KERNEL> class Transform_p2_4D_2ang
15 {
16 public:
17 using ctype = typename get_type::ctype<NT>;
18
19 static constexpr ctype int_prefactor = 2 * M_PI // phi integral
20 / powr<4>((ctype)2 * M_PI); // fourier factor
21
22 template <typename... T>
23 static KOKKOS_FORCEINLINE_FUNCTION NT kernel(const ctype q, const ctype cos1, const ctype cos2, const T &...t)
24 requires provides_kernel<NT, KERNEL, ctype, 3, T...>
25 {
26 using namespace DiFfRG::compute;
27
28 const ctype int_element = powr<4 - 1>(q); // from p integral
29
30 // sqrt(1. - powr<2>(cos1)); // the cos1 integral jacobian is already included
31 // in the chebyshev2 quadrature
32
33 const NT result = KERNEL::kernel(q, cos1, cos2, t...);
34
35 return int_prefactor * int_element * result;
36 }
37
38 template <typename... T>
39 static KOKKOS_FORCEINLINE_FUNCTION NT constant(const T &...t)
40 requires provides_constant<NT, KERNEL, T...>
41 {
42 return KERNEL::constant(t...);
43 }
44 };
45
46 } // namespace internal
47
61 template <int dim, typename NT, typename KERNEL, typename ExecutionSpace>
62 requires(dim == 4)
64 : public QuadratureIntegrator<3, NT, internal::Transform_p2_4D_2ang<NT, KERNEL>, ExecutionSpace>
65 {
67
68 public:
72 using ctype = typename get_type::ctype<NT>;
76 using execution_space = ExecutionSpace;
77
78 Integrator_p2_4D_2ang(QuadratureProvider &quadrature_provider, const JSONValue &json)
80 : Integrator_p2_4D_2ang(quadrature_provider,
81 internal::make_int_grid<3, NT>(json, {"x_order", "cos1_order", "cos2_order"}),
83 {
84 }
85
86 Integrator_p2_4D_2ang(QuadratureProvider &quadrature_provider, const std::array<size_t, 3> grid_size,
87 ctype x_extent = 2.)
88 : Base(quadrature_provider, grid_size, {0, 0, -1.}, {std::sqrt(x_extent), 1, 1},
90 x_extent(x_extent), k(1.)
91 {
92 }
93
94 void set_x_extent(ctype x_extent)
95 {
96 this->x_extent = x_extent;
97 Base::set_grid_extents({0, 0, -1}, {std::sqrt(x_extent) * k, 1, 1});
98 }
99
100 void set_k(ctype k)
101 {
102 this->k = k;
103 Base::set_grid_extents({0, 0, -1}, {std::sqrt(x_extent) * k, 1, 1});
104 }
105
106 private:
109 };
110} // namespace DiFfRG
Integrator_p2_4D_2ang integrates a kernel depending on the radial momentum and two angles on as $$...
Definition integrator_p2_4d_2ang.hh:65
ExecutionSpace execution_space
Execution space to be used for the integration, e.g. GPU_exec, TBB_exec.
Definition integrator_p2_4d_2ang.hh:76
Integrator_p2_4D_2ang(QuadratureProvider &quadrature_provider, const JSONValue &json)
Definition integrator_p2_4d_2ang.hh:78
Integrator_p2_4D_2ang(QuadratureProvider &quadrature_provider, const std::array< size_t, 3 > grid_size, ctype x_extent=2.)
Definition integrator_p2_4d_2ang.hh:86
typename get_type::ctype< NT > ctype
Numerical type to be used for integration tasks e.g. the argument or possible jacobians.
Definition integrator_p2_4d_2ang.hh:72
void set_k(ctype k)
Definition integrator_p2_4d_2ang.hh:100
ctype x_extent
Definition integrator_p2_4d_2ang.hh:107
ctype k
Definition integrator_p2_4d_2ang.hh:108
void set_x_extent(ctype x_extent)
Definition integrator_p2_4d_2ang.hh:94
A wrapper around the boost json value class.
Definition json.hh:19
This class performs numerical integration over a d-dimensional hypercube using quadrature rules.
Definition quadrature_integrator.hh:27
A class that provides quadrature points and weights, in host and device memory. The quadrature points...
Definition quadrature_provider.hh:137
Definition integrator_p2_4d_2ang.hh:15
static KOKKOS_FORCEINLINE_FUNCTION NT kernel(const ctype q, const ctype cos1, const ctype cos2, const T &...t)
Definition integrator_p2_4d_2ang.hh:23
static constexpr ctype int_prefactor
Definition integrator_p2_4d_2ang.hh:19
static KOKKOS_FORCEINLINE_FUNCTION NT constant(const T &...t)
Definition integrator_p2_4d_2ang.hh:39
typename get_type::ctype< NT > ctype
Definition integrator_p2_4d_2ang.hh:17
Definition abstract_integrator.hh:46
Definition abstract_integrator.hh:42
Definition abstract_integrator.hh:28
Definition math.hh:220
typename internal::_ctype< CT >::value ctype
Definition types.hh:134
std::array< size_t, dim > make_int_grid(const JSONValue &json, const std::array< std::string, dim > &names)
Definition abstract_integrator.hh:13
Definition complex_math.hh:10
constexpr KOKKOS_INLINE_FUNCTION NumberType powr(const NumberType x)
A compile-time evaluatable power function for whole number exponents.
Definition math.hh:41
double optimize_x_extent(const JSONValue &json)
Definition optimize.hh:8
@ chebyshev2
Definition quadrature.hh:45
@ legendre
Definition quadrature.hh:45