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: /*MC
15: DMNetworkComponentGenericDataType - The integer-sized datatype used by `DMNETWORK` to store user-registered component data on the network
17: Level: developer
19: Note:
20: `DMNetworkComponentGenericDataType` is a typedef for `PetscInt`. The type is needed so that the buffer holding the component data can be communicated with `PetscSF` during `DMNetwork` distribution. User code obtains a pointer to the buffer with `DMNetworkGetComponent()` and must cast it to the appropriate user-defined component struct.
22: .seealso: [](ch_network), `DM`, `DMNETWORK`, `DMNetworkRegisterComponent()`, `DMNetworkGetComponent()`, `DMNetworkAddComponent()`
23: M*/
24: typedef PetscInt DMNetworkComponentGenericDataType;
26: PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm, DM *);
27: PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM, PetscInt, PetscInt);
28: PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM, PetscInt *, PetscInt *);
29: PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
30: PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM, const char *, size_t, PetscInt *);
31: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM, PetscInt *, PetscInt *);
32: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM, PetscInt *, PetscInt *);
33: PETSC_EXTERN PetscErrorCode DMNetworkGetNumEdges(DM, PetscInt *, PetscInt *);
34: PETSC_EXTERN PetscErrorCode DMNetworkGetNumVertices(DM, PetscInt *, PetscInt *);
36: PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM, PetscInt, PetscInt, void *, PetscInt);
37: PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM, PetscInt, PetscInt, PetscInt *, void *, PetscInt *);
38: PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM);
39: PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM, PetscInt, PetscInt *);
40: PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM, PetscInt, PetscInt, PetscInt *);
41: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM, PetscInt, PetscInt, PetscInt *);
43: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM, PetscInt, PetscInt *);
44: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM, PetscInt, PetscInt *);
46: PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
47: PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM);
48: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM, PetscInt, PetscInt *);
49: PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF, ISLocalToGlobalMapping, PetscSF *);
50: PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM *, PetscInt);
51: PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM, PetscInt, PetscInt *, const PetscInt *[]);
52: PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM, PetscInt, const PetscInt *[]);
53: PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM, PetscInt, PetscBool *);
54: PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM, PetscInt, PetscBool *);
55: PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM, PetscInt, Mat[]);
56: PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM, PetscInt, Mat[]);
57: PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM, PetscBool, PetscBool);
58: PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM, DM *);
59: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM, PetscInt, PetscInt *);
60: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM, PetscInt, PetscInt *);
62: PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM, const char *, PetscInt, PetscInt[], PetscInt *);
63: PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **, const PetscInt **);
64: PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[]);
65: PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM, PetscInt *, const PetscInt **);
66: PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **);
67: PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *);
68: PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *);
70: /*S
71: 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
73: Level: developer
75: .seealso: `DM`, `DMNETWORK`, `DMNetworkMonitor`, `DMNetworkMonitorAdd()`, `DMNetworkMonitorView()`
76: S*/
77: typedef struct _n_DMNetworkMonitorList *DMNetworkMonitorList;
78: struct _n_DMNetworkMonitorList {
79: PetscViewer viewer;
80: Vec v;
81: PetscInt element;
82: PetscInt nodes;
83: PetscInt start;
84: PetscInt blocksize;
85: DMNetworkMonitorList next;
86: };
88: /*S
89: DMNetworkMonitor - Lightweight collection of `DMNetworkMonitorList` nodes used to drive per-element visualization of a `DMNETWORK` solution across time integration
91: Level: developer
93: .seealso: `DM`, `DMNETWORK`, `DMNetworkMonitorCreate()`, `DMNetworkMonitorDestroy()`, `DMNetworkMonitorAdd()`, `DMNetworkMonitorView()`
94: S*/
95: typedef struct _n_DMNetworkMonitor *DMNetworkMonitor;
96: struct _n_DMNetworkMonitor {
97: MPI_Comm comm;
98: DM network;
99: DMNetworkMonitorList firstnode;
100: };
102: PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM, DMNetworkMonitor *);
103: PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor *);
104: PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
105: PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor, const char *, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool);
106: PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor, Vec);
108: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowRanks(DM, PetscBool);
109: PETSC_EXTERN PetscErrorCode DMNetworkViewSetViewRanks(DM, IS);
110: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowGlobal(DM, PetscBool);
111: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowVertices(DM, PetscBool);
112: PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowNumbering(DM, PetscBool);