Improve the default CG eigensolver
Improve the implementation of the standard CG eigensolver for GS calculations. Previously, some operations were done in a wrong order, leading to convergence problems even for non-interacting systems. Now, the implementation as been corrected and follows closely the algorithm from Payne et al. (1992), Rev. Mod. Phys. 64, 4 (Section V.B).
Several options have been introduced:
- One can choose to orthogonalize against all states (as in the original algorithm) or only against already computed states (default, slightly faster in terms of total time for a range of test systems). Input option: CGOrthogonalizeAll
- One can use additional terms for the energy minimization step (see eq. 5.31ff of the cited paper) that improve convergence in some cases, but are more expensive (not used by default). Input option: CGAdditionalTerms
- One can use two different schemes for updating the current conjugate direction: Fletcher-Reeves (default) and Polak-Ribiere. Input option: CGDirection
Moreover, the multigrid preconditioner has been enhanced: options have been added to control the number of smoothing steps before, during, and after each pass in the hierarchy.
Improve the default CG eigensolver to follow Payne et al. (1992), Rev. Mod. Phys. 64, 4. Add options for orthogonalization against previous/all states, for using additional terms in the energy minimization, and for using different cnojugate directions. Add configuration options to multigrid preconditioner.
- I have checked that my code follows the Octopus coding standards
- I have added tests for all the new features added in this request.