2#include "LinAlg/include.hpp"
3#include "Wavefunction/DiracSpinor.hpp"
33 std::array<DiracSpinor::Index, 2> states;
38 DiracSpinor::Index
state(std::size_t i)
const;
40 friend bool operator==(
const CSF2 &A,
const CSF2 &B);
41 friend bool operator!=(
const CSF2 &A,
const CSF2 &B);
65 static std::array<DiracSpinor::Index, 2>
diff_1_na(
const CSF2 &V,
83 std::string
config(
bool relativistic =
false)
const;
100std::vector<CSF2>
form_CSFs(
int twoJ,
int parity,
101 const std::vector<DiracSpinor> &cisp_basis);
147 std::size_t m_num_solutions{0};
149 std::vector<CSF2> m_CSFs{};
152 std::vector<ConfigInfo> m_Info{};
165 PsiJPi(
int twoJ,
int pi,
const std::vector<DiracSpinor> &cisp_basis)
186 std::optional<double> all_below = {});
192 const std::vector<CSF2> &
CSFs()
const;
195 const CSF2 &
CSF(std::size_t i)
const;
198 double energy(std::size_t i)
const;
204 double coef(std::size_t i, std::size_t j)
const;
216 const ConfigInfo &
info(std::size_t i)
const;
Two-electron configuration state function (CSF).
Definition CSF.hpp:28
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.
Definition CSF.cpp:55
DiracSpinor::Index state(std::size_t i) const
Index (nk_index) of the ith constituent orbital (i = 0 or 1)
Definition CSF.cpp:17
std::string config(bool relativistic=false) const
Single-particle configuration as a string, in relativistic or non-rel form.
Definition CSF.cpp:70
int parity() const
Parity of the CSF, +/-1.
Definition CSF.cpp:68
static int num_different(const CSF2 &A, const CSF2 &B)
Returns the number of orbitals that differ between two CSFs (0, 1, or 2).
Definition CSF.cpp:30
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 contai...
Definition CSF.cpp:41
Container for CI solutions in a single (J, parity) sector.
Definition CSF.hpp:141
void solve(const LinAlg::Matrix< double > &Hci, int num_solutions=0, std::optional< double > all_below={})
Solves the CI eigenvalue problem for the given Hamiltonian matrix.
Definition CSF.cpp:128
double energy(std::size_t i) const
Energy of the ith CI solution (atomic units)
Definition CSF.cpp:166
PsiJPi(int twoJ, int pi, const std::vector< DiracSpinor > &cisp_basis)
Constructs the CSF basis for the given J and parity; does not solve.
Definition CSF.hpp:165
LinAlg::View< const double > coefs(std::size_t i) const
CI expansion coefficients for the ith solution (one per CSF)
Definition CSF.cpp:172
const ConfigInfo & info(std::size_t i) const
Configuration info for the ith solution (must have been set via update_config_info())
Definition CSF.cpp:193
std::size_t num_solutions() const
Number of CI solutions currently stored.
Definition CSF.cpp:190
const CSF2 & CSF(std::size_t i) const
Returns reference to the ith CSF.
Definition CSF.cpp:163
double coef(std::size_t i, std::size_t j) const
CI coefficient for the ith solution corresponding to the jth CSF.
Definition CSF.cpp:178
const std::vector< CSF2 > & CSFs() const
Full list of CSFs spanning this (J, parity) sector.
Definition CSF.cpp:160
int twoJ() const
Twice the total angular momentum 2J for this sector.
Definition CSF.cpp:187
void update_config_info(std::size_t i, const ConfigInfo &info)
Set configuration info for the ith solution (must be called manually after solve())
Definition CSF.cpp:154
int parity() const
Parity of the sector (+/-1)
Definition CSF.cpp:184
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Matrix class; row-major.
Definition Matrix.hpp:39
Proved a "view" onto an array.
Definition Matrix.ipp:7
Functions and classes for Configuration Interaction calculations.
Definition CI_Integrals.cpp:11
double L
Approximate orbital angular momentum L (-1 if not assigned)
Definition CSF.hpp:122
double ci2
Squared CI coefficient of the dominant configuration (or sum over non-rel degenerates)
Definition CSF.hpp:119
double twoS
Twice the approximate spin S (-1 if not assigned)
Definition CSF.hpp:124
std::string config
Dominant configuration label (typically non-relativistic notation)
Definition CSF.hpp:117
std::vector< CSF2 > form_CSFs(int twoJ, int parity, const std::vector< DiracSpinor > &cisp_basis)
Forms all two-electron CSFs with given total J and parity.
Definition CSF.cpp:86
Configuration metadata for a single CI level.
Definition CSF.hpp:115