[petsc-dev] Right-preconditioned GMRES

Jed Brown jed at jedbrown.org
Wed Nov 6 23:06:41 CST 2019


"Smith, Barry F. via petsc-dev" <petsc-dev at mcs.anl.gov> writes:

>   Some idiot logged what they did, but not why they did it.
>
> commit bf108f309acab50613e150419c680842cf4b8a05 (HEAD)
> Author: Barry Smith <bsmith at mcs.anl.gov>
> Date:   Thu Mar 18 20:40:53 2004 -0600
>
>     bk-changeset-1.2063.1.1
>     barrysmith at barry-smiths-computer.local|ChangeSet|20040319024053|12244
>     ChangeSet
>       1.2063.1.1 04/03/18 20:40:53 barrysmith at barry-smiths-computer.local +5 -0
>       if matrix is symmetric try to use preconditioner options for symmetric matrices
>
>
>    Here is my guess as to this guys reasoning 15 years ago: if the user knows their problem is SPD and they thus switch to CG they will get garbage using the default ASM type, they will be confused and unhappy with the result not realizing that it is due to an inappropriate preconditioner default when using CG. The penalty is, of course, someone using GMRES will get slower convergence than they should as you point out.
>
>    Today I think we could do better. We could introduce the concept of
>    a "symmetric" preconditioner PCIsSymmetric() PCIsSymmetricKnown()
>    and then CG/all KSP that require symmetric preconditioners could
>    query this information and error immediately if the PC indicates it
>    is NOT symmetric. 

There are some methods in the literature where the preconditioner is
nonsymmetric, but the RHS (or preconditioned RHS) is in some benign
space in which the preconditioned operator is actually symmetric.  So
I'd rather not error, but it'd be fine to require explicit instructions
(via options or the API) to use a nonsymmetric PC with CG/MINRES.


More information about the petsc-dev mailing list