Skip to content

Improve the default CG eigensolver

Nicolas Tancogne-Dejean requested to merge improve_cg into develop

Description

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.

News snippet

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.

Checklist

  • I have checked that my code follows the Octopus coding standards
  • I have added tests for all the new features added in this request.
Edited by Sebastian Ohlmann

Merge request reports