ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
Loading...
Searching...
No Matches
CI_Integrals.hpp
1#pragma once
2#include "CSF.hpp"
3#include "Coulomb/QkTable.hpp"
4#include "Coulomb/meTable.hpp"
5#include "LinAlg/Matrix.hpp"
6#include <string>
7#include <vector>
8class DiracDiracSpinor;
9namespace MBPT {
10class CorrelationPotential;
11}
12namespace HF {
13class Breit;
14}
15
17namespace CI {
18
21double CSF2_Coulomb(const Coulomb::QkTable &qk, DiracSpinor::Index v,
22 DiracSpinor::Index w, DiracSpinor::Index x,
23 DiracSpinor::Index y, int twoJ);
24
27double CSF2_Sigma2(const Coulomb::LkTable &Sk, DiracSpinor::Index v,
28 DiracSpinor::Index w, DiracSpinor::Index x,
29 DiracSpinor::Index y, int twoJ);
30
33double CSF2_Breit(const Coulomb::WkTable &Bk, DiracSpinor::Index v,
34 DiracSpinor::Index w, DiracSpinor::Index x,
35 DiracSpinor::Index y, int twoJ);
36
39double Hab(const CI::CSF2 &A, const CI::CSF2 &B, int twoJ,
40 const Coulomb::meTable<double> &h1, const Coulomb::QkTable &qk);
41
43double Sigma2_AB(const CI::CSF2 &A, const CI::CSF2 &B, int twoJ,
44 const Coulomb::LkTable &Sk);
45
47double Breit_AB(const CI::CSF2 &A, const CI::CSF2 &B, int twoJ,
48 const Coulomb::WkTable &Bk);
49
53calculate_h1_table(const std::vector<DiracSpinor> &ci_basis,
54 const std::vector<DiracSpinor> &s1_basis_core,
55 const std::vector<DiracSpinor> &s1_basis_excited,
56 const Coulomb::QkTable &qk, bool include_Sigma1);
57
59calculate_h1_table(const std::vector<DiracSpinor> &ci_basis,
60 const MBPT::CorrelationPotential &Sigma,
61 bool include_Sigma1);
62
64Coulomb::LkTable calculate_Sk(const std::string &filename,
65 const std::vector<DiracSpinor> &cis2_basis,
66 const std::vector<DiracSpinor> &s2_basis_core,
67 const std::vector<DiracSpinor> &s2_basis_excited,
68 const Coulomb::QkTable &qk, int max_k,
69 bool exclude_wrong_parity_box,
70 bool no_new_integrals = false);
71
73Coulomb::WkTable calculate_Bk(const std::string &bk_filename,
74 const HF::Breit *const pBr,
75 const std::vector<DiracSpinor> &ci_basis,
76 int max_k);
77
80std::vector<DiracSpinor>
81basis_subset(const std::vector<DiracSpinor> &basis,
82 const std::string &subset_string,
83 const std::string &frozen_core_string = "");
84
90 const std::vector<CI::CSF2> &CSFAs, int twoJA,
92 const std::vector<CI::CSF2> &CSFBs, int twoJB,
93 const Coulomb::meTable<double> &h, int K_rank, int Parity);
94
100inline double ReducedME(const PsiJPi &As, std::size_t iA, const PsiJPi &Bs,
101 std::size_t iB, const Coulomb::meTable<double> &h,
102 int K_rank, int Parity) {
103 return ReducedME(As.coefs(iA), As.CSFs(), As.twoJ(), Bs.coefs(iB), Bs.CSFs(),
104 Bs.twoJ(), h, K_rank, Parity);
105}
106
108double RME_CSF2(const CI::CSF2 &X, int twoJX, const CI::CSF2 &V, int twoJV,
109 const Coulomb::meTable<double> &h, int K_rank);
110
112std::pair<int, int> Term_S_L(int l1, int l2, int twoJ, double gJ_target);
113
115std::string Term_Symbol(int two_J, int L, int two_S, int parity);
117std::string Term_Symbol(int L, int two_S, int parity);
118
124LinAlg::Matrix<double> construct_Hci(const PsiJPi &psi,
125 const Coulomb::meTable<double> &h1,
126 const Coulomb::QkTable &qk,
127 const Coulomb::WkTable *Bk = nullptr,
128 const Coulomb::LkTable *Sk = nullptr);
129
130} // namespace CI
Very basic two-electron CSF. Only two-electron is implemented.
Definition CSF.hpp:12
Stores the CI Solutions for given J and parity (only two-electron).
Definition CSF.hpp:62
LinAlg::View< const double > coefs(std::size_t i) const
List of CI expansion coefs for the ith CI solution.
Definition CSF.cpp:163
const std::vector< CSF2 > & CSFs() const
Full list of CSFs.
Definition CSF.cpp:151
int twoJ() const
2J for the CI solutions
Definition CSF.cpp:178
Base (pure virtual) class to store Coulomb integrals, and similar. 3 derived classes,...
Definition QkTable.hpp:57
Look-up table for matrix elements. Note: does not assume any symmetry: (a,b) is stored independantly ...
Definition meTable.hpp:17
Breit (Hartree-Fock Breit) interaction potential.
Definition Breit.hpp:52
Matrix class; row-major.
Definition Matrix.hpp:35
Proved a "view" onto an array.
Definition Matrix.ipp:7
Functions and classes for Configuration Interaction calculations.
Definition CI_Integrals.cpp:11
double CSF2_Breit(const Coulomb::WkTable &Bk, DiracSpinor::Index v, DiracSpinor::Index w, DiracSpinor::Index x, DiracSpinor::Index y, int twoJ)
Calculates the anti-symmetrised Breit integral for 2-particle states: C1*C2*(b_abcd-b_abdc),...
Definition CI_Integrals.cpp:131
Coulomb::meTable< double > calculate_h1_table(const std::vector< DiracSpinor > &ci_basis, const std::vector< DiracSpinor > &s1_basis_core, const std::vector< DiracSpinor > &s1_basis_excited, const Coulomb::QkTable &qk, bool include_Sigma1)
Calculates table of single-particle matrix elements of one-body Hamiltonian. Note: assumes basis are ...
Definition CI_Integrals.cpp:231
double Sigma2_AB(const CI::CSF2 &A, const CI::CSF2 &B, int twoJ, const Coulomb::LkTable &Sk)
Calculates the Sigma(2) correction to Hab()
Definition CI_Integrals.cpp:179
LinAlg::Matrix< double > construct_Hci(const PsiJPi &psi, const Coulomb::meTable< double > &h1, const Coulomb::QkTable &qk, const Coulomb::WkTable *Bk, const Coulomb::LkTable *Sk)
Constructs the CI matrix, optionally including Sigma corrections.
Definition CI_Integrals.cpp:573
double Breit_AB(const CI::CSF2 &A, const CI::CSF2 &B, int twoJ, const Coulomb::WkTable &Bk)
Calculates the Breit correction to Hab()
Definition CI_Integrals.cpp:187
double RME_CSF2(const CI::CSF2 &X, int twoJX, const CI::CSF2 &V, int twoJV, const Coulomb::meTable< double > &h, int K_rank)
Calculate reduce ME between two 2-particle CSFs - XXX not quite right??
Definition CI_Integrals.cpp:470
std::string Term_Symbol(int two_J, int L, int two_S, int parity)
Returns Term_Symbol as string.
Definition CI_Integrals.cpp:559
Coulomb::WkTable calculate_Bk(const std::string &bk_filename, const HF::Breit *const pBr, const std::vector< DiracSpinor > &ci_basis, int max_k)
Calculates table of single-particle matrix elements of two-body Breit operator.
Definition CI_Integrals.cpp:351
std::pair< int, int > Term_S_L(int l1, int l2, int twoJ, double gJ_target)
Determines best-fit for S and L for two-electron state by matching g-factor.
Definition CI_Integrals.cpp:518
double Hab(const CI::CSF2 &X, const CI::CSF2 &V, int twoJ, const Coulomb::meTable< double > &h1, const Coulomb::QkTable &qk)
Determines CI Hamiltonian matrix element for two 2-particle CSFs, a and b. Does NOT include Sigma(2) ...
Definition CI_Integrals.cpp:196
double ReducedME(const LinAlg::View< const double > &cA, const std::vector< CI::CSF2 > &CSFAs, int twoJA, const LinAlg::View< const double > &cB, const std::vector< CI::CSF2 > &CSFBs, int twoJB, const Coulomb::meTable< double > &h, int K_rank, int Parity)
Calculate reduced matrix elements between two CI states.
Definition CI_Integrals.cpp:431
Coulomb::LkTable calculate_Sk(const std::string &filename, const std::vector< DiracSpinor > &cis2_basis, const std::vector< DiracSpinor > &s2_basis_core, const std::vector< DiracSpinor > &s2_basis_excited, const Coulomb::QkTable &qk, int max_k, bool exclude_wrong_parity_box, bool no_new_integrals)
Calculates table of single-particle matrix elements of two-body Sigma_2 operator.
Definition CI_Integrals.cpp:302
std::vector< DiracSpinor > basis_subset(const std::vector< DiracSpinor > &basis, const std::string &subset_string, const std::string &frozen_core_string)
Takes a subset of input basis according to subset_string. Only states not included in frozen_core_str...
Definition CI_Integrals.cpp:391
double CSF2_Sigma2(const Coulomb::LkTable &Sk, DiracSpinor::Index v, DiracSpinor::Index w, DiracSpinor::Index x, DiracSpinor::Index y, int twoJ)
Calculates the correlation [Sigma(2)] correction to CSF2_Coulomb(). Sk is the table of two-body singl...
Definition CI_Integrals.cpp:75
double CSF2_Coulomb(const Coulomb::QkTable &qk, DiracSpinor::Index v, DiracSpinor::Index w, DiracSpinor::Index x, DiracSpinor::Index y, int twoJ)
Calculates the anti-symmetrised Coulomb integral for 2-particle states: C1*C2*(g_abcd-g_abdc),...
Definition CI_Integrals.cpp:16
Functions and classes for Hartree-Fock.
Definition CI_Integrals.hpp:12
Many-body perturbation theory.
Definition CI_Integrals.hpp:9