Interfaces for Schur complements and FieldSplit

Jed Brown jed at
Wed May 20 15:47:15 CDT 2009

Do you have a preferred interface for specifying a preconditioning
matrix for A in Mat_SchurComplement and for the Schur complement in
PC_FieldSplit?  This is of course possible by retrieving the appropriate
KSP and setting the operators by hand, but since this is (I think!) the
usual case, there should be an interface.  To be clear, in my own
half-assed implementation of this stuff, I never call KSPSetOperators
with the same operator as preconditioning matrix, so transitioning to
PC_FieldSplit is looking awkward.

Preconditioning the Schur complement with pmat[1] is not really what we
want.  In most cases I can think of, the user will have to provide the
preconditioning matrix, and frequently a PC_Shell.

It looks like I must implement MatGetSubMatrix for my matrix-free
operators.  This is of course only possible for very special IS.  Is
there any chance of a higher-level description of the submatrix?  (I'm
not sure ther is a better way, but as is, both PC_FieldSplit and my
Mat_Shell already need to have duplicate representations of the
submatrices but we'll be talking by complementing each IS.)

Do you have an interface in mind for specifying reduced forms for block
preconditioners?  For example, Galerkin discretization of incompressible
flow gives

J = [A  B']
    [B  0 ]

The reduced forms

[A    ]   or    [A  B']
[B   S]         [   S ]        

are appropriate for left- and right-preconditioned GMRES respectively
(the preconditioned operator has minimal degree 2 and all unit
eigenvalues).  Also,

[A    ]
[    S]

is popular for symmetric problems.

Will I at some point be able to specify a combination of split and Schur
complement?  For instance, suppose I had a Jacobian like

[A  B'         ]
[B     C       ]
[D  E  F  G    ]
[   H     I    ]
[K        L  M ]

and wanted to do a multiplicative split except that the indefinite block
needs the Schur complement version.  Everything in sight would be
matrix-free, but I would also be providing assembled preconditioning
matrices for A,F,I,M, and a shell preconditioner for S = -BA^{-1}B^t
(which involves an auxiliary discretization).  (Sure, I'm most likely to
be using ksp_type preonly for all the diagonal blocks, but I think it's
better to get both matrices to the relevant KSP.)

This isn't urgent, but I'd like to start a discussion about how to
handle cases like this.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 260 bytes
Desc: OpenPGP digital signature
URL: <>

More information about the petsc-dev mailing list