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