[petsc-users] Creating PCFieldSplit Preconditioner in source code

Matthew Knepley knepley at gmail.com
Mon Nov 19 07:57:34 CST 2012

On Mon, Nov 19, 2012 at 8:48 AM, Thomas Witkowski
<thomas.witkowski at tu-dresden.de> wrote:
> Am 19.11.2012 14:45, schrieb Barry Smith:
>> 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.
>>     Barry
> Just the KSPSetUp takes 4 to 5 seconds, for no computation at all. I don't
> think, this is negligible. It destroys my parallel scaling of initializing
> the solver.

You are wrong. Read my latest reply.


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

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-users mailing list