![]() |
|
High-precision calculations for one- and two-valence atomic systems
|
Constructs spinor/orbital basis using B-splines.
Uses Bsplines to form a set of B-spline orbitals (using method from [1] "Derevianko", [2] "Johnson", or [3] "Fischer"). Diagonalises B-splines over Hamiltonian to produce a set of basis orbitals.
[1] K. Beloy, A. Derevianko, Comput. Phys. Commun. 179, 310 (2008). [2] W. Johnson, S. Blundell, J. Sapirstein, Phys. Rev. A 37, 307 (1988). [3] C. F. Fischer and F. A. Parpia, Phys. Lett. A 179, 198 (1993). See also: Bachau et al., Reports Prog. Phys. 64, 1815 (2001). V. M. Shabaev, I. I. Tupitsyn, V. A. Yerokhin, G. Plunien, and G. Soff, Phys. Rev. Lett. 93, 130405 (2004).
By default, uses the Derevianko Dual Kintetic Balance (DKB) basis.
If \(\{|i\rangle\}\) are the set of \(2N\) DKB spline orbitals (of a given angular symmetry), and
\[ H_{ij} = \langle{S_i}|\hat H_{\rm HF}|{S_j}\rangle \, , \qquad S_{ij} = \langle{S_i|S_j}\rangle. \]
The eigenvalue problem:
\[ H_{ij}p_i = \epsilon S_{ij}p_i, \]
is solved, yielding \(2N\) eigenvalues \(\epsilon\) with corresponding eigenvectors \(p\) (half of these are positive energy solutions, half are negative energy solutions).
Note: form_basis() does not store the eigenvectors, instead, it expands the basis orbitals and stores them on the regular grid (coordinate space). i.e., for each eigenvalue, n, the corresponding basis orbital is:
\[ |{n}\rangle = \sum_i^{2N} p_i |i\rangle\, \]
Classes | |
| struct | Parameters |
| Input parameters for B-spline basis construction. More... | |
| struct | SplineParams |
| Type-dependent spline grid parameters for a given kappa. More... | |
Enumerations | |
| enum class | SplineType { Derevianko , Johnson , Fischer } |
| B-spline construction method: Derevianko/Reno (DKB), Johnson/NotreDame, or Fischer. More... | |
Functions | |
| std::vector< DiracSpinor > | form_basis (const Parameters ¶ms, const Wavefunction &wf, const bool correlationsQ=false) |
| Forms and returns the basis orbitals (expanded in terms of splines). | |
| double | check (const std::vector< DiracSpinor > &basis, const std::vector< DiracSpinor > &orbs, bool print_warning=true) |
| Compares basis to reference orbitals; checks normality, orthogonality, and energies. | |
| SplineParams | spline_params (SplineType type, int kappa, std::size_t n_states) |
| Returns SplineParams for the given type, kappa, and number of states. | |
| std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > | form_spline_basis (const int kappa, const std::size_t n_states, const std::size_t k_spl, const double r0_spl, const double rmax_spl, std::shared_ptr< const Grid > rgrid, const double alpha, SplineType itype=SplineType::Derevianko) |
| Forms the underlying spline basis (which is not kept) | |
| std::pair< LinAlg::Matrix< double >, LinAlg::Matrix< double > > | fill_Hamiltonian_matrix (const std::vector< DiracSpinor > &spl_basis, const std::vector< DiracSpinor > &d_basis, const Wavefunction &wf, const bool correlationsQ=false, SplineType itype=SplineType::Derevianko) |
| Calculates and returns the Hamiltonian matrix H_ij and overlap matrix S_ij. | |
| void | add_JohnsonBoundary (LinAlg::Matrix< double > *Aij, const int kappa, const double alpha) |
| Applies Johnson/Notre-Dame boundary conditions to the Hamiltonian matrix. | |
| void | add_FischerBoundary (LinAlg::Matrix< double > *Aij, const double alpha) |
| Applies Fischer/Vanderbilt rmax boundary: forces f(rmax)=g(rmax). | |
| void | expand_basis_orbitals (std::vector< DiracSpinor > *basis, std::vector< DiracSpinor > *basis_positron, const std::vector< DiracSpinor > &spl_basis, const int kappa, const int max_n, int max_n_positron, const LinAlg::Vector< double > &e_values, const LinAlg::Matrix< double > &e_vectors, const Wavefunction &wf) |
| Expands basis orbitals in terms of spline orbitals by diagonalising Hamiltonian. | |
| std::vector< double > | sumrule_TKR (const std::vector< DiracSpinor > &basis, const std::vector< double > &r, bool print=false) |
| TKR sum rule (basis test); should =0 (must include -ve energy states) | |
| std::vector< double > | sumrule_DG (int nDG, const std::vector< DiracSpinor > &basis, const Grid &gr, double alpha, bool print) |
| Drake-Gordon sum rule (basis test); should =0 (must incl -ve energy states) | |
| std::pair< double, double > | r_completeness (const DiracSpinor &Fv, const std::vector< DiracSpinor > &basis, const Grid &gr, bool print=false) |
| Measures radial completeness of the basis for orbital Fv. | |
| std::string_view | parseSplineType (SplineType type) |
| Returns the canonical name string for a SplineType. | |
| auto | parseSplineType (std::string_view type) |
| Parses a string to SplineType (case-insensitive). | |
| void | r_completeness_header () |
| Prints the title and column headers for r_completeness output. | |
| struct SplineBasis::SplineParams |
|
strong |
B-spline construction method: Derevianko/Reno (DKB), Johnson/NotreDame, or Fischer.
W. R. Johnson, S. A. Blundell, J. Sapirstein, Phys. Rev. A 37, 307 (1988).
| std::vector< DiracSpinor > SplineBasis::form_basis | ( | const Parameters & | params, |
| const Wavefunction & | wf, | ||
| const bool | correlationsQ = false |
||
| ) |
Forms and returns the basis orbitals (expanded in terms of splines).
Note: This function calls the below functions, they rarely need to be called explicitely, unless you are trying to do something different to usual.
| double SplineBasis::check | ( | const std::vector< DiracSpinor > & | basis, |
| const std::vector< DiracSpinor > & | orbs, | ||
| bool | print_warning | ||
| ) |
Compares basis to reference orbitals; checks normality, orthogonality, and energies.
| SplineParams SplineBasis::spline_params | ( | SplineType | type, |
| int | kappa, | ||
| std::size_t | N_states | ||
| ) |
Returns SplineParams for the given type, kappa, and number of states.
| std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > SplineBasis::form_spline_basis | ( | const int | kappa, |
| const std::size_t | N_states, | ||
| const std::size_t | k_spl, | ||
| const double | r0_spl, | ||
| const double | rmax_spl, | ||
| std::shared_ptr< const Grid > | rgrid, | ||
| const double | alpha, | ||
| SplineType | type | ||
| ) |
Forms the underlying spline basis (which is not kept)
| std::pair< LinAlg::Matrix< double >, LinAlg::Matrix< double > > SplineBasis::fill_Hamiltonian_matrix | ( | const std::vector< DiracSpinor > & | spl_basis, |
| const std::vector< DiracSpinor > & | d_basis, | ||
| const Wavefunction & | wf, | ||
| const bool | correlationsQ, | ||
| SplineType | type | ||
| ) |
Calculates and returns the Hamiltonian matrix H_ij and overlap matrix S_ij.
| void SplineBasis::add_JohnsonBoundary | ( | LinAlg::Matrix< double > * | Aij, |
| const int | kappa, | ||
| const double | alpha | ||
| ) |
Applies Johnson/Notre-Dame boundary conditions to the Hamiltonian matrix.
Adds r=0 and r=rmax boundary terms to enforce correct asymptotic behaviour. W. R. Johnson, S. A. Blundell, J. Sapirstein, Phys. Rev. A 37, 307 (1988).
| void SplineBasis::add_FischerBoundary | ( | LinAlg::Matrix< double > * | Aij, |
| const double | alpha | ||
| ) |
Applies Fischer/Vanderbilt rmax boundary: forces f(rmax)=g(rmax).
Subset of add_JohnsonBoundary (rmax terms only; no r=0 conditions).
| void SplineBasis::expand_basis_orbitals | ( | std::vector< DiracSpinor > * | basis, |
| std::vector< DiracSpinor > * | basis_positron, | ||
| const std::vector< DiracSpinor > & | spl_basis, | ||
| const int | kappa, | ||
| const int | max_n, | ||
| int | max_n_positron, | ||
| const LinAlg::Vector< double > & | e_values, | ||
| const LinAlg::Matrix< double > & | e_vectors, | ||
| const Wavefunction & | wf | ||
| ) |
Expands basis orbitals in terms of spline orbitals by diagonalising Hamiltonian.
| std::vector< double > SplineBasis::sumrule_TKR | ( | const std::vector< DiracSpinor > & | basis, |
| const std::vector< double > & | r, | ||
| bool | |||
| ) |
TKR sum rule (basis test); should =0 (must include -ve energy states)
| std::vector< double > SplineBasis::sumrule_DG | ( | int | nDG, |
| const std::vector< DiracSpinor > & | basis, | ||
| const Grid & | gr, | ||
| double | alpha, | ||
| bool | |||
| ) |
Drake-Gordon sum rule (basis test); should =0 (must incl -ve energy states)
| std::pair< double, double > SplineBasis::r_completeness | ( | const DiracSpinor & | Fa, |
| const std::vector< DiracSpinor > & | basis, | ||
| const Grid & | gr, | ||
| bool | |||
| ) |
Measures radial completeness of the basis for orbital Fv.
|
inline |
Returns the canonical name string for a SplineType.
|
inline |
Parses a string to SplineType (case-insensitive).
|
inline |
Prints the title and column headers for r_completeness output.