[petsc-users] multigrid implementation problem
Jed Brown
jedbrown at mcs.anl.gov
Sun Jun 10 15:57:44 CDT 2012
On Sun, Jun 10, 2012 at 3:49 PM, Nakib Haider Protik <nprot048 at uottawa.ca>wrote:
> Thank you very much for the reply. Here's a change that works for the 2D
> case:
>
> ////////////////////MG Solver Stuff////////////////////
> KSPCreate(PETSC_COMM_WORLD, &ksp);
> KSPSetType(ksp, KSPGMRES);
>
> KSPCreate(PETSC_COMM_WORLD, &kspu);
> KSPSetType(kspu, KSPGMRES);
>
Why do you have two KSPs here?
>
> KSPGetPC(ksp, &pc);
> KSPGetPC(kspu, &pc);
>
Why?
>
> PCSetType(pc, PCMG);
> PCMGSetLevels(pc, 2, PETSC_NULL);
> PCMGSetType(pc, PC_MG_MULTIPLICATIVE);
> PCMGSetCycleType(pc, PC_MG_CYCLE_V);
> MatDuplicate(A, MAT_COPY_VALUES, &P);
> PCMGSetCyclesOnLevel(pc, 0, 1);
> PCMGSetCyclesOnLevel(pc, 1, 1);
> PCMGGetCoarseSolve(pc, &ksp);
> PCMGGetSmootherDown(pc, 0, &ksp);
> PCMGGetSmootherUp(pc, 1, &kspu);//(*)//
>
Okay, clearly you need to learn how variables work in C. Here is a free
resource.
http://c.learncodethehardway.org/book/
(Any other resource will also do.) When you are comfortable with the
language, we can revisit your code.
> PCMGSetInterpolation(pc, 1, P);
> PCMGSetRestriction(pc, 1, P);
> PCMGSetResidual(pc, 0, PCMGDefaultResidual, P);
> PCMGSetResidual(pc, 1, PCMGDefaultResidual, P);
> KSPSetOperators(ksp, A, P, SAME_NONZERO_PATTERN);
> KSPSetFromOptions(ksp);
> KSPSolve(ksp, breal, xreal_harm);
> KSPSolve(ksp, bimag, ximag_harm);
> //////////////////////////////////////////////////////////
>
> Do you think this is working again because of some accident? Without the
> step marked with a //(*)//, the code works too.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120610/be76e859/attachment.html>
More information about the petsc-users
mailing list