96 for (std::size_t
ii = 0;
ii <
t0.size(); ++
ii)
128 "SrcSingularity::compute_integral_terms(): atan_plus has nan or inf.");
130 "SrcSingularity::compute_integral_terms(): atan_minus has nan or inf.");
131 assert(
f2.array().isFinite().all() &&
132 "SrcSingularity::compute_integral_terms(): f2 has nan or inf.");
133 assert(
f3.array().isFinite().all() &&
134 "SrcSingularity::compute_integral_terms(): f3 has nan or inf.");
154template <
typename TriangleQuadratureType,
typename ScalarKernelType>
155SrcResult SrcSingularity<TriangleQuadratureType, ScalarKernelType>::assemble_integrals(
162 const Float four_pi = 4.0 * pi;
166 if (base::compute_g_terms_)
168 result.g = (t0_f2_ - z_abs_.cwiseProduct(beta_)) / four_pi;
170 result.rs_g = 0.5 * u_f3_ / four_pi;
174 if (base::compute_grad_g_terms_)
178 z_abs_.array() < TRIANGLE_DEFAULT_TOL *
src_tri.shortest_edge_length()
181 result.grad_g = EigMatNX<Complex, 3>::Zero(3,
r_obs.cols());
182 result.grad_g.topRows(2) = -u_f2_;
183 result.grad_g.row(2) = -
sign.array() * beta_.array();
186 grad_r.topRows(2) = 0.5 * u_f3_;
187 grad_r.row(2) = z_.array() * z_abs_.array() * beta_.array() - z_.array() * t0_f2_.array();
SrcResult integrate(const Complex k, const Triangle< 2 > &src_tri, ConstEigRef< EigMatNX< Float, 3 > > r_obs) override
Computes the integral over the source triangle.