On 19 August 2013 14:03, Matthew Knepley <[email protected]> wrote: > 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. >
I tried this and it didn't seem to work - the solver didn't converge at all. > 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. We're working on support for this. >> 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. >> Is there a reason why MatSetValues can't be used? We rely on PETSc caching and then communicating off-process entries. >> 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. > I'm using the above and it's working great - thanks. Garth > > >
