xref: /petsc/include/petscdmnetwork.h (revision 83b2e829dcb382aebd416aff29be07233908db19)
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*);
18b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetSizes(DM,PetscInt,PetscInt,PetscInt,PetscInt);
19b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetEdgeList(DM,int[]);
20b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
21b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM,const char*,PetscInt,PetscInt*);
22b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM,PetscInt*,PetscInt*);
23b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM,PetscInt*,PetscInt*);
24b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM,PetscInt,PetscInt,void*);
25b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*);
26b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetComponentTypeOffset(DM,PetscInt,PetscInt,PetscInt*,PetscInt*);
27b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableOffset(DM,PetscInt,PetscInt*);
28b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableGlobalOffset(DM,PetscInt,PetscInt*);
29b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkAddNumVariables(DM,PetscInt,PetscInt);
3027f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumVariables(DM,PetscInt,PetscInt*);
31b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetNumVariables(DM,PetscInt,PetscInt);
32b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetComponentDataArray(DM,DMNetworkComponentGenericDataType**);
3380cf41d5SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM,PetscInt,DM*);
34b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]);
35b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedNodes(DM,PetscInt,const PetscInt*[]);
36b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*);
37*83b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]);
38*83b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]);
39*83b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool);
40b2930b41SShri Abhyankar 
4127f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList;
4227f51fceSHong Zhang struct _p_DMNetworkMonitorList
4327f51fceSHong Zhang {
4427f51fceSHong Zhang   PetscViewer viewer;
4527f51fceSHong Zhang   Vec         v;
4627f51fceSHong Zhang   PetscInt    element;
4727f51fceSHong Zhang   PetscInt    nodes;
4827f51fceSHong Zhang   PetscInt    start;
4927f51fceSHong Zhang   PetscInt    blocksize;
5027f51fceSHong Zhang   DMNetworkMonitorList next;
5127f51fceSHong Zhang };
5227f51fceSHong Zhang 
5327f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor;
5427f51fceSHong Zhang struct _p_DMNetworkMonitor
5527f51fceSHong Zhang {
5627f51fceSHong Zhang   MPI_Comm             comm;
5727f51fceSHong Zhang   DM                   network;
5827f51fceSHong Zhang   DMNetworkMonitorList firstnode;
5927f51fceSHong Zhang };
6027f51fceSHong Zhang 
6127f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*);
6227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*);
6327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
64232215b8SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscBool);
6527f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec);
66b2930b41SShri Abhyankar 
67b2930b41SShri Abhyankar #endif
68