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 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*); 18caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetSizes(DM,PetscInt,PetscInt[],PetscInt[],PetscInt,PetscInt[]); 194e18019cSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkSetEdgeList(DM,PetscInt*[],PetscInt*[]); 20b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM); 21caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM,const char*,size_t,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*); 25c3b11c7cSShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM,PetscInt,PetscInt,PetscInt*,void**); 26b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*); 27b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableOffset(DM,PetscInt,PetscInt*); 28b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVariableGlobalOffset(DM,PetscInt,PetscInt*); 2924121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM,PetscInt,PetscInt*); 3024121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM,PetscInt,PetscInt*); 31b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkAddNumVariables(DM,PetscInt,PetscInt); 3227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumVariables(DM,PetscInt,PetscInt*); 33b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkSetNumVariables(DM,PetscInt,PetscInt); 3424121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM); 35*22bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM); 36*22bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM,PetscInt,PetscInt*); 3724121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF,ISLocalToGlobalMapping,PetscSF*); 38d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM*,PetscInt); 39b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]); 40d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM,PetscInt,const PetscInt*[]); 41b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*); 4283b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]); 4383b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]); 4483b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool); 45556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM,DM*); 46e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM,PetscInt,PetscInt*); 47e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM,PetscInt,PetscInt*); 48b2930b41SShri Abhyankar 492727e31bSShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetworkInfo(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**,const PetscInt**); 50caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetworkCoupleInfo(DM,PetscInt,PetscInt*,const PetscInt**); 512727e31bSShri Abhyankar 5227f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList; 5327f51fceSHong Zhang struct _p_DMNetworkMonitorList 5427f51fceSHong Zhang { 5527f51fceSHong Zhang PetscViewer viewer; 5627f51fceSHong Zhang Vec v; 5727f51fceSHong Zhang PetscInt element; 5827f51fceSHong Zhang PetscInt nodes; 5927f51fceSHong Zhang PetscInt start; 6027f51fceSHong Zhang PetscInt blocksize; 6127f51fceSHong Zhang DMNetworkMonitorList next; 6227f51fceSHong Zhang }; 6327f51fceSHong Zhang 6427f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor; 6527f51fceSHong Zhang struct _p_DMNetworkMonitor 6627f51fceSHong Zhang { 6727f51fceSHong Zhang MPI_Comm comm; 6827f51fceSHong Zhang DM network; 6927f51fceSHong Zhang DMNetworkMonitorList firstnode; 7027f51fceSHong Zhang }; 7127f51fceSHong Zhang 7227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*); 7327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*); 7427f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor); 75bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscReal,PetscReal,PetscBool); 7627f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec); 77b2930b41SShri Abhyankar 78b2930b41SShri Abhyankar #endif 79