Contains all the necessary tools for an algorithm with singles, doubles and triples amplitudes. It calculates the energy from the amplitudes , and the Coulomb integrals . For calculating the amplitudes it calls the iteration routine of the actual algorithm.
More...
ClusterSinglesDoublesTriplesQuadruplesAlgorithm (std::vector< Argument > const &argumentList)
virtual ~ClusterSinglesDoublesTriplesQuadruplesAlgorithm ()
virtual void run ()
Calculates the energy of a ClusterSinglesDoubles algorithm.
virtual std::string getAbbreviation ()=0
Returns the abbreviation of the concrete algorithm, e.g. "Ccd", "Dcd".
ClusterSinglesDoublesAlgorithm (std::vector< Argument > const &argumentList)
virtual ~ClusterSinglesDoublesAlgorithm ()
virtual void run ()
Calculates the energy of a ClusterSinglesDoubles algorithm.
virtual std::string getAbbreviation ()=0
Returns the abbreviation of the concrete algorithm, e.g. "Ccd", "Dcd".
Algorithm (std::vector< Argument > const &argumentList)
virtual ~Algorithm ()
virtual std::string getName ()=0
virtual void run ()=0
virtual void dryRun ()
The dryRun estimates resource consumption, especially memory and processor time.
bool isArgumentGiven (std::string const &argumentName)
std::string getTextArgument (std::string const &argumentName)
std::string getTextArgument (std::string const &argumentName, std::string const &defaultValue)
bool getBooleanArgument (std::string const &name)
bool getBooleanArgument (std::string const &name, bool const &defaultValue)
int64_t getIntegerArgument (std::string const &argumentName)
int64_t getIntegerArgument (std::string const &argumentName, int64_t const defaultValue)
real getRealArgument (std::string const &argumentName)
real getRealArgument (std::string const &argumentName, real const defaultValue)
template<typename F = real, typename T = Tensor<F>>
T * getTensorArgument (std::string const &argumentName)
template<typename F = real, typename C = std::vector<F>>
C * getContainerArgument (std::string const &argumentName)
template<typename F = real, typename C = std::vector<F>>
void allocateContainerArgument (std::string const &argumentName, C *container)
std::vector< std::string > getGivenArgumentNames () const
void checkArgumentsOrDie (const std::vector< std::string > args) const
template<typename F = real, typename T = Tensor<F>>
void allocatedTensorArgument (std::string const &argumentName, T *tensor)
Specifies the location of an output tensor data.
void setRealArgument (std::string const &argumentName, real const value)
void setIntegerArgument (std::string const &argumentName, int const value)
real getRealArgumentFromInteger (IntegerData *data)
real getRealArgumentFromTensor (TensorData < real > *data)
template<typename F = real, typename T = Tensor<F>>
T * getTensorArgumentFromReal (RealData *realData)
Converts the given real data into a scalar tensor.
Data * getArgumentData (std::string const &argumentName)
template<typename F >
F run ()
Calculates the energy of a ClusterSinglesDoubles algorithm.
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)