#pragma once #include #include #include struct SIv2_API integrator { auto eval_surf_int_by(const integrand_handle_base& handle) const { double result{}; for (auto i = 0; i < integral_points.size(); ++i) { for (auto j = 0; j < integral_points[i].size(); ++j) { const auto& p = integral_points[i][j]; result += surface_integral_weights[i][j] * handle.f(p.x(), p.y(), p.z()); } } return result * handle.w_without_grad(); } auto eval_volu_int_by(const integrand_handle_base& handle) const { double result{}; for (auto i = 0; i < integral_points.size(); ++i) { for (auto j = 0; j < integral_points[i].size(); ++j) { const auto& p = integral_points[i][j]; result += volume_integral_weights[i][j] * handle.f(p.x(), p.y(), p.z()); } } return result * handle.w(); } stl_vector_mp> integral_points{}; stl_vector_mp> surface_integral_weights{}; stl_vector_mp> volume_integral_weights{}; };