  We propose an iterative method for computing vibrational spectra that
significantly reduces the memory cost of calculations. It uses a direct product
primitive basis, but does not require storing vectors with as many components
as there are product basis functions. Wavefunctions are represented in a basis
each of whose functions is a sum of products (SOP) and the factorizable
structure of the Hamiltonian is exploited. If the factors of the SOP basis
functions are properly chosen, wavefunctions are linear combinations of a small
number of SOP basis functions. The SOP basis functions are generated using a
shifted block power method. The factors are refined with a rank reduction
algorithm to cap the number of terms in a SOP basis function. The ideas are
tested on a 20-D model Hamiltonian and a realistic CH$_3$CN (12 dimensional)
potential. For the 20-D problem, to use a standard direct product iterative
approach one would need to store vectors with about $10^{20}$ components and
would hence require about $8 \times 10^{11}$ GB. With the approach of this
paper only 1 GB of memory is necessary. Results for CH$_3$CN agree well with
those of a previous calculation on the same potential.
