2#include "IO/FRW_fileReadWrite.hpp"
3#include "LinAlg/include.hpp"
4#include "Wavefunction/DiracSpinor.hpp"
35 std::array<DiracSpinor::Index, 2> states;
40 DiracSpinor::Index
state(std::size_t i)
const;
42 friend bool operator==(
const CSF2 &A,
const CSF2 &B);
43 friend bool operator!=(
const CSF2 &A,
const CSF2 &B);
67 static std::array<DiracSpinor::Index, 2>
diff_1_na(
const CSF2 &V,
85 std::string
config(
bool relativistic =
false)
const;
102std::vector<CSF2>
form_CSFs(
int twoJ,
int parity,
103 const std::vector<DiracSpinor> &cisp_basis);
149 std::size_t m_num_solutions{0};
151 std::vector<CSF2> m_CSFs{};
154 std::vector<ConfigInfo> m_Info{};
167 PsiJPi(
int twoJ,
int pi,
const std::vector<DiracSpinor> &cisp_basis)
188 std::optional<double> all_below = {});
194 const std::vector<CSF2> &
CSFs()
const;
197 const CSF2 &
CSF(std::size_t i)
const;
200 double energy(std::size_t i)
const;
206 double coef(std::size_t i, std::size_t j)
const;
218 const ConfigInfo &
info(std::size_t i)
const;
249 bool read_write(
const std::string &fname, IO::FRW::RoW rw,
250 std::ostream &outstream = std::cout);
Two-electron configuration state function (CSF).
Definition CSF.hpp:30
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:57
DiracSpinor::Index state(std::size_t i) const
Index (nk_index) of the ith constituent orbital (i = 0 or 1)
Definition CSF.cpp:19
std::string config(bool relativistic=false) const
Single-particle configuration as a string, in relativistic or non-rel form.
Definition CSF.cpp:72
int parity() const
Parity of the CSF, +/-1.
Definition CSF.cpp:70
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:32
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:43
Container for CI solutions in a single (J, parity) sector.
Definition CSF.hpp:143
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:130
double energy(std::size_t i) const
Energy of the ith CI solution (atomic units)
Definition CSF.cpp:168
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:167
LinAlg::View< const double > coefs(std::size_t i) const
CI expansion coefficients for the ith solution (one per CSF)
Definition CSF.cpp:174
bool read_write(const std::string &fname, IO::FRW::RoW rw, std::ostream &outstream=std::cout)
Reads or writes CI solutions (energies, eigenvectors) to/from a multi-sector binary file.
Definition CSF.cpp:201
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:195
std::size_t num_solutions() const
Number of CI solutions currently stored.
Definition CSF.cpp:192
const CSF2 & CSF(std::size_t i) const
Returns reference to the ith CSF.
Definition CSF.cpp:165
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:180
const std::vector< CSF2 > & CSFs() const
Full list of CSFs spanning this (J, parity) sector.
Definition CSF.cpp:162
int twoJ() const
Twice the total angular momentum 2J for this sector.
Definition CSF.cpp:189
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:156
int parity() const
Parity of the sector (+/-1)
Definition CSF.cpp:186
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Row-major dense matrix with arithmetic and linear algebra support.
Definition Matrix.hpp:209
Non-owning strided view onto a 1D segment of an array.
Definition Matrix.hpp:70
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:124
double ci2
Squared CI coefficient of the dominant configuration (or sum over non-rel degenerates)
Definition CSF.hpp:121
double twoS
Twice the approximate spin S (-1 if not assigned)
Definition CSF.hpp:126
std::string config
Dominant configuration label (typically non-relativistic notation)
Definition CSF.hpp:119
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:88
Configuration metadata for a single CI level.
Definition CSF.hpp:117