<div class="gmail_quote">On Sat, Feb 5, 2011 at 17:27, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
In my experience using left or right preconditioning doesn&#39;t really matter much, but there are some people who swear that one is better than the other; and different people believe different things.</blockquote></div>
<br><div>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.</div>
<div><br></div><div>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.</div>
<div><br></div><div>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.</div>
<div><br></div><div>My opinion is that you should choose whichever preconditioner side evaluates residuals in the fom that is most meaningful for your discretization.</div><div><br></div><div>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.</div>