High-precision calculations for one- and two-valence atomic systems
DiracODE::AsymptoticSpinor< T, Nx >

ok

template<typename T = double, std::size_t Nx = 15>
class DiracODE::AsymptoticSpinor< T, Nx >

Performs asymptotic expansion for f and g at large r, up to order Nx in (1/r).

Templated on energy type T: T=double for bound states, or T=std::complex<double> for Green's function solutions at complex energy. The expansion coefficients, lambda, and sigma extend analytically; the principal branch of sqrt gives Re(lambda)>0, i.e. the decaying solution.

The branch may instead be chosen explicitly via with_lambda (e.g. lambda = i p for the oscillating en > 0 tail, see AsymptoticSpinorContinuum). Everything else (sigma, the small-component amplitude, and the 1/r coefficients) is derived from lambda.

#include <AsymptoticSpinor.hpp>

Public Member Functions

 AsymptoticSpinor (int in_kappa, double in_Zeff, T in_en, double in_alpha=PhysConst::alpha, double in_eps_target=1.0e-14, double m=1.0)
 
std::pair< T, T > fg (double r) const
 Returns {f(r), g(r)} via asymptotic expansion at large r.
 

Static Public Member Functions

static AsymptoticSpinor with_lambda (int in_kappa, double in_Zeff, T in_en, T in_lambda, double in_alpha=PhysConst::alpha, double in_eps_target=1.0e-14, double m=1.0)
 Constructs with an explicitly chosen lambda (exponent in exp(-lambda r)), i.e. with a chosen branch of sqrt(-en(2m + en alpha^2)).
 

Member Function Documentation

◆ with_lambda()

template<typename T = double, std::size_t Nx = 15>
static AsymptoticSpinor DiracODE::AsymptoticSpinor< T, Nx >::with_lambda ( int  in_kappa,
double  in_Zeff,
T  in_en,
T  in_lambda,
double  in_alpha = PhysConst::alpha,
double  in_eps_target = 1.0e-14,
double  m = 1.0 
)
inlinestatic

Constructs with an explicitly chosen lambda (exponent in exp(-lambda r)), i.e. with a chosen branch of sqrt(-en(2m + en alpha^2)).

in_lambda must satisfy lambda^2 = -en(2m + en alpha^2); only its sign is free. Used for the en > 0 tail, where lambda = +/- i p and the principal branch is ambiguous (it sits on the branch cut).

◆ fg()

template<typename T = double, std::size_t Nx = 15>
std::pair< T, T > DiracODE::AsymptoticSpinor< T, Nx >::fg ( double  r) const
inline

Returns {f(r), g(r)} via asymptotic expansion at large r.

Large-r expansion of upper/lower radial components of the Dirac solution, see Johnson (2007), Eqs. (2.170) – (2.171).

f(r) = r^s exp(-yr) * { A(1 + O(1/r) + ...) + B(O(1/r) + ...)},

g(r) = r^s exp(-yr) * { -B(1 + O(1/r) + ...) + A(O(1/r) + ...)},

where s~1, y~1, A~1, B<<1.

The 1/r expansion inside the braces is truncated at order Nx. The series is terminated early if the relative change drops below eps_target (typically around order ~5).


The documentation for this class was generated from the following file: