xref: /petsc/include/petscmatcoarsen.h (revision 7d5fd1e4d9337468ad3f05b65b7facdcd2dfd2a4)
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