18T JL(
const int L,
const T x) {
21 if (std::abs(x) < (T)1.0e-8) {
29 if (std::fabs(x) < 0.1) {
31 return 1.0 - 0.166666667 * (x * x) + 0.00833333333 * qip::pow<4>(x);
33 return 0.333333333 * x - 0.0333333333 * (x * x * x) +
34 0.00119047619 * qip::pow<5>(x);
36 return 0.0666666667 * (x * x) - 0.00476190476 * qip::pow<4>(x) +
37 0.000132275132 * qip::pow<6>(x);
39 return 0.00952380952 * (x * x * x) - 0.000529100529 * qip::pow<5>(x) +
40 0.000012025012 * qip::pow<7>(x);
42 return 0.00105820106 * qip::pow<4>(x) - 0.0000481000481 * qip::pow<6>(x) +
43 9.25000925e-7 * qip::pow<8>(x);
48 return std::sin(x) / x;
50 return std::sin(x) / (x * x) - std::cos(x) / x;
52 return (3.0 / (x * x) - 1.0) * std::sin(x) / x -
53 3.0 * std::cos(x) / (x * x);
55 return (15.0 / (x * x * x) - 6.0 / x) * std::sin(x) / x -
56 (15.0 / (x * x) - 1.0) * std::cos(x) / x;
58 return 5.0 * (-21.0 + 2.0 * x * x) * std::cos(x) / qip::pow<4>(x) +
59 (105.0 - 45.0 * x * x + qip::pow<4>(x)) * std::sin(x) /
63 return (T)gsl_sf_bessel_jl(L, (
double)x);
68T exactGSL_JL(
int L, T x) {
69 return (T)gsl_sf_bessel_jl(L, (
double)x);
76 std::vector<T> Jl_vec;
77 Jl_vec.reserve(xvec.size());
78 for (
const auto &x : xvec) {
79 Jl_vec.push_back(exactGSL_JL(l, x));
85std::vector<T> fillBesselVec_kr(
const int l,
const double k,
86 const std::vector<T> &rvec) {
87 std::vector<T> Jl_vec;
88 Jl_vec.reserve(rvec.size());
89 for (
const auto &r : rvec) {
90 Jl_vec.push_back(exactGSL_JL(l, k * r));
std::vector< T > fillBesselVec(const int l, const std::vector< T > &xvec)
Creates a vector of Jl(r) for given r.
Definition SphericalBessel.hpp:75