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