1*5f2c45f1SShri Abhyankar #define PETSCDM_DLL 2*5f2c45f1SShri Abhyankar #include <petsc-private/dmnetworkimpl.h> /*I "petscdmnetwork.h" I*/ 3*5f2c45f1SShri Abhyankar #include <petscdmda.h> 4*5f2c45f1SShri Abhyankar 5*5f2c45f1SShri Abhyankar #undef __FUNCT__ 6*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMSetFromOptions_Network" 7*5f2c45f1SShri Abhyankar PetscErrorCode DMSetFromOptions_Network(DM dm) 8*5f2c45f1SShri Abhyankar { 9*5f2c45f1SShri Abhyankar PetscErrorCode ierr; 10*5f2c45f1SShri Abhyankar 11*5f2c45f1SShri Abhyankar PetscFunctionBegin; 12*5f2c45f1SShri Abhyankar PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 13*5f2c45f1SShri Abhyankar ierr = PetscOptionsHead("DMNetwork Options");CHKERRQ(ierr); 14*5f2c45f1SShri Abhyankar ierr = PetscOptionsTail();CHKERRQ(ierr); 15*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 16*5f2c45f1SShri Abhyankar } 17*5f2c45f1SShri Abhyankar 18*5f2c45f1SShri Abhyankar /* External function declarations here */ 19*5f2c45f1SShri Abhyankar extern PetscErrorCode DMCreateMatrix_Network(DM, Mat*); 20*5f2c45f1SShri Abhyankar extern PetscErrorCode DMDestroy_Network(DM); 21*5f2c45f1SShri Abhyankar extern PetscErrorCode DMView_Network(DM, PetscViewer); 22*5f2c45f1SShri Abhyankar extern PetscErrorCode DMGlobalToLocalBegin_Network(DM, Vec, InsertMode, Vec); 23*5f2c45f1SShri Abhyankar extern PetscErrorCode DMGlobalToLocalEnd_Network(DM, Vec, InsertMode, Vec); 24*5f2c45f1SShri Abhyankar extern PetscErrorCode DMLocalToGlobalBegin_Network(DM, Vec, InsertMode, Vec); 25*5f2c45f1SShri Abhyankar extern PetscErrorCode DMLocalToGlobalEnd_Network(DM, Vec, InsertMode, Vec); 26*5f2c45f1SShri Abhyankar extern PetscErrorCode DMSetUp_Network(DM); 27*5f2c45f1SShri Abhyankar 28*5f2c45f1SShri Abhyankar 29*5f2c45f1SShri Abhyankar #undef __FUNCT__ 30*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreateGlobalVector_Network" 31*5f2c45f1SShri Abhyankar static PetscErrorCode DMCreateGlobalVector_Network(DM dm,Vec *vec) 32*5f2c45f1SShri Abhyankar { 33*5f2c45f1SShri Abhyankar PetscErrorCode ierr; 34*5f2c45f1SShri Abhyankar DM_Network *network = (DM_Network*) dm->data; 35*5f2c45f1SShri Abhyankar 36*5f2c45f1SShri Abhyankar PetscFunctionBegin; 37*5f2c45f1SShri Abhyankar ierr = DMCreateGlobalVector(network->plex,vec);CHKERRQ(ierr); 38*5f2c45f1SShri Abhyankar ierr = VecSetDM(*vec,dm);CHKERRQ(ierr); 39*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 40*5f2c45f1SShri Abhyankar } 41*5f2c45f1SShri Abhyankar 42*5f2c45f1SShri Abhyankar #undef __FUNCT__ 43*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreateLocalVector_Network" 44*5f2c45f1SShri Abhyankar static PetscErrorCode DMCreateLocalVector_Network(DM dm,Vec *vec) 45*5f2c45f1SShri Abhyankar { 46*5f2c45f1SShri Abhyankar PetscErrorCode ierr; 47*5f2c45f1SShri Abhyankar DM_Network *network = (DM_Network*) dm->data; 48*5f2c45f1SShri Abhyankar 49*5f2c45f1SShri Abhyankar PetscFunctionBegin; 50*5f2c45f1SShri Abhyankar ierr = DMCreateLocalVector(network->plex,vec);CHKERRQ(ierr); 51*5f2c45f1SShri Abhyankar ierr = VecSetDM(*vec,dm);CHKERRQ(ierr); 52*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 53*5f2c45f1SShri Abhyankar } 54*5f2c45f1SShri Abhyankar 55*5f2c45f1SShri Abhyankar #undef __FUNCT__ 56*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMInitialize_Network" 57*5f2c45f1SShri Abhyankar PetscErrorCode DMInitialize_Network(DM dm) 58*5f2c45f1SShri Abhyankar { 59*5f2c45f1SShri Abhyankar 60*5f2c45f1SShri Abhyankar PetscFunctionBegin; 61*5f2c45f1SShri Abhyankar 62*5f2c45f1SShri Abhyankar dm->ops->view = NULL; 63*5f2c45f1SShri Abhyankar dm->ops->setfromoptions = DMSetFromOptions_Network; 64*5f2c45f1SShri Abhyankar dm->ops->clone = NULL; 65*5f2c45f1SShri Abhyankar dm->ops->setup = DMSetUp_Network; 66*5f2c45f1SShri Abhyankar dm->ops->createglobalvector = DMCreateGlobalVector_Network; 67*5f2c45f1SShri Abhyankar dm->ops->createlocalvector = DMCreateLocalVector_Network; 68*5f2c45f1SShri Abhyankar dm->ops->getlocaltoglobalmapping = NULL; 69*5f2c45f1SShri Abhyankar dm->ops->createfieldis = NULL; 70*5f2c45f1SShri Abhyankar dm->ops->createcoordinatedm = NULL; 71*5f2c45f1SShri Abhyankar dm->ops->getcoloring = 0; 72*5f2c45f1SShri Abhyankar dm->ops->creatematrix = DMCreateMatrix_Network; 73*5f2c45f1SShri Abhyankar dm->ops->createinterpolation = 0; 74*5f2c45f1SShri Abhyankar dm->ops->getaggregates = 0; 75*5f2c45f1SShri Abhyankar dm->ops->getinjection = 0; 76*5f2c45f1SShri Abhyankar dm->ops->refine = 0; 77*5f2c45f1SShri Abhyankar dm->ops->coarsen = 0; 78*5f2c45f1SShri Abhyankar dm->ops->refinehierarchy = 0; 79*5f2c45f1SShri Abhyankar dm->ops->coarsenhierarchy = 0; 80*5f2c45f1SShri Abhyankar dm->ops->globaltolocalbegin = DMGlobalToLocalBegin_Network; 81*5f2c45f1SShri Abhyankar dm->ops->globaltolocalend = DMGlobalToLocalEnd_Network; 82*5f2c45f1SShri Abhyankar dm->ops->localtoglobalbegin = DMLocalToGlobalBegin_Network; 83*5f2c45f1SShri Abhyankar dm->ops->localtoglobalend = DMLocalToGlobalEnd_Network; 84*5f2c45f1SShri Abhyankar dm->ops->destroy = DMDestroy_Network; 85*5f2c45f1SShri Abhyankar dm->ops->createsubdm = NULL; 86*5f2c45f1SShri Abhyankar dm->ops->locatepoints = NULL; 87*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 88*5f2c45f1SShri Abhyankar } 89*5f2c45f1SShri Abhyankar 90*5f2c45f1SShri Abhyankar /*MC 91*5f2c45f1SShri Abhyankar DMNETWORK = "network" - A DM object that encapsulates an unstructured network. The implementation is based on the DM object 92*5f2c45f1SShri Abhyankar DMPlex that manages unstructured grids. Distributed networks use a non-overlapping partitioning of 93*5f2c45f1SShri Abhyankar the edges. In the local representation, Vecs contain all unknowns in the interior and shared boundary. 94*5f2c45f1SShri Abhyankar This is specified by a PetscSection object. Ownership in the global representation is determined by 95*5f2c45f1SShri Abhyankar ownership of the underlying DMPlex points. This is specified by another PetscSection object. 96*5f2c45f1SShri Abhyankar 97*5f2c45f1SShri Abhyankar Level: intermediate 98*5f2c45f1SShri Abhyankar 99*5f2c45f1SShri Abhyankar .seealso: DMType, DMNetworkCreate(), DMCreate(), DMSetType() 100*5f2c45f1SShri Abhyankar M*/ 101*5f2c45f1SShri Abhyankar 102*5f2c45f1SShri Abhyankar #undef __FUNCT__ 103*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreate_Network" 104*5f2c45f1SShri Abhyankar PETSC_EXTERN PetscErrorCode DMCreate_Network(DM dm) 105*5f2c45f1SShri Abhyankar { 106*5f2c45f1SShri Abhyankar DM_Network *network; 107*5f2c45f1SShri Abhyankar PetscErrorCode ierr; 108*5f2c45f1SShri Abhyankar 109*5f2c45f1SShri Abhyankar PetscFunctionBegin; 110*5f2c45f1SShri Abhyankar PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 111*5f2c45f1SShri Abhyankar ierr = PetscNewLog(dm,&network);CHKERRQ(ierr); 112*5f2c45f1SShri Abhyankar dm->data = network; 113*5f2c45f1SShri Abhyankar 114*5f2c45f1SShri Abhyankar network->refct = 1; 115*5f2c45f1SShri Abhyankar network->NNodes = -1; 116*5f2c45f1SShri Abhyankar network->NEdges = -1; 117*5f2c45f1SShri Abhyankar network->nNodes = -1; 118*5f2c45f1SShri Abhyankar network->nEdges = -1; 119*5f2c45f1SShri Abhyankar 120*5f2c45f1SShri Abhyankar ierr = DMInitialize_Network(dm);CHKERRQ(ierr); 121*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 122*5f2c45f1SShri Abhyankar } 123*5f2c45f1SShri Abhyankar 124*5f2c45f1SShri Abhyankar #undef __FUNCT__ 125*5f2c45f1SShri Abhyankar #define __FUNCT__ "DMNetworkCreate" 126*5f2c45f1SShri Abhyankar /*@ 127*5f2c45f1SShri Abhyankar DMNetworkCreate - Creates a DMNetwork object, which encapsulates an unstructured network. 128*5f2c45f1SShri Abhyankar 129*5f2c45f1SShri Abhyankar Collective on MPI_Comm 130*5f2c45f1SShri Abhyankar 131*5f2c45f1SShri Abhyankar Input Parameter: 132*5f2c45f1SShri Abhyankar . comm - The communicator for the DMNetwork object 133*5f2c45f1SShri Abhyankar 134*5f2c45f1SShri Abhyankar Output Parameter: 135*5f2c45f1SShri Abhyankar . network - The DMNetwork object 136*5f2c45f1SShri Abhyankar 137*5f2c45f1SShri Abhyankar Level: beginner 138*5f2c45f1SShri Abhyankar 139*5f2c45f1SShri Abhyankar .keywords: DMNetwork, create 140*5f2c45f1SShri Abhyankar @*/ 141*5f2c45f1SShri Abhyankar PetscErrorCode DMNetworkCreate(MPI_Comm comm, DM *network) 142*5f2c45f1SShri Abhyankar { 143*5f2c45f1SShri Abhyankar PetscErrorCode ierr; 144*5f2c45f1SShri Abhyankar 145*5f2c45f1SShri Abhyankar PetscFunctionBegin; 146*5f2c45f1SShri Abhyankar PetscValidPointer(network,2); 147*5f2c45f1SShri Abhyankar ierr = DMCreate(comm, network);CHKERRQ(ierr); 148*5f2c45f1SShri Abhyankar ierr = DMSetType(*network, DMNETWORK);CHKERRQ(ierr); 149*5f2c45f1SShri Abhyankar PetscFunctionReturn(0); 150*5f2c45f1SShri Abhyankar } 151