Look-ahead Lanczos Quasi-Minimal Residual #322
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 is a companion PR to #321 . This will be rebased on top of that PR once merged (couldn't figure out how to stack the PRs in this case)
Background
This PR introduces
lalqmr
, along with an iterable implementation, which solves linear systems via QMR with a Look-ahead Lanczos process.The motivation for using the look-ahead process is for use in non-hermitian linear systems, particularly ones which aren't well-conditioned, where the standard Lanczos process encounters either exact or numerical breakdown. The look-ahead technique circumvents the breakdown by constructing blocks in the sequence, such that the generated sequences avoid breakdown.
Implementation Details
As in #321 , we limit the memory of the allocated matrices as much as possible. There is still room for further optimizations, but their benefit is limited compared to the matrix-vector products.
Tests
This implementation is tested against some contrived matrices which guarantee block creation during QMR, as well as the standard test-suite. Additional test suggestions welcome.
Future directions
References