Actual source code: petscdmnetwork.h

  1: /*
  2:   DMNetwork, for parallel unstructured network problems.
  3: */
  4: #pragma once

  6: #include <petscdmplex.h>
  7: #include <petscviewer.h>

  9: /* MANSEC = DM */
 10: /* SUBMANSEC = DMNetwork */

 12: #define ALL_COMPONENTS -1

 14: /*
 15:   DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data.
 16:             For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt.
 17:             To get the user-specific data type, one needs to cast it to the appropriate type.
 18: */
 19: typedef PetscInt DMNetworkComponentGenericDataType;

 21: PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm, DM *);
 22: PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM, PetscInt, PetscInt);
 23: PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM, PetscInt *, PetscInt *);
 24: PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
 25: PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM, const char *, size_t, PetscInt *);
 26: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM, PetscInt *, PetscInt *);
 27: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM, PetscInt *, PetscInt *);
 28: PETSC_EXTERN PetscErrorCode DMNetworkGetNumEdges(DM, PetscInt *, PetscInt *);
 29: PETSC_EXTERN PetscErrorCode DMNetworkGetNumVertices(DM, PetscInt *, PetscInt *);

 31: PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM, PetscInt, PetscInt, void *, PetscInt);
 32: PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM, PetscInt, PetscInt, PetscInt *, void *, PetscInt *);
 33: PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM);
 34: PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM, PetscInt, PetscInt *);
 35: PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM, PetscInt, PetscInt, PetscInt *);
 36: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM, PetscInt, PetscInt, PetscInt *);

 38: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM, PetscInt, PetscInt *);
 39: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM, PetscInt, PetscInt *);

 41: PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
 42: PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM);
 43: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM, PetscInt, PetscInt *);
 44: PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF, ISLocalToGlobalMapping, PetscSF *);
 45: PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM *, PetscInt);
 46: PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM, PetscInt, PetscInt *, const PetscInt *[]);
 47: PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM, PetscInt, const PetscInt *[]);
 48: PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM, PetscInt, PetscBool *);
 49: PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM, PetscInt, PetscBool *);
 50: PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM, PetscInt, Mat[]);
 51: PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM, PetscInt, Mat[]);
 52: PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM, PetscBool, PetscBool);
 53: PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM, DM *);
 54: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM, PetscInt, PetscInt *);
 55: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM, PetscInt, PetscInt *);

 57: PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM, const char *, PetscInt, PetscInt[], PetscInt *);
 58: PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **, const PetscInt **);
 59: PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[]);
 60: PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM, PetscInt *, const PetscInt **);
 61: PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **);
 62: PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *);
 63: PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *);

 65: /*S
 66:   DMNetworkMonitorList - Linked-list node held by a `DMNetworkMonitor`; each node records a `PetscViewer` and the subset of a global `Vec` that should be plotted for one network element

 68:   Level: developer

 70: .seealso: `DM`, `DMNETWORK`, `DMNetworkMonitor`, `DMNetworkMonitorAdd()`, `DMNetworkMonitorView()`
 71: S*/
 72: typedef struct _n_DMNetworkMonitorList *DMNetworkMonitorList;
 73: struct _n_DMNetworkMonitorList {
 74:   PetscViewer          viewer;
 75:   Vec                  v;
 76:   PetscInt             element;
 77:   PetscInt             nodes;
 78:   PetscInt             start;
 79:   PetscInt             blocksize;
 80:   DMNetworkMonitorList next;
 81: };

 83: /*S
 84:   DMNetworkMonitor - Lightweight collection of `DMNetworkMonitorList` nodes used to drive per-element visualization of a `DMNETWORK` solution across time integration

 86:   Level: developer

 88: .seealso: `DM`, `DMNETWORK`, `DMNetworkMonitorCreate()`, `DMNetworkMonitorDestroy()`, `DMNetworkMonitorAdd()`, `DMNetworkMonitorView()`
 89: S*/
 90: typedef struct _n_DMNetworkMonitor *DMNetworkMonitor;
 91: struct _n_DMNetworkMonitor {
 92:   MPI_Comm             comm;
 93:   DM                   network;
 94:   DMNetworkMonitorList firstnode;
 95: };

 97: PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM, DMNetworkMonitor *);
 98: PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor *);
 99: PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
100: PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor, const char *, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool);
101: PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor, Vec);

103: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowRanks(DM, PetscBool);
104: PETSC_EXTERN PetscErrorCode DMNetworkViewSetViewRanks(DM, IS);
105: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowGlobal(DM, PetscBool);
106: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowVertices(DM, PetscBool);
107: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowNumbering(DM, PetscBool);