DiFfRG
Loading...
Searching...
No Matches
quadrature.hh
Go to the documentation of this file.
1#pragma once
2
3// DiFfRG
8
9// standard library
10#include <string>
11#include <vector>
12
13namespace DiFfRG
14{
27 template <typename T>
28 void make_quadrature(std::vector<T> &a, std::vector<T> &b, const T mu0, std::vector<T> &x, std::vector<T> &w)
29 {
30 const size_t n = a.size();
31 if (b.size() != n) throw std::runtime_error("The size of b must be a.size().");
32 x.resize(n);
33 w.resize(n);
34
35 w[0] = 1.;
36 for (size_t i = 1; i < n; ++i) {
37 b[i - 1] = std::sqrt(b[i - 1]);
38 w[i] = 0.0;
39 }
41 for (size_t i = 0; i < n; i++) {
42 x[i] = a[i];
43 w[i] = mu0 * powr<2>(w[i]);
44 }
45 }
46
48
49 template <typename NT> class Quadrature
50 {
51 public:
53 Quadrature(const size_t order, const QuadratureType _t);
54
55 void reinit(const size_t order, const QuadratureType _t);
56
57 const std::vector<NT> &nodes() const;
58 const std::vector<NT> &weights() const;
59
60 const NT *device_nodes();
61 const NT *device_weights();
62
63 size_t size() const;
65
66 private:
69
70 std::vector<NT> m_nodes;
71 std::vector<NT> m_weights;
72#ifdef __CUDACC__
73 thrust::device_vector<NT> m_device_nodes;
74 thrust::device_vector<NT> m_device_weights;
75
77#endif
78 };
79} // namespace DiFfRG
Definition quadrature.hh:50
const NT * device_weights()
void reinit(const size_t order, const QuadratureType _t)
thrust::device_vector< NT > m_device_weights
Definition quadrature.hh:74
const std::vector< NT > & nodes() const
Quadrature(const size_t order, const QuadratureType _t)
uint order
Definition quadrature.hh:68
QuadratureType get_type() const
std::vector< NT > m_nodes
Definition quadrature.hh:70
const std::vector< NT > & weights() const
std::vector< NT > m_weights
Definition quadrature.hh:71
QuadratureType _t
Definition quadrature.hh:67
thrust::device_vector< NT > m_device_nodes
Definition quadrature.hh:73
const NT * device_nodes()
size_t size() const
Definition complex_math.hh:14
constexpr __forceinline__ __host__ __device__ NumberType powr(const NumberType x)
A compile-time evaluatable power function for whole number exponents.
Definition math.hh:45
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:28
QuadratureType
Definition quadrature.hh:47
unsigned int uint
Definition utils.hh:22
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:35