[petsc-users] Creating PCFieldSplit Preconditioner in source code

Barry Smith bsmith at mcs.anl.gov
Mon Nov 19 07:45:28 CST 2012

On Nov 19, 2012, at 1:29 AM, Thomas Witkowski <thomas.witkowski at tu-dresden.de> wrote:

> In the implementation of my Navier-Stokes solver, I initialize the PCFieldSplit preconditioner in my source code (thus not on the command line) in the following way:
>    PCSetType(pc, PCFIELDSPLIT);
>    PCFieldSplitSetType(pc, PC_COMPOSITE_SCHUR);
>    PCFieldSplitSetSchurFactType(pc, PC_FIELDSPLIT_SCHUR_FACT_FULL);
>    ...
>    KSPSetUp(ksp);
>    KSP *subKsp;
>    PetscInt nSubKsp;
>    PCFieldSplitGetSubKSP(pc, &nSubKsp, &subKsp);
>    KSP kspVelocity = subKsp[0];
>    KSP kspSchur = subKsp[1];
>    ...
> And then kspVelocity and kspSchur are filled with appropriate options. The point is now, that to get the sub solver objects, I have to run KSPSetUp before. In this case, the sub solver objects are also initialized with some predefined options (block jacobi ILU), which I don't need and what takes some time and memory.

    These are just little stubs, they don't take but a trivial amount of memory and time to create they are not complete solvers so you shouldn't worry about them.


> Is there any other way to get the sub solver objects before and to initialize than the outer solver correctly with the inner solver I have specified?
> Thomas

More information about the petsc-users mailing list