High-precision calculations for one- and two-valence atomic systems
DiracContinuum Namespace Reference

Detailed Description

Exact relativistic continuum (en > 0) hydrogen-like (Coulomb) wavefunctions.

In the form

\[ \psi_{\en\kappa m}(\vb{r}) = \frac{1}{r} \begin{pmatrix} f_{\en\kappa}(r)\,\Omega_{\kappa m}(\hat n) \\ i\,g_{\en\kappa}(r)\,\Omega_{-\kappa,m}(\hat n) \end{pmatrix}, \]

normalised on the energy scale,

\[ \int_0^\infty (f_\en f_{\en'} + g_\en g_{\en'})\,dr = \delta(\en - \en'). \]

See Methods for full definitions.

Non-relativistic limit
Passing \( \alpha \le 0 \) selects the non-relativistic limit directly: the large component reduces to the energy-normalised Coulomb function (f = P_el, see P_el), the small component vanishes (g = 0). This path does not require FLINT.
Note
Requires the FLINT library (for confluent hypergeometric functions of complex argument); available at compile time via the constexpr flag DiracContinuum::available. (Not required for the non-relativistic limit.)
Warning
Without FLINT, calling f and g may abort, or return NaN. Use DiracContinuum::available to check if available.

The optional electron mass parameter m defaults to 1 (atomic units). The full relativistic energy is E = m*c^2 + en = m/alpha^2 + en, with en > 0 for continuum states.

Functions

double gamma (int kappa, double zeff, double alpha)
 Relativistic factor gamma = Sqrt[kappa^2 - (aZ)^2].
 
double pe (double en, double alpha, double m=1.0)
 Equivalent momentum: pe = Sqrt[en*(2m + en*alpha^2)].
 
std::pair< double, double > fg (double r, double en, int kappa, double zeff, double alpha, double m=1.0)
 Both radial components {f, g} at radius r.
 
double f (double r, double en, int kappa, double zeff, double alpha, double m=1.0)
 Upper (large) radial component.
 
double g (double r, double en, int kappa, double zeff, double alpha, double m=1.0)
 Lower (small) radial component.
 
double f_asymptotic (double r, double en, int kappa, double zeff, double alpha, double m=1.0)
 Large-r asymptotic form of f.
 
double g_asymptotic (double r, double en, int kappa, double zeff, double alpha, double m=1.0)
 Large-r asymptotic form of g.
 
double P_el (double r, double en, int l, double zeff, double m=1.0)
 Nonrelativistic continuum radial function, energy normalised.
 

Variables

constexpr bool available = Hypergeometric::has_flint
 True if compiled with FLINT support; f, g, and fg return NaN otherwise.
 

Function Documentation

◆ gamma()

double DiracContinuum::gamma ( int  kappa,
double  zeff,
double  alpha 
)

Relativistic factor gamma = Sqrt[kappa^2 - (aZ)^2].

◆ pe()

double DiracContinuum::pe ( double  en,
double  alpha,
double  m = 1.0 
)

Equivalent momentum: pe = Sqrt[en*(2m + en*alpha^2)].

en is the energy without rest mass (en > 0); m is the electron mass (default 1 a.u.).

◆ fg()

std::pair< double, double > DiracContinuum::fg ( double  r,
double  en,
int  kappa,
double  zeff,
double  alpha,
double  m = 1.0 
)

Both radial components {f, g} at radius r.

More efficient than separate calls to f() and g(), since the (expensive) hypergeometric factors are shared. For \( \alpha \le 0 \) returns the non-relativistic limit {P_el, 0} (see P_el), which does not require FLINT.

Returns
std::pair {f, g}
Note
alpha <= 0 selects the non-relativistic limit: f = P_el, g = 0
Warning
For alpha > 0: prints a warning and returns {NaN, NaN} if compiled without FLINT (see DiracContinuum::available)

◆ f()

double DiracContinuum::f ( double  r,
double  en,
int  kappa,
double  zeff,
double  alpha,
double  m = 1.0 
)

Upper (large) radial component.

m is the electron mass (default 1 a.u.).

Note
alpha <= 0 selects the non-relativistic limit: f = P_el

◆ g()

double DiracContinuum::g ( double  r,
double  en,
int  kappa,
double  zeff,
double  alpha,
double  m = 1.0 
)

Lower (small) radial component.

m is the electron mass (default 1 a.u.).

Note
alpha <= 0 selects the non-relativistic limit: g = 0

◆ f_asymptotic()

double DiracContinuum::f_asymptotic ( double  r,
double  en,
int  kappa,
double  zeff,
double  alpha,
double  m = 1.0 
)

Large-r asymptotic form of f.

f ~ Sqrt[pe/(pi*en)] * cos(pe*r + nu*ln(2*pe*r) - Delta). Does not require FLINT.

◆ g_asymptotic()

double DiracContinuum::g_asymptotic ( double  r,
double  en,
int  kappa,
double  zeff,
double  alpha,
double  m = 1.0 
)

Large-r asymptotic form of g.

g ~ -alpha * Sqrt[en/(pi*pe)] * sin(pe*r + nu*ln(2*pe*r) - Delta). Does not require FLINT.

◆ P_el()

double DiracContinuum::P_el ( double  r,
double  en,
int  l,
double  zeff,
double  m = 1.0 
)

Nonrelativistic continuum radial function, energy normalised.

P_el = Sqrt[2m/(pi*p)] * F_l(-Z*m/p, p*r), with p = Sqrt[2*m*en] and F_l the regular Coulomb function. Does not require FLINT.

Variable Documentation

◆ available

constexpr bool DiracContinuum::available = Hypergeometric::has_flint
constexpr

True if compiled with FLINT support; f, g, and fg return NaN otherwise.