xref: /petsc/src/dm/impls/network/networkcreate.c (revision 5f2c45f19311bc458674ee729727e1c743e9ad54)
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