ampsci
High-precision calculations for one- and two-valence atomic systems
CI::CSF2

ok

Two-electron configuration state function (CSF).

A CSF is an antisymmetrised two-electron basis state with definite total angular momentum ( \( J^2 \), \( J_z \)) and parity, built from a pair of single-particle relativistic orbitals. Only two-electron CSFs are implemented.

Each CSF2 stores the indices of its two constituent orbitals (always sorted to avoid double-counting) and the total parity, which is the product of the parities of the two single-particle states.

Note
The orbital pair is stored as a sorted array of DiracSpinor::Index (uint16_t) rather than DiracSpinor references, so CSF2 objects are cheap to copy and store. There is a limit to maximum n<=256 - see Angular::nk_to_index

#include <CSF.hpp>

Public Member Functions

 CSF2 (const DiracSpinor &a, const DiracSpinor &b)
 
DiracSpinor::Index state (std::size_t i) const
 Index (nk_index) of the ith constituent orbital (i = 0 or 1)
 
int parity () const
 Parity of the CSF, +/-1.
 
std::string config (bool relativistic=false) const
 Single-particle configuration as a string, in relativistic or non-rel form.
 

Static Public Member Functions

static int num_different (const CSF2 &A, const CSF2 &B)
 Returns the number of orbitals that differ between two CSFs (0, 1, or 2).
 
static std::array< DiracSpinor::Index, 2 > diff_1_na (const CSF2 &V, const CSF2 &X)
 For two CSFs differing by exactly one orbital, returns {n, a} where V contains orbital n and X contains orbital a.
 
static DiracSpinor::Index same_1_j (const CSF2 &A, const CSF2 &B)
 Returns the orbital index shared by two CSFs that differ by exactly one orbital.
 

Public Attributes

std::array< DiracSpinor::Index, 2 > states
 

Friends

bool operator== (const CSF2 &A, const CSF2 &B)
 
bool operator!= (const CSF2 &A, const CSF2 &B)
 

Member Function Documentation

◆ state()

DiracSpinor::Index CI::CSF2::state ( std::size_t  i) const

Index (nk_index) of the ith constituent orbital (i = 0 or 1)

◆ num_different()

int CI::CSF2::num_different ( const CSF2 A,
const CSF2 B 
)
static

Returns the number of orbitals that differ between two CSFs (0, 1, or 2).

Used to select the appropriate Slater-Condon rule when evaluating CI matrix elements: 0 – diagonal; 1 – single substitution; 2 – double substitution; >2 – zero by orthogonality.

◆ diff_1_na()

std::array< DiracSpinor::Index, 2 > CI::CSF2::diff_1_na ( const CSF2 V,
const CSF2 X 
)
static

For two CSFs differing by exactly one orbital, returns {n, a} where V contains orbital n and X contains orbital a.

Identifies the "particle" index n (in V but not X) and the "hole" index a (in X but not V), as needed to apply the single-substitution Slater-Condon rule: \( \langle V | \hat{O} | X \rangle \) where \( |V\rangle = \hat{a}^\dag_n \hat{a}_a |X\rangle \).

Warning
Result is undefined if V and X do not differ by exactly one orbital; check with num_different() first.

◆ same_1_j()

DiracSpinor::Index CI::CSF2::same_1_j ( const CSF2 A,
const CSF2 B 
)
static

Returns the orbital index shared by two CSFs that differ by exactly one orbital.

Extracts the common (spectator) orbital needed for single-substitution matrix elements.

Warning
Assumes A and B differ by exactly one orbital.

◆ parity()

int CI::CSF2::parity ( ) const

Parity of the CSF, +/-1.

◆ config()

std::string CI::CSF2::config ( bool  relativistic = false) const

Single-particle configuration as a string, in relativistic or non-rel form.


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