[petsc-dev] Preconditioner for Schur complement (pcfieldsplit)

Matthew Knepley knepley at gmail.com
Tue Apr 5 08:16:16 CDT 2011


On Tue, Apr 5, 2011 at 4:28 AM, Thomas Witkowski <
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>>
>> 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.

   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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20110405/69fcb102/attachment.html>


More information about the petsc-dev mailing list