Class implementing a modified version of Fischer's first algorithm from the 1998 manuscript "Projection techniques for iterative solution of A x = b with
successive right-hand sides".
In essence, the caller submits pairs of solution and corresponding RHS vectors from solving the same matrix equation several times (i.e., at different time steps). This class uses those pairs to compute an estimated solution vector for a new RHS. In practice, this estimate is a good enough that it cuts the number of required solver iterations by about 50%, while computing the initial guess is relatively inexpensive.
The algorithm used below varies from the one Fischer proposed in a few major ways:
-
The RHS vectors are not orthogonalized. Instead, the least-squares equation is solved with the SVD, which enables the projection matrix to be singular (or nearly so).
-
Since this class does not orthogonalize, it can compute the projection matrix incrementally. This means (unlike the PETSc implementation) we can always use the full set of available vectors to compute a guess.
-
The projection is done with the standard $R^n$ inner product, which may not be optimal, but is much faster than doing sparse matrix-vector multiplications.
Since the systems we solve typically require low iteration counts, these tricks to get a less optimal guess at a lower cost are beneficial.