27 return r * exp(-q * r / 8.0);
32 return r / (1.0 + (q * r) * (q * r));
65 const auto integrand = [&](
double u) ->
complex_t {
66 return sin(u) *
exp_I(az * std::cos(u)) * (ay == 0. ? u : sin(ay * u) / ay);
69 return factor * integral *
exp_I(az) * (
height / 2);
83 const double a_scale = std::abs(a);
84 const double w_scale = std::abs(qyW2);
86 if (w_scale < 1.e-5) {
95 const complex_t gamma_p = (a + qyW2) * 0.5;
96 const complex_t gamma_m = (a - qyW2) * 0.5;
99 result =
mul_I(
exp_I(-qyd) * result / (qyW2 * 2.));
101 return factor * result;
complex_t mul_I(complex_t z)
Returns product I*z, where I is the imaginary unit.
std::complex< double > complex_t
complex_t exp_I(complex_t z)
Returns exp(I*z), where I is the imaginary unit.
Defines classes RealIntegrator, ComplexIntegrator.
Defines M_PI and some more mathematical constants.
Defines namespace MathFunctions.
Declares computations in namespace ripples.
To integrate a complex function of a real variable.
complex_t integrate(const std::function< complex_t(double)> &f, double lmin, double lmax)
double sinc(double x)
sinc function:
complex_t profile_yz_cosine(complex_t qy, complex_t qz, double width, double height)
Complex form factor of triangular ripple.
complex_t profile_yz_bar(complex_t qy, complex_t qz, double width, double height)
Complex form factor of rectangular ripple (bar).
complex_t factor_x_box(complex_t q, double l)
complex_t factor_x_Lorentz(complex_t q, double l)
complex_t profile_yz_triangular(complex_t qy, complex_t qz, double width, double height, double asymmetry)
Complex form factor of triangular ripple.
complex_t factor_x_Gauss(complex_t q, double l)