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