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--) { 19: MatRestrict(mg[i]->restrct,mg[i]->b,mg[i-1]->b); 21: } 22: /* solve separately on each level */ 23: for (i=0; i<l; i++) { 24: VecSet(mg[i]->x,0.0); 26: KSPSolve(mg[i]->smoothd,mg[i]->b,mg[i]->x); 28: } 29: for (i=1; i<l; i++) { 31: MatInterpolateAdd(mg[i]->interpolate,mg[i-1]->x,mg[i]->x,mg[i]->x); 33: } 34: return(0); 35: }