Actual source code: petscfunc.h

  1: #ifndef PETSCFUNC_H
  2: #define PETSCFUNC_H

 4:  #include petscksp.h

  6: /*..Low level timing routine..*/

  9: /*..KSP monitoring routines..*/
 10: EXTERN PetscErrorCode KSPMonitorWriteConvHist(KSP ksp,int n,double rnorm,void* ctx);
 11: EXTERN PetscErrorCode KSPMonitorAmg(KSP ksp,int n,double rnorm,void* ctx);
 12: EXTERN PetscErrorCode KSPMonitorWriteResVecs(KSP ksp,int n,double rnorm,void* ctx);

 14: /*..KSP convergence criteria routines..*/
 15: typedef struct{
 16:     double BNRM2;
 17:     int    NUMNODES;
 18: }CONVHIST;

 20: EXTERN PetscErrorCode ConvhistCtxCreate(CONVHIST **convhist);
 21: EXTERN PetscErrorCode ConvhistCtxDestroy(CONVHIST *convhist);
 22: EXTERN PetscErrorCode MyConvTest(KSP ksp,int n, double rnorm, KSPConvergedReason *reason, 
 23:                       void* ctx);

 25: /*..Functions defined for block preconditioners..*/
 26: EXTERN PetscErrorCode ReorderSubmatrices(PC pc,int nsub,IS *row,IS *col,
 27:                               Mat *submat,void *dummy);
 28: EXTERN PetscErrorCode PrintSubMatrices(PC pc,int nsub,IS *row,IS *col,
 29:                             Mat *submat,void *dummy);
 30: EXTERN PetscErrorCode ViewSubMatrices(PC pc,int nsub,IS *row,IS *col,
 31:                            Mat *submat,void *dummy);
 32: EXTERN PetscErrorCode SamgShellPCSetUpOnFem(PC pc,int nsub,IS *row,IS *col,
 33:                                  Mat *submat,void *ctx);
 34: EXTERN PetscErrorCode KSPMonitorWriteConvHistOnFem(KSP ksp,int n,double rnorm,void* ctx);

 36: /*..Viewing and printing matrices and vectors..*/
 37: EXTERN PetscErrorCode MyMatView(Mat mat,void *dummy);
 38: EXTERN PetscErrorCode PrintMatrix(Mat mat, char* path, char* base);
 39: EXTERN PetscErrorCode PrintVector(Vec vec, char* path, char* base);
 40: EXTERN PetscErrorCode PrintMatrixBinary(Mat mat, char* path, char* base);
 41: EXTERN PetscErrorCode PrintVectorBinary(Vec vec, char* path, char* base);

 43: /*..From the MatCreateFcts collection..*/
 44: EXTERN PetscErrorCode MatMatMult(Mat Fact1, Mat Fact2, Mat* Prod);
 45: EXTERN PetscErrorCode MatSubstract(Mat Term1, Mat Term2, Mat* Diff);

 47: /*..Structure used in the interface to RAMG..*/
 48: typedef struct{
 49:     double            *A;
 50:     int               *IA;
 51:     int               *JA;
 52:     double            *U_APPROX;
 53:     double            *RHS;
 54:     int               *IG;
 55:     struct RAMG_PARAM *PARAM;
 56: } RamgShellPC;

 58: /*..interface to RAMG..*/
 59: EXTERN PetscErrorCode RamgShellPCCreate(RamgShellPC **shell);
 60: EXTERN PetscErrorCode RamgShellPCSetUp(RamgShellPC *shell, Mat pmat);
 61: EXTERN PetscErrorCode RamgShellPCApply(void *ctx, Vec r, Vec z);
 62: EXTERN PetscErrorCode RamgShellPCDestroy(RamgShellPC *shell);
 63: EXTERN PetscErrorCode RamgGetParam(RAMG_PARAM *ramg_param);

 65: /*..Structure used in the interface to SAMG..*/
 66: typedef struct{
 67:     double *A;
 68:     int    *IA;
 69:     int    *JA;
 70:     struct SAMG_PARAM *PARAM;
 71:     int    LEVELS;           /* Number of levels created */
 72: } SamgShellPC;

 74: /*..Interface to SAMG..*/
 75: EXTERN PetscErrorCode SamgShellPCCreate(SamgShellPC **shell);
 76: EXTERN PetscErrorCode SamgShellPCSetUp(SamgShellPC *shell, Mat pmat);
 77: EXTERN PetscErrorCode SamgShellPCApply(void *ctx, Vec r, Vec z);
 78: EXTERN PetscErrorCode SamgShellPCDestroy(SamgShellPC *shell);
 79: EXTERN PetscErrorCode SamgGetParam(SAMG_PARAM *samg_param);

 81: /*..Multigrid structure for PETSc..*/

 83: /*....Maximum number of levels to be used in SAMG....*/
 84: #define MAX_LEVELS 25 

 86: typedef struct{
 87:   /*..Implementation notes
 88:     1 - The menber A is not stored on level 1 (the finest level in SAMG 
 89:         ordering) to avoid unnecessary memory useage. 
 90:   */
 91:   KSP ksp_pre;
 92:   KSP ksp_post;
 93:   Mat  A, B, C;
 94:   Mat  Interp;
 95:   Vec  x, b, upd_b, r, y, b_y, r_y;
 96:   int  size; /*..Number of variables on level..*/
 97:   //  int  debug;
 98: } GridCtx;

100: /*..Level 2 routine to get coarser level matrices..*/
101: EXTERN PetscErrorCode SamgGetCoarseMat(int level, int ia_shift, int ja_shift, 
102:                             Mat* coarsemat, void* ctx);
103: /*..Level 2 routine to get interpolation operators..*/
104: EXTERN PetscErrorCode SamgGetInterpolation(int level, int iw_shift, int jw_shift,
105:                                 Mat* interpolation, void* ctx) ;

107: /*..Parse SAMG hierarchy to PETSc..*/
108: EXTERN PetscErrorCode SamgGetGrid(int levels, int numnodes, int numnonzero, 
109:                        GridCtx* grid, void* ctx);
110: /*..Check parsing..*/
111: EXTERN PetscErrorCode SamgCheckGalerkin(int levels, Mat A, GridCtx* grid, 
112:                       void* ctx);

114: #endif//PETSCFUNC_H