[petsc-users] multigrid implementation problem

Jed Brown jedbrown at mcs.anl.gov
Sun Jun 10 17:03:42 CDT 2012


On Sun, Jun 10, 2012 at 4:54 PM, Nakib Haider Protik <nprot048 at uottawa.ca>wrote:

> Sorry, I meant to refer to this:
> http://lists.mcs.anl.gov/pipermail/petsc-users/2011-May/008793.html


As I've said in every message, this rampantly overwrites local variables.

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

This overwrites ksp with the coarse solver.

> >
> >   PCMGGetSmoother(pcmg, 0, &ksp);

This overwrites it again with the level 0 "smoother" (same as the coarse
solver).

> >   PCMGGetSmoother(pcmg, 1, &ksp);

This overwrites it again with the level 1 smoother.

> >   PCMGSetInterpolation(pcmg, 1, M);
> >   PCMGSetRestriction(pcmg, 1, M);
> >
> >   PCMGSetResidual(pcmg, 0, PCMGDefaultResidual, M);
> >   PCMGSetResidual(pcmg, 1, PCMGDefaultResidual, M);

So if you get down here and use "ksp" for something (as your code did),
your are actually working with the level 1 smoother. I also said this in my
first email, explaining why the problem was solved this way (the smoother
was as good as a direct solve). The original KSP has been lost forever and
has leaked its memory.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120610/e05f5b2f/attachment.html>


More information about the petsc-users mailing list