xref: /petsc/include/petscdmnetwork.h (revision 5c6496ba940341816c82c3b7fcda2e06e7ddfa20)
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*);
29b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*);
302bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM,PetscInt,PetscInt,PetscInt*);
312bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM,PetscInt,PetscInt,PetscInt*);
322bf73ac6SHong Zhang 
3324121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM,PetscInt,PetscInt*);
3424121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM,PetscInt,PetscInt*);
352bf73ac6SHong Zhang 
3624121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
3722bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM);
3822bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM,PetscInt,PetscInt*);
3924121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF,ISLocalToGlobalMapping,PetscSF*);
40d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM*,PetscInt);
41b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]);
42d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM,PetscInt,const PetscInt*[]);
43b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*);
442bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM,PetscInt,PetscBool*);
4583b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]);
4683b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]);
4783b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool);
48556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM,DM*);
49e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM,PetscInt,PetscInt*);
50e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM,PetscInt,PetscInt*);
51b2930b41SShri Abhyankar 
52f11a936eSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM,const char*,PetscInt,PetscInt[],PetscInt*);
532bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**,const PetscInt**);
542bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[]);
552bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM,PetscInt*,const PetscInt**);
56*5c6496baSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**);
5742dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);
5842dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);
592727e31bSShri Abhyankar 
6027f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList;
6127f51fceSHong Zhang struct _p_DMNetworkMonitorList
6227f51fceSHong Zhang {
6327f51fceSHong Zhang   PetscViewer viewer;
6427f51fceSHong Zhang   Vec         v;
6527f51fceSHong Zhang   PetscInt    element;
6627f51fceSHong Zhang   PetscInt    nodes;
6727f51fceSHong Zhang   PetscInt    start;
6827f51fceSHong Zhang   PetscInt    blocksize;
6927f51fceSHong Zhang   DMNetworkMonitorList next;
7027f51fceSHong Zhang };
7127f51fceSHong Zhang 
7227f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor;
7327f51fceSHong Zhang struct _p_DMNetworkMonitor
7427f51fceSHong Zhang {
7527f51fceSHong Zhang   MPI_Comm             comm;
7627f51fceSHong Zhang   DM                   network;
7727f51fceSHong Zhang   DMNetworkMonitorList firstnode;
7827f51fceSHong Zhang };
7927f51fceSHong Zhang 
8027f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*);
8127f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*);
8227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
83bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscReal,PetscReal,PetscBool);
8427f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec);
85b2930b41SShri Abhyankar 
86b2930b41SShri Abhyankar #endif
87