# Developers Manual:LOBPCG

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

# Description of the algorithm

The following is a basic description of the locally optimal block preconditioned conjugate gradient algorithm as implemented in the file eigen_lobpcg_inc.F90. Locking of already converged eigenvectors is omitted.

For more details, see .

Given a preconditioner and initial real or complex vectors , we form the column matrix and solve the eigenvalue problem for the lowest eigenpairs by the following iterative procedure:

1. Make initial vectors orthonormal: (The denotes for real and for complex .)

Calculate the upper triangular matrix of the Cholesky factorization.  2. Get initial Ritz-vectors and -values: Solve the following eigenvalue problem for all eigenvalues and -vectors: Save the initial eigenvalues in a vector: Multiply the initial vectors by the column matrix of the Ritz-vectors and set the conjugate directions to zero: 3. for do

Calculate residuals:  4. Terminate convergence loop if all residuals are below a certain threshold.

6. Apply the preconditioner to the residuals: 6. Make residuals orthogonal to eigenvectors: 7. Orthonormalize residuals:   8. if then

Orthonormalize conjugate directions:   end if

9. Rayleigh-Ritz procedure on subspace .

Set up symmetric Gram-matrices:

if then  else  end if

10. Calculate the lowest eigenpairs of the (for ) or (for ) generalized eigenvalue problem 11. Partition the column-matrix of the results into two or three block matrices of size: , for , and , for 12. Calculate new eigenvectors and, if , new conjugate directions:

if then else end if done