28constexpr double alpha = 1.0 / 137.035999084;
30constexpr double lam_c =
alpha;
34double V_Uehling(
double Z,
double r,
double rN = 0.0);
37double H_Magnetic(
double Z,
double r,
double rN = 0.0);
40double V_SEh(
double Z,
double r,
double rN = 0.0);
43double V_SEl(
double Z,
double r,
double rN = 0.0);
46double V_WK(
double Z,
double r,
double);
52static const auto a01 = std::vector{1.071, 0.0, -1.976, -2.128, 0.169};
53static const auto b01 = std::vector{0.074, 0.35};
54static const auto b2 = std::vector{0.056, 0.050, 0.195};
57double A(
double Z,
int l = 0);
59double B(
double Z,
int l = 0);
65double t_integral(
double (*f)(
double,
void *), std::vector<double> params,
68enum class IntType { Linear, Log };
71template <IntType IT = IntType::Linear>
72double r_integral(std::function<
double(
double)> f,
double a,
double b,
73 long unsigned n_pts = 1000);
79double G_Ueh(
double xn,
double x);
81double J_Ueh_gsl(
double t,
void *p);
85double G_mag(
double xn,
double x);
87double J_mag_gsl(
double t,
void *p);
92double F_SEl(
double Z,
double r,
double rN);
93double I1(
double Z,
double t);
94double I2(
double Z,
double r,
double rn,
double t);
96double J_SE_gsl(
double t,
void *p);
102double r_integral(std::function<
double(
double)> f,
double a,
double b,
103 long unsigned n_pts) {
105 static constexpr std::array w{475.0 / 1440, 1902.0 / 1440, 1104.0 / 1440,
106 1586.0 / 1440, 1413.0 / 1440};
108 const auto dt = (IT == IntType::Linear) ? (b - a) / double(n_pts - 1) :
109 std::log(b / a) / double(n_pts - 1);
111 const auto x = [=](
auto i) {
112 if constexpr (IT == IntType::Linear) {
113 return a + double(i) * dt;
116 return a * std::exp(
double(i) * dt);
119 const auto dxdt = [=](
auto i) {
120 if constexpr (IT == IntType::Linear) {
129 for (
long unsigned i = 0; i < w.size(); i++) {
130 Rint += w[i] * (f(x(i)) + f(x(n_pts - 1 - i))) * dxdt(i);
133 for (
auto i = w.size(); i < n_pts - w.size(); i++) {
134 Rint += f(x(i)) * dxdt(i);
143double Q_MLVP(
double r,
double rN = 0.0);
146double Qt_MLVP(
double t,
void *p);
double B(double Z, int l=0)
Bl(Z) fitting function [PRA 93, 052509 (2016)].
Definition FGRadPot.cpp:132
double A(double Z, int l=0)
Al(Z) fitting function [PRA 93, 052509 (2016)].
Definition FGRadPot.cpp:121
Flambaum-Ginges Radiative potential.
Definition FGRadPot.cpp:10
double V_WK(double Z, double r, double)
Effective Wickman-Kroll; not including FNS corrections.
Definition FGRadPot.cpp:65
double V_Uehling(double Z, double r, double rN)
Uehling potential (r, rN in atomic units)
Definition FGRadPot.cpp:36
double r_integral(std::function< double(double)> f, double a, double b, long unsigned n_pts=1000)
Function that performs the r integral over [a,b] using mixed-quadrature.
Definition FGRadPot.hpp:102
double V_SEl(double Z, double r, double rN)
Low-freq electric SE (NOT including Bl) (r, rN in atomic units)
Definition FGRadPot.cpp:49
double V_SEh(double Z, double r, double rN)
High-freq electric SE (NOT including Al) (r, rN in atomic units)
Definition FGRadPot.cpp:57
double t_integral(double(*f)(double, void *), std::vector< double > params, double eps)
Function that performs the t integral over [1,infinity)
Definition FGRadPot.cpp:78
double H_Magnetic(double Z, double r, double rN)
Magnetic form-factor (r, rN in atomic units)
Definition FGRadPot.cpp:43
double Q_MLVP(double r, double rN)
Magnetic-loop vacuum polarisation, includes finite-nuclear size.
Definition FGRadPot.cpp:280
constexpr double alpha
Fine-structure constant: alpha = 1/137.035 999 177(21) [CODATA 2022].
Definition PhysConst_constants.hpp:24