99 for (std::size_t
ii = 0;
ii <
t0.size(); ++
ii)
131 "SrcSingularity::compute_integral_terms(): atan_plus has nan or inf.");
133 "SrcSingularity::compute_integral_terms(): atan_minus has nan or inf.");
134 assert(
f2.array().isFinite().all() &&
135 "SrcSingularity::compute_integral_terms(): f2 has nan or inf.");
136 assert(
f3.array().isFinite().all() &&
137 "SrcSingularity::compute_integral_terms(): f3 has nan or inf.");
157template <
typename TriangleQuadratureType,
typename ScalarKernelType>
158SrcResult SrcSingularity<TriangleQuadratureType, ScalarKernelType>::assemble_integrals(
165 const Float four_pi = 4.0 * pi;
169 if (base::compute_g_terms_)
171 result.g = (t0_f2_ - z_abs_.cwiseProduct(beta_)) / four_pi;
173 result.rs_g = 0.5 * u_f3_ / four_pi;
177 if (base::compute_grad_g_terms_)
181 z_abs_.array() < TRIANGLE_DEFAULT_TOL *
src_tri.shortest_edge_length()
184 result.grad_g = EigMatNX<Complex, 3>::Zero(3,
r_obs.cols());
185 result.grad_g.topRows(2) = -u_f2_;
186 result.grad_g.row(2) = -
sign.array() * beta_.array();
189 grad_r.topRows(2) = 0.5 * u_f3_;
190 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.