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> 8*27f51fceSHong 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); 30*27f51fceSHong 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*); 37b2930b41SShri Abhyankar 38*27f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList; 39*27f51fceSHong Zhang struct _p_DMNetworkMonitorList 40*27f51fceSHong Zhang { 41*27f51fceSHong Zhang PetscViewer viewer; 42*27f51fceSHong Zhang Vec v; 43*27f51fceSHong Zhang PetscInt element; 44*27f51fceSHong Zhang PetscInt nodes; 45*27f51fceSHong Zhang PetscInt start; 46*27f51fceSHong Zhang PetscInt blocksize; 47*27f51fceSHong Zhang DMNetworkMonitorList next; 48*27f51fceSHong Zhang }; 49*27f51fceSHong Zhang 50*27f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor; 51*27f51fceSHong Zhang struct _p_DMNetworkMonitor 52*27f51fceSHong Zhang { 53*27f51fceSHong Zhang MPI_Comm comm; 54*27f51fceSHong Zhang DM network; 55*27f51fceSHong Zhang DMNetworkMonitorList firstnode; 56*27f51fceSHong Zhang }; 57*27f51fceSHong Zhang 58*27f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*); 59*27f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*); 60*27f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor); 61*27f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar,PetscScalar,PetscBool); 62*27f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec); 63b2930b41SShri Abhyankar 64b2930b41SShri Abhyankar #endif 65