xref: /petsc/include/petscdmnetwork.h (revision daad07d386296cdcbb87925ef5f1432ee4a24ec4)
1b2930b41SShri Abhyankar /*
2b2930b41SShri Abhyankar   DMNetwork, for parallel unstructured network problems.
3b2930b41SShri Abhyankar */
426bd1501SBarry Smith #if !defined(PETSCDMNETWORK_H)
526bd1501SBarry Smith #define PETSCDMNETWORK_H
6b2930b41SShri Abhyankar 
79e1d080bSHong Zhang #include <petscdmplex.h>
827f51fceSHong Zhang #include <petscviewer.h>
9b2930b41SShri Abhyankar 
102bf73ac6SHong Zhang #define ALL_COMPONENTS -1
112bf73ac6SHong Zhang 
12b2930b41SShri Abhyankar /*
13b2930b41SShri Abhyankar   DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data.
14b2930b41SShri Abhyankar             For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt.
15b2930b41SShri Abhyankar             To get the user-specific data type, one needs to cast it to the appropriate type.
16b2930b41SShri Abhyankar */
17b2930b41SShri Abhyankar typedef PetscInt DMNetworkComponentGenericDataType;
18b2930b41SShri Abhyankar 
19b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm,DM*);
202bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM,PetscInt,PetscInt);
212bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM,PetscInt*,PetscInt*);
22b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
23caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM,const char*,size_t,PetscInt*);
24b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM,PetscInt*,PetscInt*);
25b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM,PetscInt*,PetscInt*);
262bf73ac6SHong Zhang 
272bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM,PetscInt,PetscInt,void*,PetscInt);
282bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM,PetscInt,PetscInt,PetscInt*,void**,PetscInt*);
29*daad07d3SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM);
30b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*);
312bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM,PetscInt,PetscInt,PetscInt*);
322bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM,PetscInt,PetscInt,PetscInt*);
332bf73ac6SHong Zhang 
3424121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM,PetscInt,PetscInt*);
3524121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM,PetscInt,PetscInt*);
362bf73ac6SHong Zhang 
3724121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
3822bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM);
3922bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM,PetscInt,PetscInt*);
4024121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF,ISLocalToGlobalMapping,PetscSF*);
41d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM*,PetscInt);
42b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]);
43d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM,PetscInt,const PetscInt*[]);
44b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*);
452bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM,PetscInt,PetscBool*);
4683b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]);
4783b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]);
4883b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool);
49556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM,DM*);
50e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM,PetscInt,PetscInt*);
51e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM,PetscInt,PetscInt*);
52b2930b41SShri Abhyankar 
53f11a936eSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM,const char*,PetscInt,PetscInt[],PetscInt*);
542bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**,const PetscInt**);
552bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[]);
562bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM,PetscInt*,const PetscInt**);
575c6496baSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**);
5842dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);
5942dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);
602727e31bSShri Abhyankar 
6127f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList;
6227f51fceSHong Zhang struct _p_DMNetworkMonitorList
6327f51fceSHong Zhang {
6427f51fceSHong Zhang   PetscViewer viewer;
6527f51fceSHong Zhang   Vec         v;
6627f51fceSHong Zhang   PetscInt    element;
6727f51fceSHong Zhang   PetscInt    nodes;
6827f51fceSHong Zhang   PetscInt    start;
6927f51fceSHong Zhang   PetscInt    blocksize;
7027f51fceSHong Zhang   DMNetworkMonitorList next;
7127f51fceSHong Zhang };
7227f51fceSHong Zhang 
7327f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor;
7427f51fceSHong Zhang struct _p_DMNetworkMonitor
7527f51fceSHong Zhang {
7627f51fceSHong Zhang   MPI_Comm             comm;
7727f51fceSHong Zhang   DM                   network;
7827f51fceSHong Zhang   DMNetworkMonitorList firstnode;
7927f51fceSHong Zhang };
8027f51fceSHong Zhang 
8127f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*);
8227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*);
8327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
84bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscReal,PetscReal,PetscBool);
8527f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec);
86b2930b41SShri Abhyankar 
87b2930b41SShri Abhyankar #endif
88