5 #ifndef _PFASST__QUADRATURE_HPP_
6 #define _PFASST__QUADRATURE_HPP_
13 #include <Eigen/Dense>
14 template<
typename scalar>
15 using Matrix = Eigen::Matrix<scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
17 #include <boost/math/constants/constants.hpp>
29 template<
typename scalar>
30 using Matrix = Eigen::Matrix<scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
52 template<
typename precision = pfasst::time_precision>
56 if (qtype == QuadratureType::GaussLegendre) {
57 return make_shared<GaussLegendre<precision>>(nnodes);
58 }
else if (qtype == QuadratureType::GaussLobatto) {
59 return make_shared<GaussLobatto<precision>>(nnodes);
60 }
else if (qtype == QuadratureType::GaussRadau) {
61 return make_shared<GaussRadau<precision>>(nnodes);
62 }
else if (qtype == QuadratureType::ClenshawCurtis) {
63 return make_shared<ClenshawCurtis<precision>>(nnodes);
64 }
else if (qtype == QuadratureType::Uniform) {
65 return make_shared<Uniform<precision>>(nnodes);
67 throw ValueError(
"invalid node type passed to compute_nodes.");
83 template<
typename precision = pfasst::time_precision>
86 return quadrature_factory<precision>(nnodes, qtype)->get_nodes();
94 template<
typename precision = time_precision>
97 const size_t ndst = dst.size();
98 const size_t nsrc = src.size();
102 for (
size_t i = 0; i < ndst; i++) {
103 for (
size_t j = 0; j < nsrc; j++) {
107 for (
size_t k = 0; k < nsrc; k++) {
108 if (k == j) {
continue; }
109 den *= src[j] - src[k];
110 num *= dst[i] - src[k];
113 if (abs(num) > 1e-32) {
114 mat(i, j) = num / den;
126 #endif // _PFASST__QUADRATURE_HPP_
QuadratureType
Quadrature type descriptors.
vector< precision > compute_nodes(size_t nnodes, QuadratureType qtype)
Compute quadrature nodes for given quadrature type descriptor.
Matrix< precision > compute_interp(vector< precision > dst, vector< precision > src)
shared_ptr< IQuadrature< precision > > quadrature_factory(const size_t nnodes, const QuadratureType qtype)
Instantiates quadrature handler for given number of nodes and type descriptor.
interfaces for SDC/MLSDC/PFASST algorithms.
Eigen::Matrix< scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > Matrix