39 throw std::invalid_argument(
40 "IterativeGaussLineQuadrature::compute_points_weights(): invalid or missing eval."
47 base::points_weights_computed_ =
true;
52 uint8_t order = starting_order_;
53 gauss_quad_.compute_points_weights(
p1,
p2);
58 if (max_iters_ > LINE_MAX_ORDER)
59 throw std::domain_error(
60 "IterativeGaussLineQuadrature::compute_points_weights(): max iterations must not exceed " + std::to_string(LINE_MAX_ORDER));
62 for (order = starting_order_ + 1; order <= max_iters_; order++)
64 gauss_quad_.set_order(order);
65 gauss_quad_.compute_points_weights(
p1,
p2);
66 vals = eval(gauss_quad_.points());
71 base::points_ = gauss_quad_.points();
72 base::weights_ = gauss_quad_.weights();
73 base::points_weights_computed_ =
true;
75 converged_order_ = order;
82 base::points_ = gauss_quad_.points();
83 base::weights_ = gauss_quad_.weights();
84 base::points_weights_computed_ =
true;
void compute_points_weights(ConstEigRef< EigColVecN< Float, dim > > p1, ConstEigRef< EigColVecN< Float, dim > > p2, std::function< EigRowVec< Complex >(ConstEigRef< EigMatNX< Float, dim > >)> eval={}) override
Computes and stores the points on which to evaluate the integrand, and the corresponding weights.
bool compare_with_tol(const Complex val, const Complex val_ref, const Float tol, const uint8_t mode)
Compares two complex numbers within a given tolerance based on a given rule.
const Eigen::Ref< const EigObj > ConstEigRef
Read-only reference to an Eigen object.
Eigen::Matrix< T, 1, Eigen::Dynamic > EigRowVec
Dynamic-size row vector containing type T.
std::complex< Float > Complex
Complex floating point number.
Eigen::Matrix< T, N, 1 > EigColVecN
Fixed-size column vector of size N containing type T.
Primary namespace for the OpenBEM library.