xref: /petsc/src/dm/impls/network/networkcreate.c (revision 1a1499c8e13c12f02cf4c59cfd6b0cfcce01ae9b)
15f2c45f1SShri Abhyankar #define PETSCDM_DLL
25f2c45f1SShri Abhyankar #include <petsc-private/dmnetworkimpl.h>    /*I   "petscdmnetwork.h"   I*/
35f2c45f1SShri Abhyankar #include <petscdmda.h>
45f2c45f1SShri Abhyankar 
55f2c45f1SShri Abhyankar #undef __FUNCT__
65f2c45f1SShri Abhyankar #define __FUNCT__ "DMSetFromOptions_Network"
7*1a1499c8SBarry Smith PetscErrorCode  DMSetFromOptions_Network(PetscOptionsObjectType *PetscOptionsObject,DM dm)
85f2c45f1SShri Abhyankar {
95f2c45f1SShri Abhyankar   PetscErrorCode ierr;
105f2c45f1SShri Abhyankar 
115f2c45f1SShri Abhyankar   PetscFunctionBegin;
125f2c45f1SShri Abhyankar   PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
13*1a1499c8SBarry Smith   ierr = PetscOptionsHead(PetscOptionsObject,"DMNetwork Options");CHKERRQ(ierr);
145f2c45f1SShri Abhyankar   ierr = PetscOptionsTail();CHKERRQ(ierr);
155f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
165f2c45f1SShri Abhyankar }
175f2c45f1SShri Abhyankar 
185f2c45f1SShri Abhyankar /* External function declarations here */
195f2c45f1SShri Abhyankar extern PetscErrorCode DMCreateMatrix_Network(DM, Mat*);
205f2c45f1SShri Abhyankar extern PetscErrorCode DMDestroy_Network(DM);
215f2c45f1SShri Abhyankar extern PetscErrorCode DMView_Network(DM, PetscViewer);
225f2c45f1SShri Abhyankar extern PetscErrorCode DMGlobalToLocalBegin_Network(DM, Vec, InsertMode, Vec);
235f2c45f1SShri Abhyankar extern PetscErrorCode DMGlobalToLocalEnd_Network(DM, Vec, InsertMode, Vec);
245f2c45f1SShri Abhyankar extern PetscErrorCode DMLocalToGlobalBegin_Network(DM, Vec, InsertMode, Vec);
255f2c45f1SShri Abhyankar extern PetscErrorCode DMLocalToGlobalEnd_Network(DM, Vec, InsertMode, Vec);
265f2c45f1SShri Abhyankar extern PetscErrorCode DMSetUp_Network(DM);
278415c774SShri Abhyankar extern PetscErrorCode DMClone_Network(DM, DM*);
285f2c45f1SShri Abhyankar 
295f2c45f1SShri Abhyankar 
305f2c45f1SShri Abhyankar #undef __FUNCT__
315f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreateGlobalVector_Network"
325f2c45f1SShri Abhyankar static PetscErrorCode DMCreateGlobalVector_Network(DM dm,Vec *vec)
335f2c45f1SShri Abhyankar {
345f2c45f1SShri Abhyankar   PetscErrorCode ierr;
355f2c45f1SShri Abhyankar   DM_Network     *network = (DM_Network*) dm->data;
365f2c45f1SShri Abhyankar 
375f2c45f1SShri Abhyankar   PetscFunctionBegin;
385f2c45f1SShri Abhyankar   ierr = DMCreateGlobalVector(network->plex,vec);CHKERRQ(ierr);
395f2c45f1SShri Abhyankar   ierr = VecSetDM(*vec,dm);CHKERRQ(ierr);
405f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
415f2c45f1SShri Abhyankar }
425f2c45f1SShri Abhyankar 
435f2c45f1SShri Abhyankar #undef __FUNCT__
445f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreateLocalVector_Network"
455f2c45f1SShri Abhyankar static PetscErrorCode DMCreateLocalVector_Network(DM dm,Vec *vec)
465f2c45f1SShri Abhyankar {
475f2c45f1SShri Abhyankar   PetscErrorCode ierr;
485f2c45f1SShri Abhyankar   DM_Network     *network = (DM_Network*) dm->data;
495f2c45f1SShri Abhyankar 
505f2c45f1SShri Abhyankar   PetscFunctionBegin;
515f2c45f1SShri Abhyankar   ierr = DMCreateLocalVector(network->plex,vec);CHKERRQ(ierr);
525f2c45f1SShri Abhyankar   ierr = VecSetDM(*vec,dm);CHKERRQ(ierr);
535f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
545f2c45f1SShri Abhyankar }
555f2c45f1SShri Abhyankar 
565f2c45f1SShri Abhyankar #undef __FUNCT__
575f2c45f1SShri Abhyankar #define __FUNCT__ "DMInitialize_Network"
585f2c45f1SShri Abhyankar PetscErrorCode DMInitialize_Network(DM dm)
595f2c45f1SShri Abhyankar {
605f2c45f1SShri Abhyankar 
615f2c45f1SShri Abhyankar   PetscFunctionBegin;
625f2c45f1SShri Abhyankar 
635f2c45f1SShri Abhyankar   dm->ops->view                            = NULL;
645f2c45f1SShri Abhyankar   dm->ops->setfromoptions                  = DMSetFromOptions_Network;
658415c774SShri Abhyankar   dm->ops->clone                           = DMClone_Network;
665f2c45f1SShri Abhyankar   dm->ops->setup                           = DMSetUp_Network;
675f2c45f1SShri Abhyankar   dm->ops->createglobalvector              = DMCreateGlobalVector_Network;
685f2c45f1SShri Abhyankar   dm->ops->createlocalvector               = DMCreateLocalVector_Network;
695f2c45f1SShri Abhyankar   dm->ops->getlocaltoglobalmapping         = NULL;
705f2c45f1SShri Abhyankar   dm->ops->createfieldis                   = NULL;
715f2c45f1SShri Abhyankar   dm->ops->createcoordinatedm              = NULL;
725f2c45f1SShri Abhyankar   dm->ops->getcoloring                     = 0;
735f2c45f1SShri Abhyankar   dm->ops->creatematrix                    = DMCreateMatrix_Network;
745f2c45f1SShri Abhyankar   dm->ops->createinterpolation             = 0;
755f2c45f1SShri Abhyankar   dm->ops->getaggregates                   = 0;
765f2c45f1SShri Abhyankar   dm->ops->getinjection                    = 0;
775f2c45f1SShri Abhyankar   dm->ops->refine                          = 0;
785f2c45f1SShri Abhyankar   dm->ops->coarsen                         = 0;
795f2c45f1SShri Abhyankar   dm->ops->refinehierarchy                 = 0;
805f2c45f1SShri Abhyankar   dm->ops->coarsenhierarchy                = 0;
815f2c45f1SShri Abhyankar   dm->ops->globaltolocalbegin              = DMGlobalToLocalBegin_Network;
825f2c45f1SShri Abhyankar   dm->ops->globaltolocalend                = DMGlobalToLocalEnd_Network;
835f2c45f1SShri Abhyankar   dm->ops->localtoglobalbegin              = DMLocalToGlobalBegin_Network;
845f2c45f1SShri Abhyankar   dm->ops->localtoglobalend                = DMLocalToGlobalEnd_Network;
855f2c45f1SShri Abhyankar   dm->ops->destroy                         = DMDestroy_Network;
865f2c45f1SShri Abhyankar   dm->ops->createsubdm                     = NULL;
875f2c45f1SShri Abhyankar   dm->ops->locatepoints                    = NULL;
885f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
895f2c45f1SShri Abhyankar }
905f2c45f1SShri Abhyankar 
918415c774SShri Abhyankar #undef __FUNCT__
928415c774SShri Abhyankar #define __FUNCT__ "DMClone_Network"
938415c774SShri Abhyankar PetscErrorCode DMClone_Network(DM dm, DM *newdm)
948415c774SShri Abhyankar {
958415c774SShri Abhyankar   DM_Network     *network = (DM_Network *) dm->data;
968415c774SShri Abhyankar   PetscErrorCode ierr;
978415c774SShri Abhyankar 
988415c774SShri Abhyankar   PetscFunctionBegin;
998415c774SShri Abhyankar   network->refct++;
1008415c774SShri Abhyankar   (*newdm)->data = network;
1018415c774SShri Abhyankar   ierr = PetscObjectChangeTypeName((PetscObject) *newdm, DMNETWORK);CHKERRQ(ierr);
1028415c774SShri Abhyankar   ierr = DMInitialize_Network(*newdm);CHKERRQ(ierr);
1038415c774SShri Abhyankar   PetscFunctionReturn(0);
1048415c774SShri Abhyankar }
1058415c774SShri Abhyankar 
1065f2c45f1SShri Abhyankar /*MC
1075f2c45f1SShri Abhyankar   DMNETWORK = "network" - A DM object that encapsulates an unstructured network. The implementation is based on the DM object
1085f2c45f1SShri Abhyankar                           DMPlex that manages unstructured grids. Distributed networks use a non-overlapping partitioning of
1095f2c45f1SShri Abhyankar                           the edges. In the local representation, Vecs contain all unknowns in the interior and shared boundary.
1105f2c45f1SShri Abhyankar                           This is specified by a PetscSection object. Ownership in the global representation is determined by
1115f2c45f1SShri Abhyankar                           ownership of the underlying DMPlex points. This is specified by another PetscSection object.
1125f2c45f1SShri Abhyankar 
1135f2c45f1SShri Abhyankar   Level: intermediate
1145f2c45f1SShri Abhyankar 
1155f2c45f1SShri Abhyankar .seealso: DMType, DMNetworkCreate(), DMCreate(), DMSetType()
1165f2c45f1SShri Abhyankar M*/
1175f2c45f1SShri Abhyankar 
1185f2c45f1SShri Abhyankar #undef __FUNCT__
1195f2c45f1SShri Abhyankar #define __FUNCT__ "DMCreate_Network"
1205f2c45f1SShri Abhyankar PETSC_EXTERN PetscErrorCode DMCreate_Network(DM dm)
1215f2c45f1SShri Abhyankar {
1225f2c45f1SShri Abhyankar   DM_Network     *network;
1235f2c45f1SShri Abhyankar   PetscErrorCode ierr;
1245f2c45f1SShri Abhyankar 
1255f2c45f1SShri Abhyankar   PetscFunctionBegin;
1265f2c45f1SShri Abhyankar   PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
1275f2c45f1SShri Abhyankar   ierr     = PetscNewLog(dm,&network);CHKERRQ(ierr);
1285f2c45f1SShri Abhyankar   dm->data = network;
1295f2c45f1SShri Abhyankar 
1305f2c45f1SShri Abhyankar   network->refct          = 1;
1315f2c45f1SShri Abhyankar   network->NNodes         = -1;
1325f2c45f1SShri Abhyankar   network->NEdges         = -1;
1335f2c45f1SShri Abhyankar   network->nNodes         = -1;
1345f2c45f1SShri Abhyankar   network->nEdges         = -1;
1355f2c45f1SShri Abhyankar 
1365f2c45f1SShri Abhyankar   ierr = DMInitialize_Network(dm);CHKERRQ(ierr);
1375f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
1385f2c45f1SShri Abhyankar }
1395f2c45f1SShri Abhyankar 
1405f2c45f1SShri Abhyankar #undef __FUNCT__
1415f2c45f1SShri Abhyankar #define __FUNCT__ "DMNetworkCreate"
1425f2c45f1SShri Abhyankar /*@
1435f2c45f1SShri Abhyankar   DMNetworkCreate - Creates a DMNetwork object, which encapsulates an unstructured network.
1445f2c45f1SShri Abhyankar 
1455f2c45f1SShri Abhyankar   Collective on MPI_Comm
1465f2c45f1SShri Abhyankar 
1475f2c45f1SShri Abhyankar   Input Parameter:
1485f2c45f1SShri Abhyankar . comm - The communicator for the DMNetwork object
1495f2c45f1SShri Abhyankar 
1505f2c45f1SShri Abhyankar   Output Parameter:
1515f2c45f1SShri Abhyankar . network  - The DMNetwork object
1525f2c45f1SShri Abhyankar 
1535f2c45f1SShri Abhyankar   Level: beginner
1545f2c45f1SShri Abhyankar 
1555f2c45f1SShri Abhyankar .keywords: DMNetwork, create
1565f2c45f1SShri Abhyankar @*/
1575f2c45f1SShri Abhyankar PetscErrorCode DMNetworkCreate(MPI_Comm comm, DM *network)
1585f2c45f1SShri Abhyankar {
1595f2c45f1SShri Abhyankar   PetscErrorCode ierr;
1605f2c45f1SShri Abhyankar 
1615f2c45f1SShri Abhyankar   PetscFunctionBegin;
1625f2c45f1SShri Abhyankar   PetscValidPointer(network,2);
1635f2c45f1SShri Abhyankar   ierr = DMCreate(comm, network);CHKERRQ(ierr);
1645f2c45f1SShri Abhyankar   ierr = DMSetType(*network, DMNETWORK);CHKERRQ(ierr);
1655f2c45f1SShri Abhyankar   PetscFunctionReturn(0);
1665f2c45f1SShri Abhyankar }
167