Skip to content
Snippets Groups Projects

Optimize integrands in form factor quadrature

Merged Wuttke, Joachim requested to merge hemi into main
1 file
+ 5
10
Compare changes
  • Side-by-side
  • Inline
@@ -39,25 +39,20 @@ TruncatedSpheroid::TruncatedSpheroid(double radius, double height, double height
complex_t TruncatedSpheroid::formfactor_at_bottom(C3 q) const
{
ASSERT(m_validated);
double H = m_height;
double R = m_radius;
double fp = m_fp;
const double H = m_height;
const double R = m_radius;
const double fp = m_fp;
if (std::abs(q.mag()) <= std::numeric_limits<double>::epsilon())
return M_PI / 3. / fp * (H * H * (3. * R - H / fp) - m_dh * m_dh * (3. * R - m_dh / fp));
complex_t z_part = exp_I(q.z() * (H - fp * R));
return M_TWOPI * z_part
return M_TWOPI * exp_I(q.z() * (H - fp * R))
* ComplexIntegrator().integrate(
[=](double Z) {
double R = m_radius;
double fp = m_fp;
double Rz = std::sqrt(R * R - Z * Z / (fp * fp));
complex_t qrRz = std::sqrt(q.x() * q.x() + q.y() * q.y()) * Rz;
complex_t J1_qrRz_div_qrRz = Math::Bessel::J1c(qrRz);
return Rz * Rz * J1_qrRz_div_qrRz * exp_I(q.z() * Z);
return Rz * Rz * Math::Bessel::J1c(qrRz) * exp_I(q.z() * Z);
},
fp * R - H, fp * R - m_dh);
}
Loading