[petsc-users] MG on fieldsplit

gouarin loic.gouarin at math.u-psud.fr
Wed Feb 1 04:47:01 CST 2012


Hi,

I sent some email on Stokes solver using DMComposite grid (one for the 
velocity and an other one for the pressure).

Now, I try to use PCMG to precondition the velocity part with fieldsplit 
and PETSc command line options only.

This is an example of my options:

./test -stokes_ksp_type fgmres
          -stokes_pc_type fieldsplit
          -stokes_fieldsplit_0_ksp_type preonly
          -stokes_fieldsplit_0_pc_type mg
          -stokes_fieldsplit_0_pc_mg_levels 2
          -stokes_fieldsplit_0_pc_mg_galerkin
         ...
          -stokes_fieldsplit_1_ksp_type preonly
          -stokes_fieldsplit_1_pc_type jacobi

It doesn't work because we need to call PCFieldSplitGetSubKSP to get the 
subpc[0] to create the interpolation matrices.  So, we have to call 
KSPSetUp before PCFieldSplitGetSubKSP. But, if we call KSPSetUp, we have 
an error because the interpolation matrices are not created !

But If I do:

------
PCSetDM(pc, dom->get_pack());
PCSetType(pc, PCFIELDSPLIT);
KSPSetUp(solver);
PCFieldSplitGetSubKSP(pc, &nsplits, &subksp);
PetscMalloc(sizeof(PC)*nsplits, &subpc);

KSPSetType(subksp[0], KSPPREONLY);
KSPGetPC(subksp[0], &subpc[0]);
PCSetType(subpc[0], PCMG);

create the interpolation matrices

KSPSetFromOptions(solver);
------

It works but we can't set the mg_levels with the command line options 
anymore. Moreover, I have some warning of this type:

Option left: name:-stokes_fieldsplit_0_pc_mg_multiplicative_cycles value: 3

Is there a way to do that only with the command line option ?

Thanks,
Loic

-- 
Loic Gouarin
Laboratoire de Mathématiques
Université Paris-Sud
Bâtiment 425
91405 Orsay Cedex
France
Tel: (+33) 1 69 15 60 14
Fax: (+33) 1 69 15 67 18



More information about the petsc-users mailing list