17 double Zeff, en, alpha, m_mass, eps_target;
18 double kappa2, alpha2, c, lambda, sigma;
19 std::array<double, Nx> bx;
20 std::array<double, Nx> ax;
25 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),
35 lambda(std::sqrt(-en * (2.0 * m_mass + en * alpha2))),
36 sigma((m + en * alpha2) * (Zeff / lambda)),
59 std::pair<double, double>
fg(
double r)
const {
66 const double A_large = std::sqrt(1.0 + 0.5 * en * alpha2 / m_mass);
67 const double A_small = std::sqrt(-0.5 * en / m_mass) * alpha;
69 const double rfac = std::pow(r, sigma) * std::exp(-lambda * r);
73 for (std::size_t k = 0; k < Nx; k++) {
74 const auto rkp1 =
qip::pow(r,
int(k) + 1);
75 const auto df = ax[k] / rkp1;
76 const auto dg = bx[k] / rkp1;
79 const auto eps = std::max(std::abs(df / fs), std::abs(dg / gs));
80 if (eps < eps_target) {
85 return {rfac * (A_large * fs + A_small * gs),
86 rfac * (A_large * gs - A_small * fs)};
91 std::array<double, Nx> make_bx()
const {
93 std::array<double, Nx> tbx;
94 const auto Zalpha2 = Zeff * Zeff * alpha2;
95 tbx[0] = (kappa / m_mass + (Zeff / lambda)) * (0.5 * alpha);
96 for (std::size_t i = 1; i < Nx; i++) {
97 tbx[i] = (kappa2 - qip::pow<2>((
double(i) - sigma)) - Zalpha2) *
98 tbx[i - 1] / (
double(2 * i) * lambda);
103 std::array<double, Nx> make_ax()
const {
106 std::array<double, Nx> tax;
107 const auto RenAlpha2 = m_mass + en * alpha2;
108 for (std::size_t i = 0; i < Nx; i++) {
109 tax[i] = (kappa * m_mass + (double(i + 1) - sigma) * RenAlpha2 -
110 Zeff * lambda * alpha2) *
111 (bx[i] *
c) / (
double(i + 1) * lambda);