Actual source code: petscmg.h

      1: /*
      2:       Structure used for Multigrid preconditioners
      3: */
     6:  #include petscksp.h

      9: /*E
     10:     PCMGType - Determines the type of multigrid method that is run.

     12:    Level: beginner

     14:    Values:
     15: +  PC_MG_MULTIPLICATIVE (default) - traditional V or W cycle as determined by PCMGSetCycles()
     16: .  PC_MG_ADDITIVE - the additive multigrid preconditioner where all levels are
     17:                 smoothed before updating the residual. This only uses the
     18:                 down smoother, in the preconditioner the upper smoother is ignored
     19: .  PC_MG_FULL - same as multiplicative except one also performs grid sequencing,
     20:             that is starts on the coarsest grid, performs a cycle, interpolates
     21:             to the next, performs a cycle etc
     22: -  PC_MG_KASKADE - like full multigrid except one never goes back to a coarser level
     23:                from a finer

     25: .seealso: PCMGSetType()

     27: E*/
     28: typedef enum { PC_MG_MULTIPLICATIVE,PC_MG_ADDITIVE,PC_MG_FULL,PC_MG_KASKADE } PCMGType;
     30: #define PC_MG_CASCADE PC_MG_KASKADE;

     32: /*E
     33:     PCMGCyleType - Use V-cycle or W-cycle

     35:    Level: beginner

     37:    Values:
     38: +  PC_MG_V_CYCLE
     39: -  PC_MG_W_CYCLE

     41: .seealso: PCMGSetCycleType()

     43: E*/
     44: typedef enum { PC_MG_CYCLE_V = 1,PC_MG_CYCLE_W = 2 } PCMGCycleType;

     47: EXTERN PetscErrorCode  PCMGSetType(PC,PCMGType);
     48: EXTERN PetscErrorCode  PCMGSetLevels(PC,PetscInt,MPI_Comm*);
     49: EXTERN PetscErrorCode  PCMGGetLevels(PC,PetscInt*);

     51: EXTERN PetscErrorCode  PCMGSetNumberSmoothUp(PC,PetscInt);
     52: EXTERN PetscErrorCode  PCMGSetNumberSmoothDown(PC,PetscInt);
     53: EXTERN PetscErrorCode  PCMGSetCycleType(PC,PCMGCycleType);
     54: EXTERN PetscErrorCode  PCMGSetCycleTypeOnLevel(PC,PetscInt,PCMGCycleType);
     55: EXTERN PetscErrorCode  PCMGSetCyclesOnLevel(PC,PetscInt,PetscInt);
     56: EXTERN PetscErrorCode  PCMGMultiplicativeSetCycles(PC,PetscInt);
     57: EXTERN PetscErrorCode  PCMGSetGalerkin(PC);
     58: EXTERN PetscErrorCode  PCMGGetGalerkin(PC,PetscTruth*);

     60: EXTERN PetscErrorCode  PCMGGetSmoother(PC,PetscInt,KSP*);
     61: EXTERN PetscErrorCode  PCMGGetSmootherDown(PC,PetscInt,KSP*);
     62: EXTERN PetscErrorCode  PCMGGetSmootherUp(PC,PetscInt,KSP*);
     63: EXTERN PetscErrorCode  PCMGGetCoarseSolve(PC,KSP*);

     66: EXTERN PetscErrorCode  PCMGSetRhs(PC,PetscInt,Vec);
     67: EXTERN PetscErrorCode  PCMGSetX(PC,PetscInt,Vec);
     68: EXTERN PetscErrorCode  PCMGSetR(PC,PetscInt,Vec);

     70: EXTERN PetscErrorCode  PCMGSetRestriction(PC,PetscInt,Mat);
     71: EXTERN PetscErrorCode  PCMGSetInterpolation(PC,PetscInt,Mat);
     72: EXTERN PetscErrorCode  PCMGSetResidual(PC,PetscInt,PetscErrorCode (*)(Mat,Vec,Vec,Vec),Mat);
     73: EXTERN PetscErrorCode  PCMGDefaultResidual(Mat,Vec,Vec,Vec);

     76: #endif