Actual source code: petscmatcoarsen.h
1: #pragma once
3: #include <petscmat.h>
5: /* SUBMANSEC = Mat */
7: PETSC_EXTERN PetscFunctionList MatCoarsenList;
9: /*S
10: MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix)
12: Level: advanced
14: Note:
15: This is used by the `PCGAMG` to generate coarser representations of an algebraic problem
17: .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsenType`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
18: `MatColoring`, `MatPartitioning`
19: S*/
20: typedef struct _p_MatCoarsen *MatCoarsen;
22: /*J
23: MatCoarsenType - String with the name of a PETSc matrix coarsening algorithm
25: Level: beginner
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"
34: /* linked list for aggregates */
35: typedef struct _PetscCDIntNd {
36: struct _PetscCDIntNd *next;
37: PetscInt gid;
38: } PetscCDIntNd;
40: /* only used by node pool */
41: typedef struct _PetscCDArrNd {
42: struct _PetscCDArrNd *next;
43: struct _PetscCDIntNd *array;
44: } PetscCDArrNd;
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;
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[]);
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);
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 **);
93: PETSC_EXTERN PetscErrorCode MatCoarsenMISKSetDistance(MatCoarsen, PetscInt);
94: PETSC_EXTERN PetscErrorCode MatCoarsenMISKGetDistance(MatCoarsen, PetscInt *);