sisi4s
|
Decomposes the Coulomb vertex into the factor orbitals and the Coulom factors . The decomposition is done with a regularized alternating least squares (RALS) algorithm, requiring only a few dozen steps for sufficient convergence. Note that currently the employed fit is rather than the form with conjugated. More...
#include <CoulombVertexDecomposition.hpp>
Public Member Functions | |
virtual std::string | getName () |
CoulombVertexDecomposition (std::vector< Argument > const &argumentList) | |
virtual | ~CoulombVertexDecomposition () |
virtual void | run () |
virtual void | dryRun () |
The dryRun estimates resource consumption, especially memory and processor time. | |
Public Member Functions inherited from sisi4s::Algorithm | |
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) |
Public Attributes | |
int64_t | rank |
The rank of the tensor rank decomposition. | |
double | Delta |
The Frobenius norm of the difference between and its decomposition. | |
bool | realFactorOrbitals |
Whether the factor orbitals are required to be real. | |
bool | normalizedFactorOrbitals |
Whether the factor orbitals are required to be normalized, i.e. . | |
bool | writeSubIterations |
Whether to write Delta after each part of one RALS iteration, where Delta is the Frobenius norm of . | |
Tensor< complex > * | GammaGqr |
The full Coulomb vertex . | |
Tensor< complex > * | composedGammaGqr |
The fit . | |
CTF::Matrix< complex > * | PiqR |
The conjugated factor orbitals . | |
CTF::Matrix< complex > * | PirR |
The factor orbitals . | |
CTF::Matrix< complex > * | LambdaGR |
The full Coulomb factors . | |
AlternatingLeastSquaresRegularizationEstimator * | regularizationEstimator |
Estimator for the regularization parameter during the alternating least squares fits. They estimate the regularization parameter in each iteration from the swamping factor in the previous iteration. | |
Public Attributes inherited from sisi4s::Algorithm | |
std::string | note |
bool | fallible = false |
std::map< std::string, std::string > | arguments |
Static Public Attributes | |
static sisi4s::AlgorithmRegistrar< CoulombVertexDecomposition > | registrar_ |
static int64_t constexpr | DEFAULT_RANK_SIZE = -1 |
static double constexpr | DEFAULT_RANK_FACTOR = 3.0 |
static constexpr int64_t | DEFAULT_MAX_ITERATIONS = 32 |
static constexpr double | DEFAULT_DELTA = 0.0 |
static constexpr double | DEFAULT_SWAMPING_THRESHOLD = 1.0 |
static constexpr double | DEFAULT_REGULARIZATION_FRICTION = 0.125 |
static constexpr bool | DEFAULT_REAL_FACTOR_ORBITALS = false |
static constexpr bool | DEFAULT_NORMALIZED_FACTOR_ORBITALS = false |
static constexpr bool | DEFAULT_WRITE_SUB_ITERATIONS = false |
static const std::string | SYMMETRIC |
static const std::string | HERMITIAN |
static const std::string | PSEUDO_INVERSE |
Protected Member Functions | |
void | fit (int64_t iterationsCount) |
Performs one iteration in fitting the factor orbitals and the Coulomb factors according to the given algorithm. | |
void | dryFit (DryTensor< complex > *GammaGqr, DryTensor< complex > *PiqR, DryTensor< complex > *PirR, DryTensor< complex > *LambdaGR, DryTensor< complex > *composedGammaGqr) |
Performs a dry run of one iteration in fitting the factor orbitals and the Coulomb factors according to the given algorithm. | |
void | normalizePi (Tensor< complex > &Pi) |
Normalizes the given factor orbitals, such that . | |
void | realizePi (Tensor< complex > &Pi) |
Discards the imaginary part of the given factor orbitals. | |
void | iterateQuadraticFactor (int iterationsCount) |
Solves the quadratically occurring factor Pi iteratively similar to the Babylonian algorithm. | |
void | computeOutgoingPi () |
Takes the incoming factor orbitals and computes the outgoing factor orbitals according to the chosen ansatz. The ansatz is specified as the string argument ansatz and can be one of the following: "symmetric", "hermitian", "pseudoInverse". | |
double | getDelta () |
Computes and returns the difference. | |
Decomposes the Coulomb vertex into the factor orbitals and the Coulom factors . The decomposition is done with a regularized alternating least squares (RALS) algorithm, requiring only a few dozen steps for sufficient convergence. Note that currently the employed fit is rather than the form with conjugated.
CoulombVertexDecomposition::CoulombVertexDecomposition | ( | std::vector< Argument > const & | argumentList | ) |
|
virtual |
|
protected |
Takes the incoming factor orbitals and computes the outgoing factor orbitals according to the chosen ansatz. The ansatz is specified as the string argument ansatz and can be one of the following: "symmetric", "hermitian", "pseudoInverse".
|
protected |
Performs a dry run of one iteration in fitting the factor orbitals and the Coulomb factors according to the given algorithm.
|
virtual |
The dryRun estimates resource consumption, especially memory and processor time.
Reimplemented from sisi4s::Algorithm.
|
protected |
Performs one iteration in fitting the factor orbitals and the Coulomb factors according to the given algorithm.
|
protected |
Computes and returns the difference.
|
inlinevirtual |
Implements sisi4s::Algorithm.
|
protected |
Solves the quadratically occurring factor Pi iteratively similar to the Babylonian algorithm.
Normalizes the given factor orbitals, such that .
Discards the imaginary part of the given factor orbitals.
|
virtual |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
double sisi4s::CoulombVertexDecomposition::Delta |
The Frobenius norm of the difference between and its decomposition.
|
static |
CTF::Matrix<complex>* sisi4s::CoulombVertexDecomposition::LambdaGR |
The full Coulomb factors .
bool sisi4s::CoulombVertexDecomposition::normalizedFactorOrbitals |
Whether the factor orbitals are required to be normalized, i.e. .
CTF::Matrix<complex>* sisi4s::CoulombVertexDecomposition::PiqR |
The conjugated factor orbitals .
CTF::Matrix<complex>* sisi4s::CoulombVertexDecomposition::PirR |
The factor orbitals .
|
static |
int64_t sisi4s::CoulombVertexDecomposition::rank |
The rank of the tensor rank decomposition.
bool sisi4s::CoulombVertexDecomposition::realFactorOrbitals |
Whether the factor orbitals are required to be real.
|
static |
AlternatingLeastSquaresRegularizationEstimator* sisi4s::CoulombVertexDecomposition::regularizationEstimator |
Estimator for the regularization parameter during the alternating least squares fits. They estimate the regularization parameter in each iteration from the swamping factor in the previous iteration.
|
static |
bool sisi4s::CoulombVertexDecomposition::writeSubIterations |
Whether to write Delta after each part of one RALS iteration, where Delta is the Frobenius norm of .