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