On Mon, Aug 19, 2013 at 7:40 AM, Jed Brown <[email protected]> wrote:
> "Garth N. Wells" <[email protected]> writes: > > > I'm using PCFIELDSPLIT for a mixed problem, with fields indicated via > > an index set (using PCFieldSplitSetIS). I'd like to attach an > > approximate null space to the A00 block of the system. Is there a way > > to attach the null space to one block? > There is a better way. You can attach the null space to the IS that forms the split PetscObjectAttach((PetscObject) is0, "nullspace", nullspace); and PCFIELDSPLIT will pull it out and attach it to the preconditioner for block 0. Matt > With MatNest, you can use MatSetNearNullSpace on sub-blocks and it will > be used automatically. This is also the low-memory way to use > PCFieldSplit. Note that if you use MatSetValuesLocal, you can use the > NEST format with identical code in assembly; only matrix creation is > different, see src/snes/example/tutorials/ex28.c for an example that > works with both AIJ and NEST formats. > > Otherwise, you should be able to PCSetUp, then get out the sub-solvers > PCFieldSplitGetSubKSP, pull out their matrices, and call > MatSetNearNullSpace. Those submatrices should not be overwritten as > long as you use SAME_NONZERO_PATTERN, so the null space would still work > in future iterations. > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
