xref: /petsc/include/petscdmnetwork.h (revision f025b11dc83b91cf92bab612d4255e878b194efa)
1b2930b41SShri Abhyankar /*
2b2930b41SShri Abhyankar   DMNetwork, for parallel unstructured network problems.
3b2930b41SShri Abhyankar */
4b2930b41SShri Abhyankar #if !defined(__PETSCDMNETWORK_H)
5b2930b41SShri Abhyankar #define __PETSCDMNETWORK_H
6b2930b41SShri Abhyankar 
7b2930b41SShri Abhyankar #include <petscdm.h>
827f51fceSHong Zhang #include <petscviewer.h>
9b2930b41SShri Abhyankar 
10b2930b41SShri Abhyankar /*
11b2930b41SShri Abhyankar   DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data.
12b2930b41SShri Abhyankar             For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt.
13b2930b41SShri Abhyankar 	    To get the user-specific data type, one needs to cast it to the appropriate type.
14b2930b41SShri Abhyankar */
15b2930b41SShri Abhyankar typedef PetscInt DMNetworkComponentGenericDataType;
16b2930b41SShri Abhyankar 
17b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm,DM*);
18*f025b11dSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetSizes(DM,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt[]);
19e2aaf10cSShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetEdgeList(DM,int*[]);
20b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
216500d4abSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUpCoupled(DM);
22b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM,const char*,PetscInt,PetscInt*);
23b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM,PetscInt*,PetscInt*);
24b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM,PetscInt*,PetscInt*);
25b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM,PetscInt,PetscInt,void*);
26c3b11c7cSShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM,PetscInt,PetscInt,PetscInt*,void**);
27b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*);
28b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableOffset(DM,PetscInt,PetscInt*);
29b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableGlobalOffset(DM,PetscInt,PetscInt*);
3024121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM,PetscInt,PetscInt*);
3124121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM,PetscInt,PetscInt*);
32b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkAddNumVariables(DM,PetscInt,PetscInt);
3327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumVariables(DM,PetscInt,PetscInt*);
34b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetNumVariables(DM,PetscInt,PetscInt);
3524121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
3624121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF,ISLocalToGlobalMapping,PetscSF*);
37d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM*,PetscInt);
38b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]);
39d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM,PetscInt,const PetscInt*[]);
40b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*);
4183b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]);
4283b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]);
4383b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool);
44556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM,DM*);
45e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM,PetscInt,PetscInt*);
46e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM,PetscInt,PetscInt*);
47b2930b41SShri Abhyankar 
482727e31bSShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetworkInfo(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**,const PetscInt**);
492727e31bSShri Abhyankar 
5027f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList;
5127f51fceSHong Zhang struct _p_DMNetworkMonitorList
5227f51fceSHong Zhang {
5327f51fceSHong Zhang   PetscViewer viewer;
5427f51fceSHong Zhang   Vec         v;
5527f51fceSHong Zhang   PetscInt    element;
5627f51fceSHong Zhang   PetscInt    nodes;
5727f51fceSHong Zhang   PetscInt    start;
5827f51fceSHong Zhang   PetscInt    blocksize;
5927f51fceSHong Zhang   DMNetworkMonitorList next;
6027f51fceSHong Zhang };
6127f51fceSHong Zhang 
6227f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor;
6327f51fceSHong Zhang struct _p_DMNetworkMonitor
6427f51fceSHong Zhang {
6527f51fceSHong Zhang   MPI_Comm             comm;
6627f51fceSHong Zhang   DM                   network;
6727f51fceSHong Zhang   DMNetworkMonitorList firstnode;
6827f51fceSHong Zhang };
6927f51fceSHong Zhang 
7027f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*);
7127f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*);
7227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
73232215b8SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscBool);
7427f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec);
75b2930b41SShri Abhyankar 
76b2930b41SShri Abhyankar #endif
77