[petsc-dev] Preconditioner for Schur complement (pcfieldsplit)
Thomas Witkowski
thomas.witkowski at tu-dresden.de
Tue Apr 5 08:38:32 CDT 2011
Matthew Knepley wrote:
> On Tue, Apr 5, 2011 at 4:28 AM, Thomas Witkowski
> <thomas.witkowski at tu-dresden.de
> <mailto:thomas.witkowski at tu-dresden.de>> wrote:
>
> Jed Brown wrote:
>
> On Tue, Mar 29, 2011 at 15:29, Thomas Witkowski
> <thomas.witkowski at tu-dresden.de
> <mailto:thomas.witkowski at tu-dresden.de>
> <mailto:thomas.witkowski at tu-dresden.de
> <mailto:thomas.witkowski at tu-dresden.de>>> wrote:
>
> Is there any example which makes use of it?
>
>
> src/snes/examples/tutorials/ex28.c is a (contrived)
> multi-physics prototype that uses MatNest tranparently if you
> run with -pack_dm_mat_type nest (currently, you should add
> -pc_type fieldsplit -pc_fieldsplit_type additive because
> off-diagonal blocks are not automatically preallocated).
>
> There are also two tests that use the low-level API:
>
> $ grep -l MatNest src/**/tests/*.c
> src/ksp/ksp/examples/tests/ex22.c
> src/snes/examples/tests/ex17.c
>
> So, I reimplemented my code to assemble the matrices to a MatNest
> matrix. This seems to work fine. But how to define the
> FieldSplits? I did it in the following way:
>
> KSP solver;
> PC pc;
> KSPCreate(PETSC_COMM_WORLD, &solver);
> KSPGetPC(solver, &pc);
> const PetscInt interiorField[1] = {0};
> const PetscInt boundaryField[1] = {1};
> PCFieldSplitSetFields(pc, "interior", 1, interiorField);
> PCFieldSplitSetFields(pc, "boundary", 1, boundaryField);
>
> When I run my code with the options "-ksp_type preonly -pc_type
> fieldsplit -pc_fieldsplit_type schur", I get the following errors
> in KSPSolve:
>
> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [0]PETSC ERROR: Petsc has generated inconsistent data!
> [0]PETSC ERROR: Unhandled case, must have at least two fields!
>
> Is the creation of the split wrong? If not, what is a good way to
> figure out the problem?
>
>
> This is almost certainly a problem with the setup order. In this code,
> the PC type is not yet set
> so the FieldSplit calls are ignored. When it finally is set, there are
> no fields defined. I would call
> KSPSetFromOptions() before retrieving the PC.
This generates exactly the same error message.
Thomas
>
> Matt
>
>
>
> Thomas
>
>
>
>
> --
> 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
More information about the petsc-dev
mailing list