Date: 2026-06-01T23:13:16+00:00

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 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[]);