ampsci
High-precision calculations for one- and two-valence atomic systems
DiracODE::Internal::DiracDerivative

ok

Derivative matrix for the radial Dirac equation, dF/du = D(u)*F(u) + S(u).

Implements AdamsMoulton::DerivativeMatrix<std::size_t, double>, using the grid index i as the argument type (T = std::size_t). The ODE is solved in terms of the grid parameter u (where r = r(u)), so all matrix elements include a dr/du Jacobian factor.

The radial Dirac equation for a central potential v(r) is:

\[ \frac{d}{du}\begin{pmatrix}f\\g\end{pmatrix} = \frac{dr}{du} \begin{pmatrix} -\kappa/r + \alpha H_\text{mag} & \alpha(\varepsilon - v) + 2mc \\ \alpha(v - \varepsilon) & \kappa/r - \alpha H_\text{mag} \end{pmatrix} \begin{pmatrix}f\\g\end{pmatrix} + S \]

where \( c = 1/\alpha \) is the speed of light in atomic units. The optional inhomogeneous source S encodes the exchange interaction:

\[ S_f = -\alpha \, [V_x F_a]_g \, \frac{dr}{du}, \quad S_g = +\alpha \, [V_x F_a]_f \, \frac{dr}{du}. \]

Note
Non-copyable; the constructor stores raw pointers to the grid and potential arrays, which must outlive this object.

#include <BoundState.hpp>

+ Inheritance diagram for DiracODE::Internal::DiracDerivative:

Public Member Functions

 DiracDerivative (const Grid &in_grid, const std::vector< double > &in_v, const int in_k, const double in_en, const double in_alpha, const std::vector< double > &V_off_diag={}, const DiracSpinor *const VxFa=nullptr, const DiracSpinor *const iFa0=nullptr, double zion=1, double in_mass=1.0)
 Constructs the Dirac derivative matrix for a given orbital and potential.
 
double a (std::size_t i) const final
 D matrix elements (see DiracDerivative for definitions); index i is grid point.
 
double b (std::size_t i) const final
 
double c (std::size_t i) const final
 
double d (std::size_t i) const final
 
double Sf (std::size_t i) const final
 Inhomogeneous source terms from exchange potential VxFa.
 
double Sg (std::size_t i) const final
 
 DiracDerivative (const DiracDerivative &)=delete
 
void operator= (const DiracDerivative &)=delete
 

Public Attributes

const Grid *const pgr
 
const std::vector< double > *const v
 
const std::vector< double > *const Hmag
 
const DiracSpinor *const VxFa
 
const DiracSpinor *const Fa0
 
const double zion = 1.0
 
const int k
 
const double en
 
const double alpha
 
const double cc
 
double mass
 

Constructor & Destructor Documentation

◆ DiracDerivative()

DiracODE::Internal::DiracDerivative::DiracDerivative ( const Grid in_grid,
const std::vector< double > &  in_v,
const int  in_k,
const double  in_en,
const double  in_alpha,
const std::vector< double > &  V_off_diag = {},
const DiracSpinor *const  VxFa = nullptr,
const DiracSpinor *const  iFa0 = nullptr,
double  zion = 1,
double  in_mass = 1.0 
)

Constructs the Dirac derivative matrix for a given orbital and potential.

Parameters
in_gridRadial grid.
in_vLocal potential v(r).
in_kOrbital kappa quantum number.
in_enOrbital energy.
in_alphaFine-structure constant (alpha).
V_off_diagOptional off-diagonal (magnetic) potential H_mag(r). If empty, treated as zero.
VxFaOptional exchange potential VxFa. If nullptr, ignored.
iFa0Optional inhomogeneous source spinor. If nullptr, ignored.
zionEffective ionic charge (used for boundary conditions).
in_massEffective particle mass in atomic units (default 1).

Member Function Documentation

◆ a()

double DiracODE::Internal::DiracDerivative::a ( std::size_t  i) const
finalvirtual

D matrix elements (see DiracDerivative for definitions); index i is grid point.

Implements AdamsMoulton::DerivativeMatrix< std::size_t, double >.

◆ b()

double DiracODE::Internal::DiracDerivative::b ( std::size_t  i) const
finalvirtual

◆ c()

double DiracODE::Internal::DiracDerivative::c ( std::size_t  i) const
finalvirtual

◆ d()

double DiracODE::Internal::DiracDerivative::d ( std::size_t  i) const
finalvirtual

◆ Sf()

double DiracODE::Internal::DiracDerivative::Sf ( std::size_t  i) const
finalvirtual

Inhomogeneous source terms from exchange potential VxFa.

Reimplemented from AdamsMoulton::DerivativeMatrix< std::size_t, double >.

◆ Sg()

double DiracODE::Internal::DiracDerivative::Sg ( std::size_t  i) const
finalvirtual

The documentation for this struct was generated from the following files: