2#include "IO/FRW_fileReadWrite.hpp"
3#include "LinAlg/include.hpp"
4#include "Wavefunction/DiracSpinor.hpp"
36 std::array<DiracSpinor::Index, 2> states;
43 friend bool operator==(
const CSF2 &A,
const CSF2 &B);
44 friend bool operator!=(
const CSF2 &A,
const CSF2 &B);
68 static std::array<DiracSpinor::Index, 2>
diff_1_na(
const CSF2 &V,
86 std::string
config(
bool relativistic =
false)
const;
103std::vector<CSF2>
form_CSFs(
int twoJ,
int parity,
104 const std::vector<DiracSpinor> &cisp_basis);
141double LS_amplitude(
int n1,
int l1,
int twoj1,
int n2,
int l2,
int twoj2,
int L,
168std::pair<double, double>
170 const std::vector<CSF2> &csfs,
int twoJ);
201[[nodiscard]] std::optional<Level>
parse_level(std::string_view str);
204[[nodiscard]] std::string
to_string(
const Level &level);
254 std::size_t m_num_solutions{0};
256 std::vector<CSF2> m_CSFs{};
259 std::vector<ConfigInfo> m_Info{};
272 PsiJPi(
int twoJ,
int pi,
const std::vector<DiracSpinor> &cisp_basis)
293 std::optional<double> all_below = {});
311 const std::vector<CSF2> &
CSFs()
const;
314 const CSF2 &
CSF(std::size_t i)
const;
317 double energy(std::size_t i)
const;
323 double coef(std::size_t i, std::size_t j)
const;
335 const ConfigInfo &
info(std::size_t i)
const;
371 bool read_write(
const std::string &fname, IO::FRW::RoW rw,
372 std::ostream &outstream = std::cout);
Two-electron configuration state function (CSF).
Definition CSF.hpp:31
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:60
DiracSpinor::Index state(std::size_t i) const
Index (nk_index) of the ith constituent orbital (i = 0 or 1)
Definition CSF.cpp:22
std::string config(bool relativistic=false) const
Single-particle configuration as a string, in relativistic or non-rel form.
Definition CSF.cpp:75
int parity() const
Parity of the CSF, +/-1.
Definition CSF.cpp:73
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:35
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:46
Container for CI solutions in a single (J, parity) block.
Definition CSF.hpp:248
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:276
double energy(std::size_t i) const
Energy of the ith CI solution (atomic units)
Definition CSF.cpp:328
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:272
LinAlg::View< const double > coefs(std::size_t i) const
CI expansion coefficients for the ith solution (one per CSF)
Definition CSF.cpp:334
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-block binary file.
Definition CSF.cpp:361
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:355
std::size_t num_solutions() const
Number of CI solutions currently stored.
Definition CSF.cpp:352
const CSF2 & CSF(std::size_t i) const
Returns reference to the ith CSF.
Definition CSF.cpp:325
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:340
void set_solution(double energy, const LinAlg::Vector< double > &coefs)
Stores a single solution directly, without diagonalising.
Definition CSF.cpp:302
const std::vector< CSF2 > & CSFs() const
Full list of CSFs spanning this (J, parity) block.
Definition CSF.cpp:322
int twoJ() const
Twice the total angular momentum 2J for this block.
Definition CSF.cpp:349
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:316
int parity() const
Parity of the block (+/-1)
Definition CSF.cpp:346
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:44
uint16_t Index
Integer type for the compressed (n,kappa) index.
Definition DiracSpinor.hpp:51
Row-major dense matrix with arithmetic and linear algebra support.
Definition Matrix.hpp:208
Owning 1D array; inherits from Matrix<T> with a single column.
Definition Vector.hpp:25
Non-owning strided view onto a 1D segment of an array.
Definition Matrix.hpp:69
Functions and classes for Configuration Interaction calculations.
Definition CI_Integrals.cpp:22
std::optional< Level > parse_level(std::string_view str)
Parses the text form of a CI level reference; see Level.
Definition CSF.cpp:91
int parity
Parity: +1 or -1.
Definition CSF.hpp:186
std::size_t index
Which solution, counting from zero, in order of energy.
Definition CSF.hpp:188
double LS_amplitude(int n1, int l1, int twoj1, int n2, int l2, int twoj2, int L, int S, int twoJ)
jj -> LS recoupling amplitude for an antisymmetrised two-electron CSF.
Definition CSF.cpp:202
double L
Approximate orbital angular momentum L (-1 if not assigned)
Definition CSF.hpp:225
double ci2
Squared CI coefficient of the dominant configuration (or sum over non-rel degenerates)
Definition CSF.hpp:222
std::pair< double, double > expectation_L2S2(const LinAlg::View< const double > &coefs, const std::vector< CSF2 > &csfs, int twoJ)
Expectation values of L^2 and S^2 for a two-electron CI state.
Definition CSF.cpp:225
double twoS
Twice the approximate spin S (-1 if not assigned)
Definition CSF.hpp:227
std::string config
Dominant configuration label (typically non-relativistic notation)
Definition CSF.hpp:220
int twoJ
Twice the total angular momentum, 2J.
Definition CSF.hpp:184
double S2
Expectation value of S^2 for the CI state (-1 if not computed)
Definition CSF.hpp:231
double L2
Expectation value of L^2 for the CI state (-1 if not computed)
Definition CSF.hpp:229
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:164
std::string to_string(const Level &level)
Text form of a CI level reference, e.g., "2+:3"; see Level.
Definition CSF.cpp:157
Configuration metadata for a single CI level.
Definition CSF.hpp:218
Identifies one CI level: its (J, parity), and which solution.
Definition CSF.hpp:182