17 double Zeff, en, alpha, eps_target;
18 double kappa2, alpha2, c, c2, lambda, sigma, Ren;
20 std::array<double, Nx> bx;
21 std::array<double, Nx> ax;
26 double in_eps_target = 1.0e-14,
double m = 1.0)
31 eps_target(in_eps_target),
32 kappa2(
double(kappa * kappa)),
33 alpha2(alpha * alpha),
36 lambda(std::sqrt(-en * (2.0 + en * alpha2 / m))),
37 sigma((m + en * alpha2) * (Zeff / lambda)),
61 std::pair<double, double>
fg(
double r)
const {
68 const double A_large = std::sqrt(1.0 + 0.5 * en * alpha2 / m_mass);
69 const double A_small = std::sqrt(-0.5 * en / m_mass) * alpha;
71 const double rfac = 2.0 * std::pow(r, sigma) * std::exp(-lambda * r);
76 for (std::size_t k = 0; k < Nx; k++) {
81 std::max(std::abs(ax[k] / fs), std::abs(bx[k] / gs)) / rk;
82 if (eps < eps_target) {
87 return {rfac * (A_large * fs + A_small * gs),
88 rfac * (A_large * gs - A_small * fs)};
93 std::array<double, Nx> make_bx()
const {
95 std::array<double, Nx> tbx;
96 const auto Zalpha2 = Zeff * Zeff * alpha2;
97 tbx[0] = (kappa + (Zeff / lambda)) * (0.5 * alpha);
98 for (std::size_t i = 1; i < Nx; i++) {
99 tbx[i] = (kappa2 - qip::pow<2>((
double(i) - sigma)) - Zalpha2) *
100 tbx[i - 1] / (
double(2 * i) * lambda);
105 std::array<double, Nx> make_ax()
const {
108 std::array<double, Nx> tax;
109 const auto RenAlpha2 = 1.0 + en * alpha2;
110 for (std::size_t i = 0; i < Nx; i++) {
112 (kappa + (double(i + 1) - sigma) * RenAlpha2 - Zeff * lambda * alpha2) *
113 (bx[i] *
c) / (
double(i + 1) * lambda);