On Tue, Apr 5, 2011 at 8:38 AM, Thomas Witkowski <thomas.witkowski@tu-dresden.de> wrote:
Matthew Knepley wrote:

On Tue, Apr 5, 2011 at 4:28 AM, Thomas Witkowski <thomas.witkowski@tu-dresden.de <mailto:thomas.witkowski@tu-dresden.de>> wrote:

   Jed Brown wrote:

       On Tue, Mar 29, 2011 at 15:29, Thomas Witkowski
       <thomas.witkowski@tu-dresden.de
       <mailto:thomas.witkowski@tu-dresden.de>
       <mailto:thomas.witkowski@tu-dresden.de
       <mailto:thomas.witkowski@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.

Then there is no choice but to use the debugger to see what is going on.

   Matt
 

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




--
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