xref: /petsc/include/petscmatcoarsen.h (revision b22c9ba6aee6fe2ce9d3bf33ab3015abcf1a3d5c)
1 #pragma once
2 
3 #include <petscmat.h>
4 
5 /* SUBMANSEC = Mat */
6 
7 PETSC_EXTERN PetscFunctionList MatCoarsenList;
8 
9 /*S
10   MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix)
11 
12   Level: advanced
13 
14   Note:
15   This is used by the `PCGAMG` to generate coarser representations of an algebraic problem
16 
17 .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsenType`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
18           `MatColoring`, `MatPartitioning`
19 S*/
20 typedef struct _p_MatCoarsen *MatCoarsen;
21 
22 /*J
23     MatCoarsenType - String with the name of a PETSc matrix coarsening algorithm
24 
25    Level: beginner
26 
27 .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsen`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
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 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 */
47 typedef struct _PetscCoarsenData {
48   PetscCDArrNd   pool_list; /* node pool */
49   PetscCDIntNd  *new_node;
50   PetscInt       new_left;
51   PetscInt       chk_sz; /* chunk 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 MatCoarsenMISKSetDistance(MatCoarsen, PetscInt);
73 PETSC_EXTERN PetscErrorCode MatCoarsenMISKGetDistance(MatCoarsen, PetscInt *);
74 PETSC_EXTERN PetscErrorCode MatCoarsenSetMaximumIterations(MatCoarsen, PetscInt);
75 PETSC_EXTERN PetscErrorCode MatCoarsenSetThreshold(MatCoarsen, PetscReal);
76 PETSC_EXTERN PetscErrorCode MatCoarsenSetStrengthIndex(MatCoarsen, PetscInt, PetscInt[]);
77