Broyden convergence accelerator. More...
#include <broyden.h>
Public Member Functions | |
Broyden (bool verbose=true, size_t m=10, double beta=0.8, double sigma=0.25) | |
Construct accelerator storing m iterations and with mixing parameters beta and sigma. | |
~Broyden () | |
Destructor. | |
void | push_x (const arma::vec &x) |
Add solutions of SCF equation to stack. | |
void | push_f (const arma::vec &f) |
Add difference from SCF solution to stack. | |
void | clear () |
Clean old matrices from memory. | |
arma::vec | update_x () |
Get estimate for solution. | |
arma::vec | operate_G (const arma::vec &v, size_t ind) const |
Operate on vector with estimated inverse Jacobian. | |
Private Attributes | |
std::vector< arma::vec > | x |
Stack of approximate solutions. | |
std::vector< arma::vec > | f |
Stack of differences from SCF solution. | |
bool | difficult |
Difficulties encountered? (Halve mixing parameter for this step) | |
bool | verbose |
Verbose operation? (Complain about bad updates?) | |
size_t | m |
Number of matrices to keep in memory. | |
double | beta |
Damping parameter. | |
double | sigma |
Sigma parameter. | |
Broyden convergence accelerator.
Broyden accelerator.
This class contains a Broyden convergence accelerator, as described in
K. Baarman, T. Eirola and V. Havu, "Robust acceleration of self consistent field calculations for density functional theory", J. Chem. Phys. 134 (2011), 134109.
The dimension of the problem is Nbas^2. The jacobian would thus be Nbas^4, so we need to work with a memory limited algorithm.