"Smith, Barry F. via petsc-dev" <[email protected]> writes:
> Some idiot logged what they did, but not why they did it. > > commit bf108f309acab50613e150419c680842cf4b8a05 (HEAD) > Author: Barry Smith <[email protected]> > Date: Thu Mar 18 20:40:53 2004 -0600 > > bk-changeset-1.2063.1.1 > [email protected]|ChangeSet|20040319024053|12244 > ChangeSet > 1.2063.1.1 04/03/18 20:40:53 [email protected] +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.
