1b2930b41SShri Abhyankar /* 2b2930b41SShri Abhyankar DMNetwork, for parallel unstructured network problems. 3b2930b41SShri Abhyankar */ 4a4963045SJacob Faibussowitsch #pragma once 5b2930b41SShri Abhyankar 69e1d080bSHong Zhang #include <petscdmplex.h> 727f51fceSHong Zhang #include <petscviewer.h> 8b2930b41SShri Abhyankar 9*ce78bad3SBarry Smith /* MANSEC = DM */ 105f25b224SDuncan Campbell /* SUBMANSEC = DMNetwork */ 115f25b224SDuncan Campbell 122bf73ac6SHong Zhang #define ALL_COMPONENTS -1 132bf73ac6SHong Zhang 14b2930b41SShri Abhyankar /* 15b2930b41SShri Abhyankar DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data. 16b2930b41SShri Abhyankar For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt. 17b2930b41SShri Abhyankar To get the user-specific data type, one needs to cast it to the appropriate type. 18b2930b41SShri Abhyankar */ 19b2930b41SShri Abhyankar typedef PetscInt DMNetworkComponentGenericDataType; 20b2930b41SShri Abhyankar 21b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm, DM *); 222bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM, PetscInt, PetscInt); 232bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM, PetscInt *, PetscInt *); 24b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM); 25caf410d2SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM, const char *, size_t, PetscInt *); 26b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM, PetscInt *, PetscInt *); 27b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM, PetscInt *, PetscInt *); 288afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumEdges(DM, PetscInt *, PetscInt *); 298afb7921SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkGetNumVertices(DM, PetscInt *, PetscInt *); 302bf73ac6SHong Zhang 312bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM, PetscInt, PetscInt, void *, PetscInt); 32*ce78bad3SBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM, PetscInt, PetscInt, PetscInt *, void *, PetscInt *); 33daad07d3SAidan Hamilton PETSC_EXTERN PetscErrorCode DMNetworkFinalizeComponents(DM); 34b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM, PetscInt, PetscInt *); 352bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 362bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM, PetscInt, PetscInt, PetscInt *); 372bf73ac6SHong Zhang 3824121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM, PetscInt, PetscInt *); 3924121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM, PetscInt, PetscInt *); 402bf73ac6SHong Zhang 4124121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM); 4222bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM); 4322bbedd7SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM, PetscInt, PetscInt *); 4424121865SAdrian Maldonado PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF, ISLocalToGlobalMapping, PetscSF *); 45d3464fd4SAdrian Maldonado PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM *, PetscInt); 46b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM, PetscInt, PetscInt *, const PetscInt *[]); 47d842c372SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM, PetscInt, const PetscInt *[]); 48b2930b41SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM, PetscInt, PetscBool *); 492bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM, PetscInt, PetscBool *); 5083b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM, PetscInt, Mat[]); 5183b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM, PetscInt, Mat[]); 5283b2e829SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM, PetscBool, PetscBool); 53556ed216SShri Abhyankar PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM, DM *); 54e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM, PetscInt, PetscInt *); 55e85e6aecSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM, PetscInt, PetscInt *); 56b2930b41SShri Abhyankar 57f11a936eSBarry Smith PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM, const char *, PetscInt, PetscInt[], PetscInt *); 582bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **, const PetscInt **); 592bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[]); 602bf73ac6SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM, PetscInt *, const PetscInt **); 615c6496baSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM, PetscInt, PetscInt *, PetscInt *, const PetscInt **); 6242dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 6342dc13f1SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM, PetscInt, PetscInt[], PetscInt[], PetscInt[], PetscInt *[], IS *); 642727e31bSShri Abhyankar 65*ce78bad3SBarry Smith typedef struct _n_DMNetworkMonitorList *DMNetworkMonitorList; 66*ce78bad3SBarry Smith struct _n_DMNetworkMonitorList { 6727f51fceSHong Zhang PetscViewer viewer; 6827f51fceSHong Zhang Vec v; 6927f51fceSHong Zhang PetscInt element; 7027f51fceSHong Zhang PetscInt nodes; 7127f51fceSHong Zhang PetscInt start; 7227f51fceSHong Zhang PetscInt blocksize; 7327f51fceSHong Zhang DMNetworkMonitorList next; 7427f51fceSHong Zhang }; 7527f51fceSHong Zhang 76*ce78bad3SBarry Smith typedef struct _n_DMNetworkMonitor *DMNetworkMonitor; 77*ce78bad3SBarry Smith struct _n_DMNetworkMonitor { 7827f51fceSHong Zhang MPI_Comm comm; 7927f51fceSHong Zhang DM network; 8027f51fceSHong Zhang DMNetworkMonitorList firstnode; 8127f51fceSHong Zhang }; 8227f51fceSHong Zhang 8327f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM, DMNetworkMonitor *); 8427f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor *); 8527f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor); 86bb046f40SHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor, const char *, PetscInt, PetscInt, PetscInt, PetscInt, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool); 8727f51fceSHong Zhang PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor, Vec); 88b2930b41SShri Abhyankar 895f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowRanks(DM, PetscBool); 905f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetViewRanks(DM, IS); 915f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowGlobal(DM, PetscBool); 925f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowVertices(DM, PetscBool); 935f25b224SDuncan Campbell PETSC_EXTERN PetscErrorCode DMNetworkViewSetShowNumbering(DM, PetscBool); 94