LOBPCG Eigensolver

LOBPCG (Locally Optimal Block Preconditioned Conjugate Gradient) is a simple, yet very efficient, algorithm suggested in [Knya2001], [KLAO2007], [BLOPEWeb] for computing several smallest eigenpairs of the symmetric generalized eigenvalue problem \(Ax=\lambda Bx\) with large, possibly sparse, symmetric matrix \(A\) and symmetric positive definite matrix \(B\). The matrix \(A\) is not assumed to be positive, which also allows one to use LOBPCG to compute the largest eigenpairs of \(Ax=\lambda Bx\) simply by solving \(-Ax=\mu Bx\) for the smallest eigenvalues \(\mu=-\lambda\).

LOBPCG simultaneously computes several eigenpairs together, which is controlled by the blockSize parameter, see example ex11.c. The LOBCPG also allows one to impose constraints on the eigenvectors of the form \(x^T B y_i=0\) for a set of vectors \(y_i\) given to LOBPCG as input parameters. This makes it possible to compute, e.g., 50 eigenpairs by 5 subsequent calls to LOBPCG with the blockSize=10, using deflation. LOBPCG can use preconditioning in two different ways: by running an inner preconditioned PCG linear solver, or by applying the preconditioner directly to the eigenvector residual (option -pcgitr 0). In all other respects, LOBPCG is similar to the PCG linear solver.

The LOBPCG code is available for system interfaces: Struct, SStruct, and IJ. It is also used in the Auxiliary-space Maxwell Eigensolver (AME). The LOBPCG setup is similar to the setup for PCG.