51 TPM(
const TPM &) =
default;
55 virtual ~TPM() =
default;
61 using Container::operator=;
63 using Container::operator();
65 double operator()(
int a,
int b,
int c,
int d)
const;
75 void ham(std::function<
double(
int,
int)> &T, std::function<
double(
int,
int,
int,
int)> &V);
99 void Q(
double a,
double b,
double c,
const TPM &,
bool=
false);
103 void H(
double t,
const TPM &,
const SUP &,
const Lineq &);
121 double getDiag(
int,
int)
const;
135 double calc_rotate(
int k,
int l,
double theta, std::function<
double(
int,
int)> &T, std::function<
double(
int,
int,
int,
int)> &V)
const;
137 double calc_rotate_slow(
int k,
int l,
double theta, std::function<
double(
int,
int)> &T, std::function<
double(
int,
int,
int,
int)> &V)
const;
139 std::pair<double,bool>
find_min_angle(
int k,
int l,
double start_angle, std::function<
double(
int,
int)> &T, std::function<
double(
int,
int,
int,
int)> &V)
const;
141 void rotate(
int,
int,
double, std::function<
double(
int,
int)> &, std::function<
double(
int,
int,
int,
int)> &);
163 static std::unique_ptr<helpers::tmatrix<unsigned int>>
s2t;
166 static std::unique_ptr<helpers::tmatrix<unsigned int>>
t2s;
void ReadFromFile(std::string filename)
double calc_rotate_slow_doci(const TPM &, int, int, double) const
static TPM CreateFromFile(std::string filename)
void ReadFromFileFull(std::string filename)
double line_search(double t, SUP &, const TPM &) const
int n
dimension of the full TPM
std::pair< double, bool > find_min_angle_doci(const TPM &, int, int, double=0) const
void ham(std::function< double(int, int)> &T, std::function< double(int, int, int, int)> &V)
void HF_molecule(std::string filename)
void WriteFullToFile(std::string filename) const
double calc_rotate_doci(const TPM &, int, int, double) const
double calc_rotate_slow(int k, int l, double theta, std::function< double(int, int)> &T, std::function< double(int, int, int, int)> &V) const
int InverseS(TPM &, const Lineq &)
double operator()(int a, int b, int c, int d) const
void rotate(int, int, double, std::function< double(int, int)> &, std::function< double(int, int, int, int)> &)
void constr_grad(double t, const SUP &, const TPM &, const Lineq &)
void H(double t, const TPM &, const SUP &, const Lineq &)
friend std::ostream & operator<<(std::ostream &output, doci2DM::TPM &tpm)
double calc_rotate(int k, int l, double theta, std::function< double(int, int)> &T, std::function< double(int, int, int, int)> &V) const
std::pair< double, bool > find_min_angle(int k, int l, double start_angle, std::function< double(int, int)> &T, std::function< double(int, int, int, int)> &V) const
TPM & operator=(const TPM &)=default
void rotate_doci(int, int, double)
void Proj_E(const Lineq &, int option=0)
double getDiag(int, int) const
int L
the size of the sp DOCI space (there are 2*L sp states)
void WriteToFile(hid_t &group_id) const
static std::unique_ptr< helpers::tmatrix< unsigned int > > t2s
table translating two particles indices to single particle indices
static std::unique_ptr< helpers::tmatrix< unsigned int > > s2t
table translating single particles indices to two particle indices
std::vector< TPM > DOCI_constrains() const
std::vector< TPM > singlet_constrains() const
void collaps(const SUP &, const Lineq &)
int solve(double t, const SUP &, TPM &, const Lineq &)