Actual source code: petscmatcoarsen.h

  1: #ifndef PETSCMATCOARSEN_H
  2: #define PETSCMATCOARSEN_H

  4: #include <petscmat.h>

  6: /* SUBMANSEC = Mat */

  8: PETSC_EXTERN PetscFunctionList MatCoarsenList;

 10: /*S
 11:      MatCoarsen - Object for managing the coarsening of a graph (symmetric matrix)

 13:    Level: advanced

 15:   Note:
 16:     This is used by the `PCGAMG` to generate coarser representations of an algebraic problem

 18: .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsenType`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
 19:           `MatColoring`, `MatPartitioning`
 20: S*/
 21: typedef struct _p_MatCoarsen *MatCoarsen;

 23: /*J
 24:     MatCoarsenType - String with the name of a PETSc matrix coarsening algorithm

 26:    Level: beginner

 28: .seealso: [](ch_matrices), [](sec_graph), `Mat`, `MatCoarsenCreate()`, `MatCoarsen`, `MatColoringType`, `MatPartitioningType`, `MatOrderingType`
 29: J*/
 30: typedef const char *MatCoarsenType;
 31: #define MATCOARSENMIS  "mis"
 32: #define MATCOARSENHEM  "hem"
 33: #define MATCOARSENMISK "misk"

 35: /* linked list for aggregates */
 36: typedef struct _PetscCDIntNd {
 37:   struct _PetscCDIntNd *next;
 38:   PetscInt              gid;
 39: } PetscCDIntNd;

 41: /* only used by node pool */
 42: typedef struct _PetscCDArrNd {
 43:   struct _PetscCDArrNd *next;
 44:   struct _PetscCDIntNd *array;
 45: } PetscCDArrNd;

 47: /* linked list data structure that encodes aggragates and C-F points with array[idx] == NULL for F point and array of indices in an aggrate or C point (first index is always global index my0 + idx */
 48: typedef struct _PetscCoarsenData {
 49:   PetscCDArrNd   pool_list; /* node pool */
 50:   PetscCDIntNd  *new_node;
 51:   PetscInt       new_left;
 52:   PetscInt       chk_sz; /* chunk size */
 53:   PetscCDIntNd  *extra_nodes;
 54:   PetscCDIntNd **array; /* Array of lists */
 55:   PetscInt       size;  /* size of 'array' */
 56:   Mat            mat;   /* cache a Mat for communication data */
 57: } PetscCoarsenData;

 59: PETSC_EXTERN PetscErrorCode MatCoarsenCreate(MPI_Comm, MatCoarsen *);
 60: PETSC_EXTERN PetscErrorCode MatCoarsenSetType(MatCoarsen, MatCoarsenType);
 61: PETSC_EXTERN PetscErrorCode MatCoarsenSetAdjacency(MatCoarsen, Mat);
 62: PETSC_EXTERN PetscErrorCode MatCoarsenSetGreedyOrdering(MatCoarsen, const IS);
 63: PETSC_EXTERN PetscErrorCode MatCoarsenSetStrictAggs(MatCoarsen, PetscBool);
 64: PETSC_EXTERN PetscErrorCode MatCoarsenGetData(MatCoarsen, PetscCoarsenData **);
 65: PETSC_EXTERN PetscErrorCode MatCoarsenApply(MatCoarsen);
 66: PETSC_EXTERN PetscErrorCode MatCoarsenDestroy(MatCoarsen *);
 67: PETSC_EXTERN PetscErrorCode MatCoarsenRegister(const char[], PetscErrorCode (*)(MatCoarsen));
 68: PETSC_EXTERN PetscErrorCode MatCoarsenView(MatCoarsen, PetscViewer);
 69: PETSC_EXTERN PetscErrorCode MatCoarsenSetFromOptions(MatCoarsen);
 70: PETSC_EXTERN PetscErrorCode MatCoarsenGetType(MatCoarsen, MatCoarsenType *);
 71: PETSC_EXTERN PetscErrorCode MatCoarsenViewFromOptions(MatCoarsen, PetscObject, const char[]);

 73: PETSC_EXTERN PetscErrorCode PetscCDCreate(PetscInt, PetscCoarsenData **);
 74: PETSC_EXTERN PetscErrorCode PetscCDDestroy(PetscCoarsenData *);
 75: PETSC_EXTERN PetscErrorCode PetscCDIntNdSetID(PetscCDIntNd *, PetscInt);
 76: PETSC_EXTERN PetscErrorCode PetscCDIntNdGetID(const PetscCDIntNd *, PetscInt *);
 77: PETSC_EXTERN PetscErrorCode PetscCDAppendID(PetscCoarsenData *, PetscInt, PetscInt);
 78: PETSC_EXTERN PetscErrorCode PetscCDAppendRemove(PetscCoarsenData *, PetscInt, PetscInt);
 79: PETSC_EXTERN PetscErrorCode PetscCDAppendNode(PetscCoarsenData *, PetscInt, PetscCDIntNd *);
 80: PETSC_EXTERN PetscErrorCode PetscCDRemoveNextNode(PetscCoarsenData *, PetscInt, PetscCDIntNd *);
 81: PETSC_EXTERN PetscErrorCode PetscCDSizeAt(const PetscCoarsenData *, PetscInt, PetscInt *);
 82: PETSC_EXTERN PetscErrorCode PetscCDEmptyAt(const PetscCoarsenData *, PetscInt, PetscBool *);
 83: PETSC_EXTERN PetscErrorCode PetscCDSetChuckSize(PetscCoarsenData *, PetscInt);
 84: PETSC_EXTERN PetscErrorCode PetscCDPrint(const PetscCoarsenData *, MPI_Comm);
 85: PETSC_EXTERN PetscErrorCode PetscCDGetMIS(PetscCoarsenData *, IS *);
 86: PETSC_EXTERN PetscErrorCode PetscCDGetMat(PetscCoarsenData *, Mat *);
 87: PETSC_EXTERN PetscErrorCode PetscCDSetMat(PetscCoarsenData *, Mat);
 88: PETSC_EXTERN PetscErrorCode PetscCDRemoveAll(PetscCoarsenData *, PetscInt);

 90: PETSC_EXTERN PetscErrorCode PetscCDGetHeadPos(const PetscCoarsenData *, PetscInt, PetscCDIntNd **);
 91: PETSC_EXTERN PetscErrorCode PetscCDGetNextPos(const PetscCoarsenData *, PetscInt, PetscCDIntNd **);
 92: PETSC_EXTERN PetscErrorCode PetscCDGetASMBlocks(const PetscCoarsenData *, const PetscInt, Mat, PetscInt *, IS **);

 94: PETSC_EXTERN PetscErrorCode MatCoarsenMISKSetDistance(MatCoarsen, PetscInt);
 95: PETSC_EXTERN PetscErrorCode MatCoarsenMISKGetDistance(MatCoarsen, PetscInt *);
 96: #endif