# 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.