1 #ifndef PETSCMATCOARSEN_H 2 #define PETSCMATCOARSEN_H 3 4 #include <petscmat.h> 5 6 /* SUBMANSEC = Mat */ 7 8 PETSC_EXTERN PetscFunctionList MatCoarsenList; 9 10 /*S 11 MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix) 12 13 Level: advanced 14 15 Notes: 16 This is used by the PCGAMG to generate coarser representations of an algebraic problem 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 #define MATCOARSENMISK "misk" 33 34 /* linked list for aggregates */ 35 typedef struct _PetscCDIntNd{ 36 struct _PetscCDIntNd *next; 37 PetscInt gid; 38 }PetscCDIntNd; 39 40 /* only used by node pool */ 41 typedef struct _PetscCDArrNd{ 42 struct _PetscCDArrNd *next; 43 struct _PetscCDIntNd *array; 44 }PetscCDArrNd; 45 46 /* linked list data structure that encodes aggragates and C-F points with array[idx] == NULL for F point and array of indices in an aggrate or C point (first index is always global index my0 + idx */ 47 typedef struct _PetscCoarsenData{ 48 PetscCDArrNd pool_list; /* node pool */ 49 PetscCDIntNd *new_node; 50 PetscInt new_left; 51 PetscInt chk_sz; /* chunck size */ 52 PetscCDIntNd *extra_nodes; 53 PetscCDIntNd **array; /* Array of lists */ 54 PetscInt size; /* size of 'array' */ 55 Mat mat; /* cache a Mat for communication data */ 56 }PetscCoarsenData; 57 58 PETSC_EXTERN PetscErrorCode MatCoarsenCreate(MPI_Comm,MatCoarsen*); 59 PETSC_EXTERN PetscErrorCode MatCoarsenSetType(MatCoarsen,MatCoarsenType); 60 PETSC_EXTERN PetscErrorCode MatCoarsenSetAdjacency(MatCoarsen,Mat); 61 PETSC_EXTERN PetscErrorCode MatCoarsenSetGreedyOrdering(MatCoarsen,const IS); 62 PETSC_EXTERN PetscErrorCode MatCoarsenSetStrictAggs(MatCoarsen,PetscBool); 63 PETSC_EXTERN PetscErrorCode MatCoarsenGetData(MatCoarsen, PetscCoarsenData **); 64 PETSC_EXTERN PetscErrorCode MatCoarsenApply(MatCoarsen); 65 PETSC_EXTERN PetscErrorCode MatCoarsenDestroy(MatCoarsen*); 66 PETSC_EXTERN PetscErrorCode MatCoarsenRegister(const char[],PetscErrorCode (*)(MatCoarsen)); 67 PETSC_EXTERN PetscErrorCode MatCoarsenView(MatCoarsen,PetscViewer); 68 PETSC_EXTERN PetscErrorCode MatCoarsenSetFromOptions(MatCoarsen); 69 PETSC_EXTERN PetscErrorCode MatCoarsenGetType(MatCoarsen,MatCoarsenType*); 70 PETSC_EXTERN PetscErrorCode MatCoarsenViewFromOptions(MatCoarsen,PetscObject,const char[]); 71 72 PETSC_EXTERN PetscErrorCode PetscCDCreate(PetscInt,PetscCoarsenData**); 73 PETSC_EXTERN PetscErrorCode PetscCDDestroy(PetscCoarsenData*); 74 PETSC_EXTERN PetscErrorCode PetscCDIntNdSetID(PetscCDIntNd*,PetscInt); 75 PETSC_EXTERN PetscErrorCode PetscCDIntNdGetID(const PetscCDIntNd*,PetscInt*); 76 PETSC_EXTERN PetscErrorCode PetscCDAppendID(PetscCoarsenData*,PetscInt,PetscInt); 77 PETSC_EXTERN PetscErrorCode PetscCDAppendRemove(PetscCoarsenData*,PetscInt,PetscInt); 78 PETSC_EXTERN PetscErrorCode PetscCDAppendNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 79 PETSC_EXTERN PetscErrorCode PetscCDRemoveNextNode(PetscCoarsenData*,PetscInt,PetscCDIntNd*); 80 PETSC_EXTERN PetscErrorCode PetscCDSizeAt(const PetscCoarsenData*,PetscInt,PetscInt*); 81 PETSC_EXTERN PetscErrorCode PetscCDEmptyAt(const PetscCoarsenData*,PetscInt,PetscBool*); 82 PETSC_EXTERN PetscErrorCode PetscCDSetChuckSize(PetscCoarsenData*,PetscInt); 83 PETSC_EXTERN PetscErrorCode PetscCDPrint(const PetscCoarsenData*,MPI_Comm); 84 PETSC_EXTERN PetscErrorCode PetscCDGetMIS(PetscCoarsenData*,IS*); 85 PETSC_EXTERN PetscErrorCode PetscCDGetMat(PetscCoarsenData*,Mat*); 86 PETSC_EXTERN PetscErrorCode PetscCDSetMat(PetscCoarsenData*,Mat); 87 PETSC_EXTERN PetscErrorCode PetscCDRemoveAll(PetscCoarsenData*, PetscInt); 88 89 PETSC_EXTERN PetscErrorCode PetscCDGetHeadPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 90 PETSC_EXTERN PetscErrorCode PetscCDGetNextPos(const PetscCoarsenData*,PetscInt,PetscCDIntNd**); 91 PETSC_EXTERN PetscErrorCode PetscCDGetASMBlocks(const PetscCoarsenData*,const PetscInt,Mat,PetscInt*,IS**); 92 93 #endif 94