|  | 
|  | DiracSpinor (int in_n, int in_kappa, std::shared_ptr< const Grid > in_rgrid) | 
|  | Constructor: Requires n (PQN), kappa (Dirac QN), and grid (shared pointer, as it's a shared resource) 
 | 
|  | 
| int | n () const | 
|  | Principal quantum number, n. 
 | 
|  | 
| int | kappa () const | 
|  | Dirac quantum number, kappa. 
 | 
|  | 
| int | l () const | 
|  | Orbital angular momentum Q number. 
 | 
|  | 
| double | jjp1 () const | 
|  | j(j+1) 
 | 
|  | 
| int | twoj () const | 
|  | 
| int | twojp1 () const | 
|  | 2j+1 
 | 
|  | 
| int | parity () const | 
|  | (-1)^l, returns +/- 1 
 | 
|  | 
| int | k_index () const | 
|  | kappa index (see AtomData) 
 | 
|  | 
| Index | nk_index () const | 
|  | (n,kappa) index (see AtomData) 
 | 
|  | 
| std::string | symbol (bool gnuplot=false) const | 
|  | Single-electron term symbol (e.g., 6s_1/2). Gnuplot=true => 6s_{1/2}. 
 | 
|  | 
| std::string | shortSymbol () const | 
|  | e.g., 6p_1/2 => 6p-, 6p_3/2 => 6p+ 
 | 
|  | 
| bool & | exotic () | 
|  | Checks if spinor is for "exotic" lepton, or regular electron. 
 | 
|  | 
| bool | exotic () const | 
|  | Checks if spinor is for "exotic" lepton, or regular electron. 
 | 
|  | 
| void | set_new_kappa (int new_kappa) | 
|  | Changes 'kappa' angular quantum number. Use with caution! 
 | 
|  | 
| const Grid & | grid () const | 
|  | Resturns a const reference to the radial grid. 
 | 
|  | 
| std::shared_ptr< const Grid > | grid_sptr () const | 
|  | Resturns copy of shared_ptr to grid [shared resource] - used when we want to construct a new DiracSpinor that shares this grid. 
 | 
|  | 
| double | en () const | 
|  | Single-particle energy, not including rest energy. 
 | 
|  | 
| double & | en () | 
|  | 
| const std::vector< double > & | f () const | 
|  | Upper (large) radial component function, f. 
 | 
|  | 
| std::vector< double > & | f () | 
|  | 
| double | f (std::size_t i) const | 
|  | Upper (large) radial component, f(r_i) 
 | 
|  | 
| double & | f (std::size_t i) | 
|  | 
| const std::vector< double > & | g () const | 
|  | Lower (small) radial component function, g. 
 | 
|  | 
| std::vector< double > & | g () | 
|  | 
| double | g (std::size_t i) const | 
|  | Lower (small) radial component, g(r_i) 
 | 
|  | 
| double & | g (std::size_t i) | 
|  | 
| auto | min_pt () const | 
|  | First non-zero point (index for f[i]) 
 | 
|  | 
| auto & | min_pt () | 
|  | 
| auto | max_pt () const | 
|  | Effective size(); index after last non-zero point (index for f[i]) 
 | 
|  | 
| auto & | max_pt () | 
|  | 
| double | r0 () const | 
|  | r0 = r[min_pt] (in atomic units) XXX Kill this? 
 | 
|  | 
| double | rinf () const | 
|  | rinf = r[max_pt] 
 | 
|  | 
| auto | its () const | 
|  | Number of iterations until energy convergence (for latest routine only) 
 | 
|  | 
| auto & | its () | 
|  | 
| auto | occ_frac () const | 
|  | Occupation fraction. =1 for closed shells. =1/(2j+1) for valence. 
 | 
|  | 
| auto & | occ_frac () | 
|  | 
| auto | eps () const | 
|  | Fractional energy convergence: eps = |(en'-en)/en|. 
 | 
|  | 
| auto & | eps () | 
|  | 
| const DiracSpinor & | scale (const double factor) | 
|  | Scales DiracSpinor (f and g) by constant. 
 | 
|  | 
| const DiracSpinor & | scale (const std::vector< double > &v) | 
|  | Scales DiracSpinor (f and g) by function of r. 
 | 
|  | 
| void | normalise (double norm_to=1.0) | 
|  | By default normalises to 1, but can normalise to other number. 
 | 
|  | 
| void | zero_boundaries () | 
|  | Forces f(r) and g(r) to be zero outside of [p0,pinf) 
 | 
|  | 
| double | norm () const | 
|  | Returns the norm, defined: Norm = Sqrt[<a|a>]. 
 | 
|  | 
| double | norm2 () const | 
|  | Returns the norm^2, defined: Norm2 = <a|a> 
 | 
|  | 
| std::pair< double, double > | r0pinfratio () const | 
|  | Returns [f[p0]/f_max , f[pinf]/f_max] - for tests. 
 | 
|  | 
| std::vector< double > | rho () const | 
|  | rho(r) = sum_m |Psi^2|(r) = (2j+1) * x_occ * |F^2|(r) 
 | 
|  | 
| int | num_electrons () const | 
|  | Number of occupied electrons: (2j+1)*occ_frac. 
 | 
|  | 
| DiracSpinor & | operator+= (const DiracSpinor &rhs) | 
|  | Addition of two DiracSpinors - must have same kappa. 
 | 
|  | 
| DiracSpinor & | operator-= (const DiracSpinor &rhs) | 
|  | 
| DiracSpinor & | operator*= (const double x) | 
|  | Scalar multiplication. 
 | 
|  | 
| DiracSpinor & | operator*= (const std::vector< double > &v) | 
|  | Multiplication by array (function) 
 | 
|  | 
| void | orthog (const DiracSpinor &rhs) | 
|  | A more correct way to force orthogonality than normal. 
 | 
|  | 
|  | 
| static bool | comp_l (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | Custom comparitors (for sorting): l, j, kappa_index, energy. 
 | 
|  | 
| static bool | comp_j (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| static bool | comp_ki (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| static bool | comp_n (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| static bool | comp_en (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| static std::pair< double, std::string > | check_ortho (const std::vector< DiracSpinor > &a, const std::vector< DiracSpinor > &b) | 
|  | Returns worst |<a|b>| (or |<a|b>-1| for a=b) {val, state_names}. 
 | 
|  | 
| static void | orthonormaliseOrbitals (std::vector< DiracSpinor > &orbs, int num_its=1) | 
|  | (approximately) OrthoNormalises a set of any orbitals. 
 | 
|  | 
| static DiracSpinor | orthogonaliseWrt (const DiracSpinor &Fin, const std::vector< DiracSpinor > &orbs) | 
|  | Forces Fin to be orthogonal to orbs. If Fn (i.e., {n,k}) in in orbs, replaces Fin with that from orbs. 
 | 
|  | 
| static DiracSpinor | orthonormaliseWrt (const DiracSpinor &Fin, const std::vector< DiracSpinor > &orbs) | 
|  | As orthogonaliseWrt(), but normalises Fin afterwards. 
 | 
|  | 
| static std::string | shortSymbol (int n, int kappa) | 
|  | e.g., 6p_1/2 => 6p-, 6p_3/2 => 6p+ 
 | 
|  | 
| static std::string | state_config (const std::vector< DiracSpinor > &orbs) | 
|  | Returns formatted states string (e.g., '7sp5d') given list of orbs. 
 | 
|  | 
| static DiracSpinor | exactHlike (int n, int k, std::shared_ptr< const Grid > rgrid, double zeff, double alpha=0.0) | 
|  | Constructs H-like (pointlike) DiracSpinor - mainly for testing. 
 | 
|  | 
| static const DiracSpinor * | find (int n, int k, const std::vector< DiracSpinor > &orbs) | 
|  | Searches for {n,k} in list of orbitals, returns pointer (may be null) 
 | 
|  | 
| static int | max_tj (const std::vector< DiracSpinor > &orbs) | 
|  | Returns maximum (2j) found in {orbs}. 
 | 
|  | 
| static int | max_l (const std::vector< DiracSpinor > &orbs) | 
|  | Returns maximum l found in {orbs}. 
 | 
|  | 
| static int | max_n (const std::vector< DiracSpinor > &orbs) | 
|  | Returns maximum n found in {orbs}. 
 | 
|  | 
| static int | max_kindex (const std::vector< DiracSpinor > &orbs) | 
|  | Returns maximum kappa_index found in {orbs}. 
 | 
|  | 
| static std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > | split_by_energy (const std::vector< DiracSpinor > &orbitals, double energy, int n_min_core=1) | 
|  | Splits orbitals into two groups (i.e., core, excited) by energy. 
 | 
|  | 
| static std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > | split_by_core (const std::vector< DiracSpinor > &orbitals, const std::vector< DiracSpinor > &core, int n_min_core=1) | 
|  | Splits orbitals into two groups (i.e., core, excited). 
 | 
|  | 
| static std::vector< DiracSpinor > | subset (const std::vector< DiracSpinor > &basis, const std::string &subset_string) | 
|  | Takes a subset of an input basis (by copy), according to subset_string. 
 | 
|  | 
|  | 
| double | operator* (const DiracSpinor &Fa, const DiracSpinor &Fb) | 
|  | Returns radial integral (Fa,Fb) = Int(fa*fb + ga*gb) 
 | 
|  | 
| DiracSpinor | operator+ (DiracSpinor lhs, const DiracSpinor &rhs) | 
|  | 
| DiracSpinor | operator- (DiracSpinor lhs, const DiracSpinor &rhs) | 
|  | 
| DiracSpinor | operator* (DiracSpinor Fa, const double x) | 
|  | 
| DiracSpinor | operator* (const double x, DiracSpinor Fa) | 
|  | 
| DiracSpinor | operator* (const std::vector< double > &v, DiracSpinor Fa) | 
|  | 
| bool | operator== (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | Comparitor overloads (compares n, then kappa): 
 | 
|  | 
| bool | operator!= (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| bool | operator< (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| bool | operator> (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| bool | operator<= (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| bool | operator>= (const DiracSpinor &lhs, const DiracSpinor &rhs) | 
|  | 
| std::ostream & | operator<< (std::ostream &ostr, const DiracSpinor &Fa) | 
|  | Writes short symbol to ostream. 
 | 
|  | 
Stores radial Dirac spinor: F_nk = (f, g) 
\[
\psi_{n\kappa m} = \frac{1}{r}
\begin{pmatrix}
  f_{n\kappa}(r)\,\Omega_{\kappa m}\\
  g_{n\kappa}(r)\,\Omega_{-\kappa m}
\end{pmatrix},
\quad
F_{n\kappa} =
\begin{pmatrix}
  f_{n\kappa}(r)\\
  g_{n\kappa}(r)
\end{pmatrix}
\]
- Construction.
- Takes in constant n and k=kappa values + grid
- A shared pointer to the Grid is stored (to avoid many copies of Grid)
 
- Operator Overloads
- 
- Intuative operator overloads are provided (Fa, Fb are DiracSpinors):
- v * Fa, where v is a double or vector works the obvious way
- Fa * Fb = <Fa|Fb>
- Fa == Fb returns true if {na,ka}=={nb,kb}
- Fa > Fb : first compares n, and then kappa (via kappa_index)
- Fa +/- Fb : Adds/subtracts the two spinors (and updates p0/pinf)
- You can make copies: auto Fnew = Fa
- And you can re-asign: Fb = Fa (provided Fa and Fb have same n and kappa!)
- n and kappa are constant, cannot be changed. Avoids angular errors.
- all 'set_' functions return mutable references to variables