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

Reply via email to