21#ifndef VOTCA_XTP_SCREENING_UPDATE_H
22#define VOTCA_XTP_SCREENING_UPDATE_H
62 if (name ==
"every") {
64 }
else if (name ==
"adaptive") {
67 throw std::runtime_error(
"Unknown gw.screening_update '" + name +
68 "'; choices are every, adaptive");
82 void Built(
const Eigen::VectorXd& energies) {
95 Next Decide(
double residual,
const Eigen::VectorXd& new_energies,
96 double limit,
double* drift_out =
nullptr) {
98 const double step = residual;
99 const double drift = (new_energies -
built_from_).cwiseAbs().maxCoeff();
100 if (drift_out !=
nullptr) {
109 if (step < ratio_ * drift || inner_ >=
max_inner_) {
When evGW rebuilds the screening W.
void Built(const Eigen::VectorXd &energies)
W has just been built from these energies.
void Configure(Mode mode, double ratio, Index max_inner)
static std::string Name(Mode mode)
Eigen::VectorXd built_from_
Next Decide(double residual, const Eigen::VectorXd &new_energies, double limit, double *drift_out=nullptr)
static Mode Parse(const std::string &name)
Index inner() const
QP iterations since W was last built (before the current one).
Provides a means for comparing floating point numbers.