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