virtual std::shared_ptr< FockVector < double > > getResiduum (const int iteration, const std::shared_ptr< const FockVector < double > > &litudes)
Implements the iterate method with the DRCCD iteration.
virtual std::shared_ptr< FockVector < complex > > getResiduum (const int iteration, const std::shared_ptr< const FockVector < complex > > &litudes)
Computes and returns the residuum of the given amplitudes.
template<typename F >
std::shared_ptr< FockVector < F > > getResiduumTemplate (const int iteration, const std::shared_ptr< const FockVector < F > > &litudes)
template<typename F >
F run ()
virtual std::shared_ptr< FockVector < double > > getResiduum (const int iteration, const std::shared_ptr< const FockVector < double > > &litudes)=0
Computes and returns the residuum of the given amplitudes.
virtual std::shared_ptr< FockVector < complex > > getResiduum (const int iteration, const std::shared_ptr< const FockVector < complex > > &litudes)=0
Computes and returns the residuum of the given amplitudes.
template<typename F >
F getEnergy (const std::shared_ptr< const FockVector < F > > &litdues)
Computes and returns the energy of the given amplitudes.
template<typename F >
void estimateAmplitudesFromResiduum (const std::shared_ptr< FockVector < F > > &residuum, const std::shared_ptr< const FockVector < F > > &litudes)
Calculates an improved estimate of the amplitudes provided the given the residuum. with .
template<typename F >
void calculateExcitationEnergies (Tensor < F > &D, const std::string &indices)
Calculates eps_a+eps_b+...-eps_i-eps_j-... into D^ab..._ij...
template<typename F >
void dryAmplitudesFromResiduum (sisi4s::DryTensor < F > &R)
Dry run for amplitudesFromResiduum.
template<typename F >
std::shared_ptr< FockVector < F > > createAmplitudes (std::vector< std::string > amplitudeNames, std::vector< std::vector< TensorIndex > > amplitudeLens, std::vector< std::string > amplitudeIndices)
template<typename F >
void storeAmplitudes (const std::shared_ptr< const FockVector < F > > &litudes, std::vector< std::string > names)
Tensor < double > * sliceCoupledCoulombIntegrals (const std::shared_ptr< const FockVector < double > > &litudes, int a, int b, int integralsSliceSize)
Calculates and returns one slice Xxycd of the Coulomb integrals coupled to the singles amplitudes. The indices x and y are restricted to the range {No+a, ..., No+a+No-1} and {No+b, ..., No+b+No-1}, respectively. The caller is responsible for deleting the dynamically allocated result tensor.
Tensor < complex > * sliceCoupledCoulombIntegrals (const std::shared_ptr< const FockVector < complex > > &litudes, int a, int b, int integralsSliceSize)
Tensor < double > * sliceAmplitudesFromCoupledCoulombFactors (const std::shared_ptr< const FockVector < double > > &litudes, int a, int b, int factorsSliceSize)
Calculates and returns one slice Fabij of the residuum from the dressed Coulomb factors. The slice is computed from Rx and Ry and are restricted to the range {a, ..., factorsSliceSize+a-1} and {b, ..., factorsSliceSize+b-1}, respectively. The caller is responsible for deleting the dynamically allocated result tensor.
Tensor < complex > * sliceAmplitudesFromCoupledCoulombFactors (const std::shared_ptr< const FockVector < complex > > &litudes, int a, int b, int factorsSliceSize)
template<typename F >
void sliceIntoResiduum (Tensor < F > &Rxyij, int a0, int b0, Tensor < F > &Rabij)
Adds the given slice of the residuum tensor Rxyij to the entire residuum tensor Rabij at the respective index range.
std::string getCapitalizedAbbreviation ()
The abbreviation of the algorithm in capital letters.
std::string getDataName (const std::string &type, const std::string &data)