/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/common/quadrature/quadrature.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/common/quadrature/quadrature.hh Source File
DiFfRG
quadrature.hh
Go to the documentation of this file.
1#pragma once
2
3// DiFfRG
6
7// standard library
8#include <vector>
9
10namespace DiFfRG
11{
24 template <typename T>
25 void make_quadrature(std::vector<T> &a, std::vector<T> &b, const T mu0, std::vector<T> &x, std::vector<T> &w)
26 {
27 const size_t n = a.size();
28 if (b.size() != n) throw std::runtime_error("The size of b must be a.size().");
29 x.resize(n);
30 w.resize(n);
31
32 w[0] = 1.;
33 for (size_t i = 1; i < n; ++i) {
34 b[i - 1] = std::sqrt(b[i - 1]);
35 w[i] = 0.0;
36 }
38 for (size_t i = 0; i < n; i++) {
39 x[i] = a[i];
40 w[i] = mu0 * powr<2>(w[i]);
41 }
42 }
43
53 bool operator<(const QuadratureType &x, const QuadratureType &y);
54
55 template <typename NT> class Quadrature
56 {
57 public:
59 Quadrature(const size_t order, const QuadratureType _t);
60
61 void reinit(const size_t order, const QuadratureType _t);
62
63 template <typename MemorySpace> Kokkos::View<const NT *, MemorySpace> nodes() const
64 {
65 if constexpr (std::is_same_v<MemorySpace, Kokkos::DefaultExecutionSpace::memory_space>) {
66 return device_nodes;
67 } else if constexpr (std::is_same_v<MemorySpace, Kokkos::DefaultHostExecutionSpace::memory_space>) {
68 return host_nodes;
69 } else {
70 throw std::runtime_error("Invalid memory space");
71 }
72 }
73
74 template <typename MemorySpace> Kokkos::View<const NT *, MemorySpace> weights() const
75 {
76 if constexpr (std::is_same_v<MemorySpace, Kokkos::DefaultExecutionSpace::memory_space>) {
77 return device_weights;
78 } else if constexpr (std::is_same_v<MemorySpace, Kokkos::DefaultHostExecutionSpace::memory_space>) {
79 return host_weights;
80 } else {
81 throw std::runtime_error("Invalid memory space");
82 }
83 }
84
85 size_t size() const;
86
88
89 private:
91 unsigned order;
92
93 Kokkos::View<NT *, GPU_memory> device_nodes;
94 Kokkos::View<NT *, GPU_memory> device_weights;
95
96 Kokkos::View<NT *, CPU_memory> host_nodes;
97 Kokkos::View<NT *, CPU_memory> host_weights;
98 };
99} // namespace DiFfRG
Definition quadrature.hh:56
unsigned order
Definition quadrature.hh:91
void reinit(const size_t order, const QuadratureType _t)
Kokkos::View< NT *, GPU_memory > device_nodes
Definition quadrature.hh:93
Kokkos::View< NT *, CPU_memory > host_weights
Definition quadrature.hh:97
Kokkos::View< const NT *, MemorySpace > nodes() const
Definition quadrature.hh:63
Quadrature(const size_t order, const QuadratureType _t)
Kokkos::View< NT *, CPU_memory > host_nodes
Definition quadrature.hh:96
Kokkos::View< NT *, GPU_memory > device_weights
Definition quadrature.hh:94
QuadratureType get_type() const
QuadratureType _t
Definition quadrature.hh:90
Kokkos::View< const NT *, MemorySpace > weights() const
Definition quadrature.hh:74
size_t size() const
Definition complex_math.hh:10
void make_quadrature(std::vector< T > &a, std::vector< T > &b, const T mu0, std::vector< T > &x, std::vector< T > &w)
Obtain the quadrature rule from a given three-term recurrence relation.
Definition quadrature.hh:25
constexpr KOKKOS_INLINE_FUNCTION NumberType powr(const NumberType x)
A compile-time evaluatable power function for whole number exponents.
Definition math.hh:41
bool operator<(const QuadratureType &x, const QuadratureType &y)
void diagonalize_tridiagonal_symmetric_matrix(std::vector< T > &d, std::vector< T > &e, std::vector< T > &z)
Diagonalizes a symmetric tridiagonal matrix.
Definition diagonalization.hh:31
Definition quadrature.hh:44
double a
Definition quadrature.hh:47
double beta
Definition quadrature.hh:48
QuadratureKind
Definition quadrature.hh:45
@ jacobi
Definition quadrature.hh:45
@ chebyshev2
Definition quadrature.hh:45
@ count
Definition quadrature.hh:45
@ hermite
Definition quadrature.hh:45
@ laguerre
Definition quadrature.hh:45
@ chebyshev
Definition quadrature.hh:45
@ legendre
Definition quadrature.hh:45
QuadratureKind kind
Definition quadrature.hh:46
double alpha
Definition quadrature.hh:48
QuadratureType(const QuadratureKind kind)
double b
Definition quadrature.hh:47