1b2930b41SShri Abhyankar /* 2b2930b41SShri Abhyankar DMNetwork, for parallel unstructured network problems. 3b2930b41SShri Abhyankar */ 4*a4963045SJacob Faibussowitsch #pragma once 5b2930b41SShri Abhyankar 69e1d080bSHong Zhang #include <petscdmplex.h> 727f51fceSHong Zhang #include <petscviewer.h> 8b2930b41SShri Abhyankar 95f25b224SDuncan Campbell /* SUBMANSEC = DMNetwork */ 105f25b224SDuncan Campbell 112bf73ac6SHong Zhang #define ALL_COMPONENTS -1 122bf73ac6SHong Zhang 13b2930b41SShri Abhyankar /* 14b2930b41SShri Abhyankar DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data. 15b2930b41SShri Abhyankar For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt. 16b2930b41SShri Abhyankar To get the user-specific data type, one needs to cast it to the appropriate type. 17b2930b41SShri Abhyankar */ 18b2930b41SShri Abhyankar typedef PetscInt DMNetworkComponentGenericDataType; 19b2930b41SShri Abhyankar 20b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm, DM *); 212bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM, PetscInt, PetscInt); 222bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM, PetscInt *, PetscInt *); 23b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM); 24caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM, const char *, size_t, PetscInt *); 25b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM, PetscInt *, PetscInt *); 26b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM, PetscInt *, PetscInt *); 278afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumEdges(DM, PetscInt *, PetscInt *); 288afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumVertices(DM, PetscInt *, PetscInt *); 292bf73ac6SHong Zhang 302bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM, PetscInt, PetscInt, void *, PetscInt); 312bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM, PetscInt, PetscInt, PetscInt *, void **, PetscInt *); 32daad07d3SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM); 33b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM, PetscInt, PetscInt *); 342bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 352bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 362bf73ac6SHong Zhang 3724121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM, PetscInt, PetscInt *); 3824121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM, PetscInt, PetscInt *); 392bf73ac6SHong Zhang 4024121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM); 4122bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM); 4222bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM, PetscInt, PetscInt *); 4324121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF, ISLocalToGlobalMapping, PetscSF *); 44d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM *, PetscInt); 45b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM, PetscInt, PetscInt *, const PetscInt *[]); 46d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM, PetscInt, const PetscInt *[]); 47b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM, PetscInt, PetscBool *); 482bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM, PetscInt, PetscBool *); 4983b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM, PetscInt, Mat[]); 5083b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM, PetscInt, Mat[]); 5183b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM, PetscBool, PetscBool); 52556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM, DM *); 53e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM, PetscInt, PetscInt *); 54e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM, PetscInt, PetscInt *); 55b2930b41SShri Abhyankar 56f11a936eSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM, const char *, PetscInt, PetscInt[], PetscInt *); 572bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **, const PetscInt **); 582bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[]); 592bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM, PetscInt *, const PetscInt **); 605c6496baSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **); 6142dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 6242dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 632727e31bSShri Abhyankar 6427f51fceSHong Zhang typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList; 659371c9d4SSatish Balay struct _p_DMNetworkMonitorList { 6627f51fceSHong Zhang PetscViewer viewer; 6727f51fceSHong Zhang Vec v; 6827f51fceSHong Zhang PetscInt element; 6927f51fceSHong Zhang PetscInt nodes; 7027f51fceSHong Zhang PetscInt start; 7127f51fceSHong Zhang PetscInt blocksize; 7227f51fceSHong Zhang DMNetworkMonitorList next; 7327f51fceSHong Zhang }; 7427f51fceSHong Zhang 7527f51fceSHong Zhang typedef struct _p_DMNetworkMonitor *DMNetworkMonitor; 769371c9d4SSatish Balay struct _p_DMNetworkMonitor { 7727f51fceSHong Zhang MPI_Comm comm; 7827f51fceSHong Zhang DM network; 7927f51fceSHong Zhang DMNetworkMonitorList firstnode; 8027f51fceSHong Zhang }; 8127f51fceSHong Zhang 8227f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM, DMNetworkMonitor *); 8327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor *); 8427f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor); 85bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor, const char *, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool); 8627f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor, Vec); 87b2930b41SShri Abhyankar 885f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowRanks(DM, PetscBool); 895f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetViewRanks(DM, IS); 905f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowGlobal(DM, PetscBool); 915f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowVertices(DM, PetscBool); 925f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowNumbering(DM, PetscBool); 93