WIP: Direct Minimisation. FD mode.
Implementation of the direct minimisation algorithm using the LBFGS with a preconditioner (P-LBFGS) and a parabolic line search in the finite difference mode at zero kelvin temperature. Here is a comparison of the P-LBFGS and the RMM-DIIS algorithm (with default parameters of eigensolver and density mixing) done on small molecules using the PBE0 functional:
The convergence is considered to be achieved when the square of the residual norm is less than 4.0e-8 eV^2 per electron. RMM-DIIS fails to converge for the OH molecule, but might converge with other non-default density mixing parameters.
Here is a comparison of the P-LBFGS with the RMM-DIIS and the Davidson algorithms using the PBE functional. For the OH molecule, the P-LBFGS converges in 144 iterations and the Davidson algorithm in 102.
Here is an example of how to run the code:
from ase.build import molecule
from gpaw import GPAW, FD
from gpaw.odd.gd.oddvar import ODDvarFD
sys = molecule('CH4')
sys.center(vacuum=4.0)
calc = GPAW(mode=FD(), nbands=0)
calc.atoms = sys
opt = ODDvarFD(calc)
opt.run()
The direct minimisation can be applied to non-unitary invariant functionals as for example self-interaction corrected functionals (which we are currently working on.) It would be nice to add the direct minimisation to the GPAW calculator as it is just an alternative method to the SCF algorithms.