1 2 #ifndef PETSCMATCOARSEN_H 3 #define PETSCMATCOARSEN_H 4 #include <petscmat.h> 5 6 PETSC_EXTERN PetscFunctionList MatCoarsenList; 7 8 /*S 9 MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix) 10 11 Level: advanced 12 13 Notes: 14 This is used by the PCGAMG to generate coarser representations of an algebraic problem 15 16 .seealso: MatCoarsenCreate(), MatCoarsenType 17 S*/ 18 typedef struct _p_MatCoarsen* MatCoarsen; 19 20 /*J 21 MatCoarsenType - String with the name of a PETSc matrix coarsen algorithm 22 23 Level: beginner 24 25 .seealso: MatCoarsenCreate(), MatCoarsen 26 J*/ 27 typedef const char* MatCoarsenType; 28 #define MATCOARSENMIS "mis" 29 #define MATCOARSENHEM "hem" 30 31 /* linked list for aggregates */ 32 typedef struct _PetscCDIntNd{ 33 struct _PetscCDIntNd *next; 34 PetscInt gid; 35 }PetscCDIntNd; 36 37 /* only used by node pool */ 38 typedef struct _PetscCDArrNd{ 39 struct _PetscCDArrNd *next; 40 struct _PetscCDIntNd *array; 41 }PetscCDArrNd; 42 43 typedef struct _PetscCoarsenData{ 44 PetscCDArrNd pool_list; /* node pool */ 45 PetscCDIntNd *new_node; 46 PetscInt new_left; 47 PetscInt chk_sz; 48 PetscCDIntNd *extra_nodes; 49 PetscCDIntNd **array; /* Array of lists */ 50 PetscInt size; 51 Mat mat; /* cache a Mat for communication data */ 52 }PetscCoarsenData; 53 54 PETSC_EXTERN PetscErrorCode MatCoarsenCreate(MPI_Comm,MatCoarsen*); 55 PETSC_EXTERN PetscErrorCode MatCoarsenSetType(MatCoarsen,MatCoarsenType); 56 PETSC_EXTERN PetscErrorCode MatCoarsenSetAdjacency(MatCoarsen,Mat); 57 PETSC_EXTERN PetscErrorCode MatCoarsenSetGreedyOrdering(MatCoarsen,const IS); 58 PETSC_EXTERN PetscErrorCode MatCoarsenSetStrictAggs(MatCoarsen,PetscBool); 59 PETSC_EXTERN PetscErrorCode MatCoarsenGetData(MatCoarsen, PetscCoarsenData **); 60 PETSC_EXTERN PetscErrorCode MatCoarsenApply(MatCoarsen); 61 PETSC_EXTERN PetscErrorCode MatCoarsenDestroy(MatCoarsen*); 62 PETSC_EXTERN PetscErrorCode MatCoarsenRegister(const char[],PetscErrorCode (*)(MatCoarsen)); 63 PETSC_EXTERN PetscErrorCode MatCoarsenView(MatCoarsen,PetscViewer); 64 PETSC_EXTERN PetscErrorCode MatCoarsenSetFromOptions(MatCoarsen); 65 PETSC_EXTERN PetscErrorCode MatCoarsenGetType(MatCoarsen,MatCoarsenType*); 66 PETSC_EXTERN PetscErrorCode MatCoarsenViewFromOptions(MatCoarsen,PetscObject,const char[]); 67 68 PETSC_EXTERN PetscErrorCode PetscCDCreate(PetscInt,PetscCoarsenData**); 69 PETSC_EXTERN PetscErrorCode PetscCDDestroy(PetscCoarsenData*); 70 PETSC_EXTERN PetscErrorCode PetscCDIntNdSetID(PetscCDIntNd*,PetscInt); 71 PETSC_EXTERN PetscErrorCode PetscCDIntNdGetID(const PetscCDIntNd*,PetscInt*); 72 PETSC_EXTERN PetscErrorCode PetscCDAppendID(PetscCoarsenData*,PetscInt,PetscInt); 73 PETSC_EXTERN PetscErrorCode PetscCDAppendRemove(PetscCoarsenData*,PetscInt,PetscInt); 74 PETSC_EXTERN PetscErrorCode PetscCDAppendNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 75 PETSC_EXTERN PetscErrorCode PetscCDRemoveNextNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 76 PETSC_EXTERN PetscErrorCode PetscCDSizeAt(const PetscCoarsenData*,PetscInt,PetscInt*); 77 PETSC_EXTERN PetscErrorCode PetscCDEmptyAt(const PetscCoarsenData*,PetscInt,PetscBool*); 78 PETSC_EXTERN PetscErrorCode PetscCDSetChuckSize(PetscCoarsenData*,PetscInt); 79 PETSC_EXTERN PetscErrorCode PetscCDPrint(const PetscCoarsenData*,MPI_Comm); 80 PETSC_EXTERN PetscErrorCode PetscCDGetMIS(PetscCoarsenData*,IS*); 81 PETSC_EXTERN PetscErrorCode PetscCDGetMat(const PetscCoarsenData*,Mat*); 82 PETSC_EXTERN PetscErrorCode PetscCDSetMat(PetscCoarsenData*,Mat); 83 84 PETSC_EXTERN PetscErrorCode PetscCDGetHeadPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 85 PETSC_EXTERN PetscErrorCode PetscCDGetNextPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 86 PETSC_EXTERN PetscErrorCode PetscCDGetASMBlocks(const PetscCoarsenData*,const PetscInt,Mat,PetscInt*,IS**); 87 88 #endif 89