  We present an iterative algorithm for computing an invariant subspace
associated with the algebraically smallest eigenvalues of a large sparse or
structured Hermitian matrix A. We are interested in the case in which the
dimension of the invariant subspace is large (e.g., over several hundreds or
thousands) even though it may still be small relative to the dimension of A.
These problems arise from, for example, density functional theory based
electronic structure calculations for complex materials. The key feature of our
algorithm is that it performs fewer Rayleigh--Ritz calculations compared to
existing algorithms such as the locally optimal precondition conjugate gradient
or the Davidson algorithm. It is a block algorithm, hence can take advantage of
efficient BLAS3 operations and be implemented with multiple levels of
concurrency. We discuss a number of practical issues that must be addressed in
order to implement the algorithm efficiently on a high performance computer.
