24#include <boost/format.hpp>
37template <
typename _Environment>
44 size_t maximum_number_of_iterations;
48 std::shared_ptr<ConvergenceCriterion<Environment>> convergence_criterion;
65 template <
typename Criterion>
67 maximum_number_of_iterations {maximum_number_of_iterations},
69 convergence_criterion {std::make_shared<Criterion>(convergence_criterion)} {}
82 std::string description_string = (boost::format(
"An iterative algorithm (with a maximum of %s iterations) consisting of the following steps:\n") % this->
maximumNumberOfIterations()).str();
85 description_string +=
"\nWith the following convergence criterion:\n";
86 description_string += convergence_criterion->description();
88 return description_string;
98 template <
typename Z = Step<Environment>>
120 for (this->iteration = 0; this->iteration <= this->maximum_number_of_iterations; this->iteration++) {
125 if (this->convergence_criterion->isFulfilled(environment)) {
129 this->steps.
execute(environment);
133 throw std::runtime_error(
"IterativeAlgorithm<Environment>::perform(Environment&): The algorithm didn't find a solution within the maximum number of iterations.");
151 template <
typename Z = Step<Environment>>
Definition: IterativeAlgorithm.hpp:38
void perform(Environment &environment)
Definition: IterativeAlgorithm.hpp:118
void remove(const size_t index)
Definition: IterativeAlgorithm.hpp:142
enable_if_t< std::is_same< Environment, typename Z::Environment >::value, void > insert(const Z &step, const size_t index)
Definition: IterativeAlgorithm.hpp:99
size_t numberOfIterations() const
Definition: IterativeAlgorithm.hpp:110
std::string description() const
Definition: IterativeAlgorithm.hpp:80
enable_if_t< std::is_same< Environment, typename Z::Environment >::value, void > replace(const Z &step, const size_t index)
Definition: IterativeAlgorithm.hpp:152
_Environment Environment
Definition: IterativeAlgorithm.hpp:40
size_t maximumNumberOfIterations() const
Definition: IterativeAlgorithm.hpp:105
IterativeAlgorithm(const StepCollection< Environment > &steps, const Criterion &convergence_criterion, const size_t maximum_number_of_iterations=128)
Definition: IterativeAlgorithm.hpp:66
Definition: StepCollection.hpp:41
enable_if_t< std::is_same< Environment, typename Z::Environment >::value, void > insert(const Z &step, const size_t index)
Definition: StepCollection.hpp:105
void execute(Environment &environment) override
Definition: StepCollection.hpp:75
std::string description() const override
Definition: StepCollection.hpp:58
enable_if_t< std::is_same< Environment, typename Z::Environment >::value, void > replace(const Z &step, const size_t index)
Definition: StepCollection.hpp:148
void remove(const size_t index)
Definition: StepCollection.hpp:136
Definition: BaseOneElectronIntegralBuffer.hpp:25
typename std::enable_if< B, T >::type enable_if_t
Definition: type_traits.hpp:37