# [petsc-users] Nullspaces for schur complement PCs

Barry Smith bsmith at mcs.anl.gov
Wed Nov 12 19:35:30 CST 2014

```  I agree with what Jed says.

One could argue that if the matrix was represented as a MatNest, the null space of the Schur complement is a property of the MatNest object and hence could/should be something that is attached to the matrix. Now if the Mat happens not to be a MatNest, the null space of the Schur complement is still a property of the Mat (and the index sets that define the part you are Schur complementing on), so again the null space could be attached to matrix (plus the index sets of the parts you are Schur complementing on).

Perhaps we need a generic way of attaching null spaces to parts of matrices and to parts of matrices in different basis (which is what a Schur complement is). So (and this is likely overly simplistic) one could supply a null space, an index set, and a flag indicating either "part of the matrix" or the "Schur complement of the matrix with respect to an index set".  These provided null spaces could then be used by the preconditioners (like Fieldsplit) that manipulate parts of the matrix or Schur complement.

Barry

> On Nov 12, 2014, at 7:12 PM, Jed Brown <jed at jedbrown.org> wrote:
>
> Lawrence Mitchell <lawrence.mitchell at imperial.ac.uk> writes:
>> So is the problem that the nullspace belongs to the appropriate
>> operator, but at the point you tell the solver, you don't necessarily
>> have all the operators to hand?  Moreover, depending on the PC choice,
>> the nullspaces of the operator blocks may or may not be relevant?
>
> Given the system [A B; C D], the null space of D has nothing to do with
> the null space of S = D - C A^{-1} B.  In some important cases, D is the
> zero matrix, for example.  Using MatSetNullSpace to set a null space on
> D (even if you have it in hand) is lying and may cause the wrong thing
> to happen if you use a different solver configuration (e.g., a
> relaxation split).
>
> Attaching a null space to an IS is damn perverse because an index set is
> a bag of integers and you're labeling it with information about a Mat
> that is the result of some other algorithm using lots more information
> than just the IS (and done in a non-unique way).

```