38 throw std::invalid_argument(
39 "IterativeGaussTriangleQuadrature::compute_points_weights(): invalid or missing eval."
42 uint8_t order = starting_order_;
43 gauss_quad_.set_order(order);
44 gauss_quad_.compute_points_weights(
tri);
49 if (max_iters_ > TRI_MAX_ORDER)
50 throw std::runtime_error(
51 "IterativeGaussTriangleQuadrature::compute_points_weights(): max iterations must not exceed " + std::to_string(TRI_MAX_ORDER));
53 for (order = starting_order_ + 1; order <= max_iters_; ++order)
56 if (order == 4 && starting_order_ != 4)
59 gauss_quad_.set_order(order);
60 gauss_quad_.compute_points_weights(
tri);
61 vals = eval(gauss_quad_.points());
68 "IterativeGaussTriangleQuadrature::compute_points_weights(): divide by zero.");
70 if (
equal || converged)
72 base::points_ = gauss_quad_.points();
73 base::weights_ = gauss_quad_.weights();
74 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(const Triangle< dim > &tri, 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.