Fix orthgonality loss in Davidson using Gram-Schmidt reorthogonalisation #191
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request covers several issues related to the Davidson solver:
The Davidson solver occasionally lost subspace orthogonality, sometimes leading to linear dependence within the subspace, resulting in instant solver convergence towards zero eigenpairs.$N^4$ , that is, for larger systems, the relative penalty can be expected to be negligible.
With this pull request, subspace orhogonality loss is fixed using a conventional Gram-Schmidt reorthogonalisation in case this is needed, i.e., whenever the vector to be added to the subspace has non-negligible overlap with the previous subspace vectors. This comes at the expense of, at least, computing
n_ss_vec
addtional scalar products in each step, which in small systems may amount up to 5% of the total computational time spent for the Davidson solver. The overhead scalesIn the Davidson solver setup, it was not differentiated between the initial subspace size, that is, the number of guesses provided, and the Davidson block size
n_block
. In cases where the number of roots to be converged is considerably smaller than the number of guesses, largen_block
values lead to a considerable overhead in computational costs compared to a conventional strategy in which the Davidson block size is set to be equal to the number of roots to be converged.With this pull request, the default is changed such that the Davidson block size is set to be equal to the number of roots to be converged.