  We present a novel linear solver that works well for large systems obtained
from discretizing PDEs. It is robust and, for the examples we studied, the
computational effort scales linearly with the number of equations. The
algorithm is based on a wavelength decomposition that combines conjugate
gradient, multi-scaling and iterative splitting methods into a single approach.
On the surface, the algorithm is a simple preconditioned conjugate gradient
with all the sophistication of the algorithm in the choice of the
preconditioning matrix. The preconditioner is a very good approximate inverse
of the linear operator. It is constructed from the inverse of the coarse
grained linear operator and from smoothing operators that are based on an
operator splitting on the fine grid. The coarse graining captures the long
wavelength behavior of the inverse operator while the smoothing operator
captures the short wavelength behavior. The conjugate gradient iteration
accounts for the coupling between long and short wavelengths. The coarse
grained operator corresponds to a lowerresolution approximation to the PDEs.
While the coarse grained inverse is not known explicitly, the algorithm only
requires that the preconditioner can be a applied to a vector. The coarse
inverse applied to a vector can be obtained as the solution of another
preconditioned conjugate gradient solver that applies the same algorithm to the
smaller problem. Thus, the method is naturally recursive. The recursion ends
when the matrix is sufficiently small for a solution to be obtained efficiently
with a standard solver. We have tested our solver on the porous flow equation.
On a workstation we have solved problems on grids ranging in dimension from
$10^3$ to $10^6$, and found that the linear scaling holds.
