1: #define PETSCKSP_DLL 3: /* 4: Additive Multigrid V Cycle routine 5: */ 6: #include src/ksp/pc/impls/mg/mgimpl.h 10: PetscErrorCode PCMGACycle_Private(PC_MG **mg) 11: { 13: PetscInt i,l = mg[0]->levels; 16: /* compute RHS on each level */ 17: for (i=l-1; i>0; i--) { 18: MatRestrict(mg[i]->restrct,mg[i]->b,mg[i-1]->b); 19: } 20: /* solve separately on each level */ 21: for (i=0; i<l; i++) { 22: VecSet(mg[i]->x,0.0); 24: KSPSolve(mg[i]->smoothd,mg[i]->b,mg[i]->x); 26: } 27: for (i=1; i<l; i++) { 28: MatInterpolateAdd(mg[i]->interpolate,mg[i-1]->x,mg[i]->x,mg[i]->x); 29: } 30: return(0); 31: }