[petsc-users] Can you provide a basic example of using PCMG for multigrid applications?

Sylvain Barbot sylbar.vainbot at gmail.com
Tue May 17 19:53:35 CDT 2011


Zhisong,

It looks like you're using the same ksp object to define your
solver/preconditioner, the smoother and the coarse-level solver. It
looks like a recursive call to your solver. Perhaps you should use a
different structure for the coarse-level solver:

PCMGGetCoarseSolve(pcmg, &coarseksp);

and define coarseksp entirely for the coarse level. Similarly, you may
need to define a specific ksp for the smoothers on each level.

Cheers,
Sylvain

2011/5/15 Li, Zhisong (lizs) <lizs at mail.uc.edu>:
>  Hi, Petsc Team,
>
> In my knowledge of Petsc, the PCMG object is the main tool for general
> multigrid calculations, as DMMG only works for simple constant matrix and
> RHS.  But it's difficult to find any example code for using PCMG.  I checked
> out the petsc-user mail archive on this topic but still not find a good
> description on it.  I encounter similar errors in the practice as some
> previous question-raisers did.
>
> Here is my simple code implementing the PCMG based on my understanding from
> the user manual and tutorial.  It is supposed to have multigrid of only two
> levels (finest and coarsest grid).  The error message indicates SEGV
> segmentation violation because of this part of code.  Anything wrong with
> this implementation?
>
>
>   DAGetMatrix(da, MATAIJ, &M);
>
>   KSPCreate(PETSC_COMM_WORLD, &ksp);
>   KSPSetType(ksp, KSPGMRES);
>   KSPGetPC(ksp, &pcmg);
>   PCSetType(pcmg, PCMG);
>
>   PCMGSetLevels(pcmg, 2, &PETSC_COMM_WORLD);
>   PCMGSetType(pcmg, PC_MG_MULTIPLICATIVE);
>   PCMGSetCycleType(pcmg, PC_MG_CYCLE_W);
>   PCMGSetCyclesOnLevel(pcmg, 0, 1);
>   PCMGSetCyclesOnLevel(pcmg, 1, 1);
>
>   PCMGGetCoarseSolve(pcmg, &ksp);
>
>   PCMGGetSmoother(pcmg, 0, &ksp);
>   PCMGGetSmoother(pcmg, 1, &ksp);
>   PCMGSetInterpolation(pcmg, 1, M);
>   PCMGSetRestriction(pcmg, 1, M);
>
>   PCMGSetResidual(pcmg, 0, PCMGDefaultResidual, M);
>   PCMGSetResidual(pcmg, 1, PCMGDefaultResidual, M);
>
>
>  The mandatory remaining PCMGSetRhs( ), PCMGSetX( ) and PCMGSetR( )
> functions should be generated by Petsc automatically.
>
> It is tough to learn some Petsc functions when no detailed example and few
> guidance is provided.  I wish you can add some tutorials codes on PCMG usage
> in the future version of Petsc.
>
>
> Thank you very much.
>
>
> Zhisong Li
>
>
>
>


More information about the petsc-users mailing list