1b2930b41SShri Abhyankar /* 2b2930b41SShri Abhyankar DMNetwork, for parallel unstructured network problems. 3b2930b41SShri Abhyankar */ 46524c165SJacob Faibussowitsch #ifndef 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 *); 26*8afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumEdges(DM, PetscInt *, PetscInt *); 27*8afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumVertices(DM, PetscInt *, PetscInt *); 282bf73ac6SHong Zhang 292bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM, PetscInt, PetscInt, void *, PetscInt); 302bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM, PetscInt, PetscInt, PetscInt *, void **, PetscInt *); 31daad07d3SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM); 32b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM, PetscInt, PetscInt *); 332bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 342bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 352bf73ac6SHong Zhang 3624121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM, PetscInt, PetscInt *); 3724121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM, PetscInt, PetscInt *); 382bf73ac6SHong Zhang 3924121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM); 4022bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM); 4122bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM, PetscInt, PetscInt *); 4224121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF, ISLocalToGlobalMapping, PetscSF *); 43d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM *, PetscInt); 44b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM, PetscInt, PetscInt *, const PetscInt *[]); 45d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM, PetscInt, const PetscInt *[]); 46b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM, PetscInt, PetscBool *); 472bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM, PetscInt, PetscBool *); 4883b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM, PetscInt, Mat[]); 4983b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM, PetscInt, Mat[]); 5083b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM, PetscBool, PetscBool); 51556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM, DM *); 52e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM, PetscInt, PetscInt *); 53e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM, PetscInt, PetscInt *); 54b2930b41SShri Abhyankar 55f11a936eSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM, const char *, PetscInt, PetscInt[], PetscInt *); 562bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **, const PetscInt **); 572bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[]); 582bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM, PetscInt *, const PetscInt **); 595c6496baSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **); 6042dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 6142dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 622727e31bSShri Abhyankar 6327f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList; 649371c9d4SSatish Balay struct _p_DMNetworkMonitorList { 6527f51fceSHong Zhang PetscViewer viewer; 6627f51fceSHong Zhang Vec v; 6727f51fceSHong Zhang PetscInt element; 6827f51fceSHong Zhang PetscInt nodes; 6927f51fceSHong Zhang PetscInt start; 7027f51fceSHong Zhang PetscInt blocksize; 7127f51fceSHong Zhang DMNetworkMonitorList next; 7227f51fceSHong Zhang }; 7327f51fceSHong Zhang 7427f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor; 759371c9d4SSatish Balay struct _p_DMNetworkMonitor { 7627f51fceSHong Zhang MPI_Comm comm; 7727f51fceSHong Zhang DM network; 7827f51fceSHong Zhang DMNetworkMonitorList firstnode; 7927f51fceSHong Zhang }; 8027f51fceSHong Zhang 8127f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM, DMNetworkMonitor *); 8227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor *); 8327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor); 84bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor, const char *, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool); 8527f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor, Vec); 86b2930b41SShri Abhyankar 87b2930b41SShri Abhyankar #endif 88