PCFieldSplit and Schur

Jed Brown jed at 59A2.org
Tue Nov 24 11:35:31 CST 2009

On Tue, 24 Nov 2009 17:46:01 +0100, francois pacull <fpacull at fluorem.com> wrote:

> PCFieldSplitGetSubKSP(SubPC,number_of_split,&FieldSplitKSP);

Note that Schur currently only works when number_of_split=2.

I think this is the culprit:

> PCSetType(FieldSplitPC1,PCILU);
Here you are trying to precondition the Schur complement, but ...

> So far I did not turn on the Schur complement preconditioner option: 
> PCFieldSplitSchurPrecondition(subpc,PETSC_FALSE);

There should be a check for this so that you get a better error.  When
not PCFieldSplitSchurPrecondition, we set PCNONE for the Schur

> Is there a book or article describing the methods implemented in this 
> FieldSplit option?

Not really, it implements "physics-based" relaxation
(additive/multiplicative) and factorization (Schur), the former is a
fairly traditional idea, for the latter you generally have to look at
references for your application area.  We might be able to refer you to
specific references if you explain the physics you are working with.

There are two classes of problems for which the factorization option is
to be preferred (because usually nothing else works):

* indefinite systems such as incompressible flow or LNK optimization

* stiff wave problems like shallow water, low-Mach gas dynamics, MHD

A while ago, I started extending PCFieldSplit to do hybrid factorization
and relaxation with no restriction on the number of splits, and with the
appropriate hooks to get preconditioners in all the places you might
want them.  Sadly, I have not yet gotten it cleaned up enough to push to
PETSc-dev, but it is still on my to do list.


More information about the petsc-users mailing list