[petsc-users] PC Shell Left, Right, Symm?

Jed Brown jed at 59A2.org
Sat Feb 5 16:45:57 CST 2011

On Sat, Feb 5, 2011 at 17:27, Barry Smith <bsmith at mcs.anl.gov> wrote:

> In my experience using left or right preconditioning doesn't really matter
> much, but there are some people who swear that one is better than the other;
> and different people believe different things.

The important difference is whether the residuals are preconditioned or not,
it is rarely in the speed of convergence (in my experience as well, but see
note below). Left preconditioning causes the residuals to remove poor
scaling such as penalty boundary conditions before the first residual is
calculated. Right preconditioning shows you the unpreconditioned residuals.

If you do a convergence test with unpreconditioned residuals (right
preconditioning) and penalty boundary conditions, you might need a relative
tolerance of 1e-12 on the first solve since the initial iterate does not
satisfy boundary conditions, but then you might do a subsequent solve with
an initial iterate that satisfies the boundary conditions, in which case you
only need a relative tolerance of 1e-5 (or whatever tolerance you want in
the interior). This is awkward, so left preconditioning (working with
preconditioned residuals) makes sense with penalty boundary conditions.

If instead you do a convergence test with preconditioned residuals (left
preconditioning), but the preconditioner is singular (e.g. if you apply
BoomerAMG directly to a mixed-FEM discretization of incompressible
Navier-Stokes), it may erroneously appear to converge despite being nowhere
near converged. In this case, right preconditioning makes sense because
stagnation due to a singular preconditioner is clear.

My opinion is that you should choose whichever preconditioner side evaluates
residuals in the fom that is most meaningful for your discretization.

Note: if you solve the block system J = [A B; C D] using the exact
preconditioner P1 = [A B; 0 S] where S = D-C*inv(A)*B, then right
preconditioned GMRES converges in 2 iterations while left preconditioning is
not guaranteed to converge in any small number of iterations (though it may
still in practice). If instead you use P2=[A 0;C S], then
left-preconditioned GMRES converges in 2 while right-preconditioning does
not guarantee a low iteration count.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110205/8f9f19a4/attachment.htm>

More information about the petsc-users mailing list