21#ifndef VOTCA_XTP_THREECENTER_H
22#define VOTCA_XTP_THREECENTER_H
98 Eigen::VectorXd
PackWeighted(
const Eigen::MatrixXd& full)
const;
102 Eigen::MatrixXd
Unpack(
const Eigen::VectorXd& packed)
const;
126 const AOBasis& dftbasis,
const Eigen::MatrixXd& metric,
127 double pair_threshold)
const;
129 const std::vector<std::vector<Index>>& kept);
177 const Eigen::MatrixXd& mos,
Index ncore,
184 const Eigen::MatrixXd& dft_orbitals);
325 const Eigen::MatrixXd& dft_orbitals);
Container to hold Basisfunctions for all atoms.
RI three-centre tensor of the DFT code, B_P,mu nu = sum_Q V^-1/2_PQ (Q|mu nu).
std::vector< Index > col_offset_
std::vector< std::vector< Index > > SignificantPairs(const AOBasis &dftbasis, const Eigen::MatrixXd &metric, double pair_threshold) const
Index size() const
Number of aux functions.
const Eigen::MatrixXd & Data() const
The stored tensor, one column per aux function.
Eigen::VectorXd PackWeighted(const Eigen::MatrixXd &full) const
void Fill(const AOBasis &auxbasis, const AOBasis &dftbasis, double pair_threshold=0.0, Index build_columns=kBuildColumns)
double MetricSeconds() const
Eigen::MatrixXd FullMatrix(Index P) const
B_P as a full symmetric matrix, zero for the dropped pairs.
void SetupLayout(const AOBasis &dftbasis, const std::vector< std::vector< Index > > &kept)
void FillFullMatrix(Index P, Eigen::MatrixXd &full) const
Index StoredPairs() const
Stored pairs (nu <= mu) and all pairs N(N+1)/2.
Eigen::MatrixXd Unpack(const Eigen::VectorXd &packed) const
Index basissize() const
Number of basis functions.
static constexpr Index kBuildColumns
void Fill(const AOBasis &auxbasis, const AOBasis &dftbasis, const Eigen::MatrixXd &dft_orbitals)
const AOBasis * auxbasis_
static constexpr double metric_tolerance
void DressAuxIndex(const Eigen::MatrixXd &S)
Dress the auxiliary index with S: M_fill -> M_fill S.
void MultiplyRightWithAuxMatrixLeading(const Eigen::MatrixXd &U, Index full_slices, Index lead)
Rotate the auxiliary index of only the part of the tensor a consumer reads: all rows of slices [0,...
Eigen::MatrixXd aux_frame_
Eigen::MatrixXd dressing_
const Eigen::MatrixXd * dft_orbitals_
void RestoreAuxFrame(const Eigen::MatrixXd &frame)
bool AuxFrameIsOrthogonal() const
void Fill3cMO(const AOBasis &auxbasis, const AOBasis &dftbasis, const Eigen::MatrixXd &dft_orbitals)
void Initialize(Index basissize, Index mmin, Index mmax, Index nmin, Index nmax)
void MultiplyRightWithAuxMatrix(const Eigen::MatrixXd &matrix)
bool PartiallyRotated() const
Whether only a leading part was rotated since the last Fill.
std::vector< Eigen::MatrixXd > matrix_
static Eigen::MatrixXd CoreExchange(const AOBasis &auxbasis, const AOBasis &dftbasis, const Eigen::MatrixXd &mos, Index ncore, Index qpmin, Index qpmax)
void RotateOrbitals(const Eigen::MatrixXd &U, Index first, Index last)
Change the orbital basis of levels [first, last] for QSGW: phi_i = sum_k U_ki psi_k,...
const AOBasis * dftbasis_
const Eigen::MatrixXd & operator[](Index i) const
Eigen::MatrixXd & operator[](Index i)
void MultiplyInFillFrame(const Eigen::MatrixXd &A)
const Eigen::MatrixXd & InvSqrt() const
const Eigen::MatrixXd & AuxFrame() const
Eigen::MatrixXd ToCurrentAuxFrame(const Eigen::MatrixXd &K) const
TCMatrix & operator=(const TCMatrix &)=default
Eigen::MatrixXd inv_sqrt_
TCMatrix(TCMatrix &&)=default
virtual ~TCMatrix()=default
TCMatrix(const TCMatrix &)=default
Index Removedfunctions() const
TCMatrix & operator=(TCMatrix &&)=default
Provides a means for comparing floating point numbers.
TCMatrix_gwbse & operator[](TCMatrix::SpinChannel spin)
const TCMatrix_gwbse & operator[](TCMatrix::SpinChannel spin) const