3#include "IO/FRW_fileReadWrite.hpp"
4#include "IO/InputBlock.hpp"
5#include "Maths/Interpolator.hpp"
6#include "Physics/PhysConst_constants.hpp"
7#include "qip/Vector.hpp"
22 double u, h, l, m, wk;
34 std::vector<double> m_x;
38 Xl(std::vector<double> x);
40 double operator()(
int l)
const;
45 double m_Z, m_rN, m_rcut;
50 std::vector<double> mVu{};
51 std::vector<double> mVh{};
52 std::vector<double> mVl{};
53 std::vector<double> mHm{};
54 std::vector<double> mVwk{};
64 RadPot(
const std::vector<double> &r,
double Z,
double rN = 0.0,
65 double rcut = 0.0, Scale f = {1.0, 1.0, 1.0, 1.0, 0.0}, Xl xl = {},
66 bool tprint =
true,
bool do_readwrite =
true,
67 const std::string &label =
"");
69 bool read_write(
const std::vector<double> &r, IO::FRW::RoW rw,
70 const std::string &label_x =
"");
72 void form_potentials(
const std::vector<double> &r);
75 std::vector<double>
Vel(
int l = 0)
const;
77 std::vector<double>
Hmag(
int)
const;
79 std::vector<double>
Vu(
int l = 0)
const;
81 std::vector<double>
Vl(
int l = 0)
const;
83 std::vector<double>
Vh(
int l = 0)
const;
85 template <
typename Func>
86 std::vector<double> fill(Func f,
const std::vector<double> &r);
88 template <
typename Func>
89 std::vector<double> fill(Func f,
const std::vector<double> &r,
95template <
typename Func>
96std::vector<double> RadPot::fill(Func f,
const std::vector<double> &r) {
97 std::vector<double> v;
100 const auto rcut = m_rcut == 0.0 ? r.back() : m_rcut;
103 const auto icut = std::size_t(std::distance(
105 std::find_if(begin(r), end(r), [rcut](
auto ri) {
return ri > rcut; })));
107#pragma omp parallel for
108 for (
auto i = 0ul; i < icut; ++i) {
110 v[i] = -
f(m_Z, r[i], m_rN);
116template <
typename Func>
117std::vector<double> RadPot::fill(Func f,
const std::vector<double> &r,
118 std::size_t stride) {
120 const auto rcut = m_rcut == 0.0 ? r.back() : m_rcut;
124 std::size_t(std::distance(
126 std::find_if(begin(r), end(r), [rcut](
auto ri) {
return ri > rcut; }))) /
129 std::vector<double> tv, tr;
133#pragma omp parallel for
134 for (
auto i = 0ul; i < icut; ++i) {
136 tv[i] = -
f(m_Z, r[i * stride], m_rN);
137 tr[i] = r[i * stride];
144RadPot
ConstructRadPot(
const std::vector<double> &r,
double Z_eff,
double rN_au,
146 bool do_readwrite =
true,
const std::string &label =
"");
Constructs and stores the Flambaum-Ginges QED Radiative Potential.
Definition RadPot.hpp:16
std::vector< double > Vel(int l=0) const
Returns entire electric part of potential.
Definition RadPot.cpp:155
RadPot()
Empty constructor.
Definition RadPot.cpp:26
std::vector< double > Vl(int l=0) const
Low-frequency electric self-energy potential.
Definition RadPot.cpp:176
std::vector< double > Vu(int l=0) const
Uehling potential.
Definition RadPot.cpp:170
std::vector< double > Vh(int l=0) const
High-frequency electric self-energy potential.
Definition RadPot.cpp:183
std::vector< double > Hmag(int) const
Returns H_mag (magnetic self-energy form vactor)
Definition RadPot.cpp:164
Scale factors for Uehling, high, low, magnetic, Wickman-Kroll.
Definition RadPot.hpp:21
double f(RaB r, PrincipalQN n, DiracQN k, Zeff z, AlphaFS a)
Upper radial component.
Definition DiracHydrogen.cpp:71
std::vector< double > interpolate(const std::vector< double > &x_in, const std::vector< double > &y_in, const std::vector< double > &x_out, Method method=Method::cspline)
Performs interpolation using GSL (GNU Scientific Library)
Definition Interpolator.hpp:162
Radiative QED corrections (Flambaum-Ginges Radiative Potenti)
Definition RadPot.cpp:11
RadPot ConstructRadPot(const std::vector< double > &r, double Z_eff, double rN_au, const IO::InputBlock &input, bool print, bool do_readwrite, const std::string &label)
Function constructs a Radiative potential with given input parameters; rN_au is nuclear radius (not r...
Definition RadPot.cpp:191
Extra fitting for s,p,d etc. states.
Definition RadPot.hpp:31