38template <
typename _Iterate,
typename _Environment>
44 using Scalar =
typename Iterate::Scalar;
46 static_assert(std::is_same<Scalar, typename Environment::Scalar>::value,
"The scalar types of the iterate and environment must match.");
52 std::string iterate_description;
54 std::function<std::deque<Iterate>(
const Environment&)> extractor;
68 const double threshold = 1.0e-08,
const std::function<std::deque<Iterate>(
const Environment&)> extractor = [](
const Environment& environment) {
return environment.variables; },
const std::string& iterate_description =
"a general iterate") :
70 extractor {extractor},
71 iterate_description {iterate_description} {}
82 return (boost::format(
"A convergence criterion that checks if the norm of the difference of two iterates (%s) is converged, with a tolerance of %.2e.") % this->iterate_description % this->
threshold()).str();
93 const auto iterates = this->extractor(environment);
95 if (iterates.size() < 2) {
100 const auto second_to_last_it = iterates.end() - 2;
101 const auto& previous = *second_to_last_it;
102 const auto current = iterates.back();
104 return (std::real((current - previous).norm()) <= this->m_threshold);
Definition: ConsecutiveIteratesNormConvergence.hpp:40
bool isFulfilled(Environment &environment) override
Definition: ConsecutiveIteratesNormConvergence.hpp:91
typename Iterate::Scalar Scalar
Definition: ConsecutiveIteratesNormConvergence.hpp:44
_Iterate Iterate
Definition: ConsecutiveIteratesNormConvergence.hpp:43
ConsecutiveIteratesNormConvergence(const double threshold=1.0e-08, const std::function< std::deque< Iterate >(const Environment &)> extractor=[](const Environment &environment) { return environment.variables;}, const std::string &iterate_description="a general iterate")
Definition: ConsecutiveIteratesNormConvergence.hpp:67
std::string description() const override
Definition: ConsecutiveIteratesNormConvergence.hpp:81
_Environment Environment
Definition: ConsecutiveIteratesNormConvergence.hpp:45
double threshold() const
Definition: ConsecutiveIteratesNormConvergence.hpp:111
Definition: ConvergenceCriterion.hpp:33
Definition: BaseOneElectronIntegralBuffer.hpp:25