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 Concepts: coarsen 17 18 .seealso: MatCoarsenCreate(), MatCoarsenType 19 S*/ 20 typedef struct _p_MatCoarsen* MatCoarsen; 21 22 /*J 23 MatCoarsenType - String with the name of a PETSc matrix coarsen algorithm 24 25 Level: beginner 26 27 .seealso: MatCoarsenCreate(), MatCoarsen 28 J*/ 29 typedef const char* MatCoarsenType; 30 #define MATCOARSENMIS "mis" 31 #define MATCOARSENHEM "hem" 32 33 /* linked list for aggregates */ 34 typedef struct _PetscCDIntNd{ 35 struct _PetscCDIntNd *next; 36 PetscInt gid; 37 }PetscCDIntNd; 38 39 /* only used by node pool */ 40 typedef struct _PetscCDArrNd{ 41 struct _PetscCDArrNd *next; 42 struct _PetscCDIntNd *array; 43 }PetscCDArrNd; 44 45 typedef struct _PetscCoarsenData{ 46 PetscCDArrNd pool_list; /* node pool */ 47 PetscCDIntNd *new_node; 48 PetscInt new_left; 49 PetscInt chk_sz; 50 PetscCDIntNd *extra_nodes; 51 PetscCDIntNd **array; /* Array of lists */ 52 PetscInt size; 53 Mat mat; /* cache a Mat for communication data */ 54 }PetscCoarsenData; 55 56 PETSC_EXTERN PetscErrorCode MatCoarsenCreate(MPI_Comm,MatCoarsen*); 57 PETSC_EXTERN PetscErrorCode MatCoarsenSetType(MatCoarsen,MatCoarsenType); 58 PETSC_EXTERN PetscErrorCode MatCoarsenSetAdjacency(MatCoarsen,Mat); 59 PETSC_EXTERN PetscErrorCode MatCoarsenSetGreedyOrdering(MatCoarsen,const IS); 60 PETSC_EXTERN PetscErrorCode MatCoarsenSetStrictAggs(MatCoarsen,PetscBool); 61 PETSC_EXTERN PetscErrorCode MatCoarsenGetData( MatCoarsen, PetscCoarsenData ** ); 62 PETSC_EXTERN PetscErrorCode MatCoarsenApply(MatCoarsen); 63 PETSC_EXTERN PetscErrorCode MatCoarsenDestroy(MatCoarsen*); 64 PETSC_EXTERN PetscErrorCode MatCoarsenRegister(const char[],PetscErrorCode (*)(MatCoarsen)); 65 PETSC_EXTERN PetscErrorCode MatCoarsenView(MatCoarsen,PetscViewer); 66 PETSC_EXTERN PetscErrorCode MatCoarsenSetFromOptions(MatCoarsen); 67 PETSC_EXTERN PetscErrorCode MatCoarsenGetType(MatCoarsen,MatCoarsenType*); 68 PETSC_STATIC_INLINE PetscErrorCode MatCoarsenViewFromOptions(MatCoarsen A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);} 69 70 PETSC_EXTERN PetscErrorCode PetscCDCreate(PetscInt,PetscCoarsenData**); 71 PETSC_EXTERN PetscErrorCode PetscCDDestroy(PetscCoarsenData*); 72 PETSC_EXTERN PetscErrorCode PetscCDIntNdSetID(PetscCDIntNd*,PetscInt); 73 PETSC_EXTERN PetscErrorCode PetscCDIntNdGetID(const PetscCDIntNd*,PetscInt*); 74 PETSC_EXTERN PetscErrorCode PetscCDAppendID(PetscCoarsenData*,PetscInt,PetscInt); 75 PETSC_EXTERN PetscErrorCode PetscCDAppendRemove(PetscCoarsenData*,PetscInt,PetscInt); 76 PETSC_EXTERN PetscErrorCode PetscCDAppendNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 77 PETSC_EXTERN PetscErrorCode PetscCDRemoveNextNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 78 PETSC_EXTERN PetscErrorCode PetscCDRemoveAllAt(PetscCoarsenData*,PetscInt); 79 PETSC_EXTERN PetscErrorCode PetscCDSizeAt(const PetscCoarsenData*,PetscInt,PetscInt*); 80 PETSC_EXTERN PetscErrorCode PetscCDEmptyAt(const PetscCoarsenData*,PetscInt,PetscBool*); 81 PETSC_EXTERN PetscErrorCode PetscCDSetChuckSize(PetscCoarsenData*,PetscInt); 82 PETSC_EXTERN PetscErrorCode PetscCDPrint(const PetscCoarsenData*,MPI_Comm); 83 PETSC_EXTERN PetscErrorCode PetscCDGetMIS(PetscCoarsenData*,IS*); 84 PETSC_EXTERN PetscErrorCode PetscCDGetMat(const PetscCoarsenData*,Mat*); 85 PETSC_EXTERN PetscErrorCode PetscCDSetMat(PetscCoarsenData*,Mat); 86 87 PETSC_EXTERN PetscErrorCode PetscCDGetHeadPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 88 PETSC_EXTERN PetscErrorCode PetscCDGetNextPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 89 PETSC_EXTERN PetscErrorCode PetscCDGetASMBlocks(const PetscCoarsenData*,const PetscInt,Mat,PetscInt*,IS**); 90 91 92 #endif 93