Skip to content

Eigensolver: Chebyshev Filtering

Alex Buccheri requested to merge eigensolver/chebyshev into main

**Introduce a Chebyshev filter as an alternative to Iterative Eigensolvers **

Based on the implementation presented in Zhou2006 and Zhou2014.

This MR adds:

  • Norm of a 2D matrix, ||A||_2. The spectral norm of a matrix A is the largest singular value of A, such that ||A||_2 = max_eigenvalue(A)
  • A new run option to the input file and eigensolver class.
    • Document input variables in the MR
  • A implementation of initial bounds estimation for the region we wish to filter (that is not amplified by the polynomial, and hence not discarded).
  • A Chebyshev polynomial that dampens the region [a, b] and returns filtered vectors (corresponding to eigenvalues < a in energy)

NOTE, I have made every effort to a avoid using FLOAT in favour of dp, as the former is an obsolete implementation, and should be removed from the source.

Application Tests

In the tests, I observe an increase of 2-3 in calculation speed-up.

References were computed in serial.

TODOs

  • Add application tests
  • ChebyFirstNiter = 1 caused a set fault in the one instance I tried it. Try for multiple tests
  • Apply findent
    • I can't just use emacs select all as this breaks the desired declaration alignments
    • As such, don't bother commenting on the formatting. I will apply findent once I get the fork, and after all other issues are cleaned up
Edited by Alex Buccheri

Merge request reports