xref: /petsc/include/petscmatcoarsen.h (revision b22c9ba6aee6fe2ce9d3bf33ab3015abcf1a3d5c)
1a4963045SJacob Faibussowitsch #pragma once
2ac09b921SBarry Smith 
3484f0a72SBarry Smith #include <petscmat.h>
4484f0a72SBarry Smith 
5ac09b921SBarry Smith /* SUBMANSEC = Mat */
6ac09b921SBarry Smith 
7484f0a72SBarry Smith PETSC_EXTERN PetscFunctionList MatCoarsenList;
8484f0a72SBarry Smith 
9484f0a72SBarry Smith /*S
10484f0a72SBarry Smith   MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix)
11484f0a72SBarry Smith 
12484f0a72SBarry Smith   Level: advanced
13484f0a72SBarry Smith 
142ef1f0ffSBarry Smith   Note:
1587497f52SBarry Smith   This is used by the `PCGAMG` to generate coarser representations of an algebraic problem
16484f0a72SBarry Smith 
171cc06b55SBarry Smith .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsenType`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
182ef1f0ffSBarry Smith           `MatColoring`, `MatPartitioning`
19484f0a72SBarry Smith S*/
20484f0a72SBarry Smith typedef struct _p_MatCoarsen *MatCoarsen;
21484f0a72SBarry Smith 
22484f0a72SBarry Smith /*J
232ef1f0ffSBarry Smith     MatCoarsenType - String with the name of a PETSc matrix coarsening algorithm
24484f0a72SBarry Smith 
25484f0a72SBarry Smith    Level: beginner
26484f0a72SBarry Smith 
271cc06b55SBarry Smith .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsen`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
28484f0a72SBarry Smith J*/
29484f0a72SBarry Smith typedef const char *MatCoarsenType;
30484f0a72SBarry Smith #define MATCOARSENMIS  "mis"
31484f0a72SBarry Smith #define MATCOARSENHEM  "hem"
32bae903cbSmarkadams4 #define MATCOARSENMISK "misk"
33484f0a72SBarry Smith 
34484f0a72SBarry Smith /* linked list for aggregates */
35484f0a72SBarry Smith typedef struct _PetscCDIntNd {
36484f0a72SBarry Smith   struct _PetscCDIntNd *next;
37484f0a72SBarry Smith   PetscInt              gid;
38484f0a72SBarry Smith } PetscCDIntNd;
39484f0a72SBarry Smith 
40484f0a72SBarry Smith /* only used by node pool */
41484f0a72SBarry Smith typedef struct _PetscCDArrNd {
42484f0a72SBarry Smith   struct _PetscCDArrNd *next;
43484f0a72SBarry Smith   struct _PetscCDIntNd *array;
44484f0a72SBarry Smith } PetscCDArrNd;
45484f0a72SBarry Smith 
46145b44c9SPierre Jolivet /* linked list data structure that encodes aggregates and C-F points with array[idx] == NULL for F point and array of indices in an aggregate or C point (first index is always global index my0 + idx */
47484f0a72SBarry Smith typedef struct _PetscCoarsenData {
48484f0a72SBarry Smith   PetscCDArrNd   pool_list; /* node pool */
49484f0a72SBarry Smith   PetscCDIntNd  *new_node;
50484f0a72SBarry Smith   PetscInt       new_left;
51d5b43468SJose E. Roman   PetscInt       chk_sz; /* chunk size */
52484f0a72SBarry Smith   PetscCDIntNd  *extra_nodes;
53484f0a72SBarry Smith   PetscCDIntNd **array; /* Array of lists */
54bae903cbSmarkadams4   PetscInt       size;  /* size of 'array' */
55484f0a72SBarry Smith   Mat            mat;   /* cache a Mat for communication data */
56484f0a72SBarry Smith } PetscCoarsenData;
57484f0a72SBarry Smith 
58484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenCreate(MPI_Comm, MatCoarsen *);
59484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenSetType(MatCoarsen, MatCoarsenType);
60484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenSetAdjacency(MatCoarsen, Mat);
61484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenSetGreedyOrdering(MatCoarsen, const IS);
62484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenSetStrictAggs(MatCoarsen, PetscBool);
63484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenGetData(MatCoarsen, PetscCoarsenData **);
64484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenApply(MatCoarsen);
65484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenDestroy(MatCoarsen *);
66484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenRegister(const char[], PetscErrorCode (*)(MatCoarsen));
67484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenView(MatCoarsen, PetscViewer);
68484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenSetFromOptions(MatCoarsen);
69484f0a72SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenGetType(MatCoarsen, MatCoarsenType *);
70fe2efc57SMark PETSC_EXTERN PetscErrorCode MatCoarsenViewFromOptions(MatCoarsen, PetscObject, const char[]);
71484f0a72SBarry Smith 
72013e2dc7SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenMISKSetDistance(MatCoarsen, PetscInt);
73013e2dc7SBarry Smith PETSC_EXTERN PetscErrorCode MatCoarsenMISKGetDistance(MatCoarsen, PetscInt *);
745e62d202SMark Adams PETSC_EXTERN PetscErrorCode MatCoarsenSetMaximumIterations(MatCoarsen, PetscInt);
755e62d202SMark Adams PETSC_EXTERN PetscErrorCode MatCoarsenSetThreshold(MatCoarsen, PetscReal);
76*e02fb3cdSMark Adams PETSC_EXTERN PetscErrorCode MatCoarsenSetStrengthIndex(MatCoarsen, PetscInt, PetscInt[]);
77