Actual source code: petscmg.h

  1: /* $Id: petscmg.h,v 1.21 2001/04/04 21:07:36 bsmith Exp $ */
  2: /*
  3:       Structure used for Multigrid preconditioners 
  4: */
 7:  #include petscksp.h
  8: PETSC_EXTERN_CXX_BEGIN

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

 13:    Level: beginner

 15:    Values:
 16: +  MGMULTIPLICATIVE (default) - traditional V or W cycle as determined by MGSetCycles()
 17: .  MGADDITIVE - the additive multigrid preconditioner where all levels are
 18:                 smoothed before updating the residual
 19: .  MGFULL - 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: -  MGKASKADE - like full multigrid except one never goes back to a coarser level
 23:                from a finer

 25: .seealso: MGSetType()

 27: E*/
 28: typedef enum { MGMULTIPLICATIVE,MGADDITIVE,MGFULL,MGKASKADE } MGType;
 29: #define MGCASCADE MGKASKADE;

 31: #define MG_V_CYCLE     1
 32: #define MG_W_CYCLE     2

 34: EXTERN int MGSetType(PC,MGType);
 35: EXTERN int MGCheck(PC);
 36: EXTERN int MGSetLevels(PC,int,MPI_Comm*);
 37: EXTERN int MGGetLevels(PC,int*);

 39: EXTERN int MGSetNumberSmoothUp(PC,int);
 40: EXTERN int MGSetNumberSmoothDown(PC,int);
 41: EXTERN int MGSetCycles(PC,int);
 42: EXTERN int MGSetCyclesOnLevel(PC,int,int);

 44: EXTERN int MGGetSmoother(PC,int,KSP*);
 45: EXTERN int MGGetSmootherDown(PC,int,KSP*);
 46: EXTERN int MGGetSmootherUp(PC,int,KSP*);
 47: EXTERN int MGGetCoarseSolve(PC,KSP*);

 49: EXTERN int MGSetRhs(PC,int,Vec);
 50: EXTERN int MGSetX(PC,int,Vec);
 51: EXTERN int MGSetR(PC,int,Vec);

 53: EXTERN int MGSetRestriction(PC,int,Mat);
 54: EXTERN int MGSetInterpolate(PC,int,Mat);
 55: EXTERN int MGSetResidual(PC,int,int (*)(Mat,Vec,Vec,Vec),Mat);
 56: EXTERN int MGDefaultResidual(Mat,Vec,Vec,Vec);


 59: PETSC_EXTERN_CXX_END
 60: #endif