Actual source code: networkcreate.c
petsc-3.6.1 2015-08-06
1: #define PETSCDM_DLL
2: #include <petsc/private/dmnetworkimpl.h> /*I "petscdmnetwork.h" I*/
3: #include <petscdmda.h>
7: PetscErrorCode DMSetFromOptions_Network(PetscOptions *PetscOptionsObject,DM dm)
8: {
13: PetscOptionsHead(PetscOptionsObject,"DMNetwork Options");
14: PetscOptionsTail();
15: return(0);
16: }
18: /* External function declarations here */
19: extern PetscErrorCode DMCreateMatrix_Network(DM, Mat*);
20: extern PetscErrorCode DMDestroy_Network(DM);
21: extern PetscErrorCode DMView_Network(DM, PetscViewer);
22: extern PetscErrorCode DMGlobalToLocalBegin_Network(DM, Vec, InsertMode, Vec);
23: extern PetscErrorCode DMGlobalToLocalEnd_Network(DM, Vec, InsertMode, Vec);
24: extern PetscErrorCode DMLocalToGlobalBegin_Network(DM, Vec, InsertMode, Vec);
25: extern PetscErrorCode DMLocalToGlobalEnd_Network(DM, Vec, InsertMode, Vec);
26: extern PetscErrorCode DMSetUp_Network(DM);
27: extern PetscErrorCode DMClone_Network(DM, DM*);
32: static PetscErrorCode DMCreateGlobalVector_Network(DM dm,Vec *vec)
33: {
35: DM_Network *network = (DM_Network*) dm->data;
38: DMCreateGlobalVector(network->plex,vec);
39: VecSetDM(*vec,dm);
40: return(0);
41: }
45: static PetscErrorCode DMCreateLocalVector_Network(DM dm,Vec *vec)
46: {
48: DM_Network *network = (DM_Network*) dm->data;
51: DMCreateLocalVector(network->plex,vec);
52: VecSetDM(*vec,dm);
53: return(0);
54: }
58: PetscErrorCode DMInitialize_Network(DM dm)
59: {
63: dm->ops->view = NULL;
64: dm->ops->setfromoptions = DMSetFromOptions_Network;
65: dm->ops->clone = DMClone_Network;
66: dm->ops->setup = DMSetUp_Network;
67: dm->ops->createglobalvector = DMCreateGlobalVector_Network;
68: dm->ops->createlocalvector = DMCreateLocalVector_Network;
69: dm->ops->getlocaltoglobalmapping = NULL;
70: dm->ops->createfieldis = NULL;
71: dm->ops->createcoordinatedm = NULL;
72: dm->ops->getcoloring = 0;
73: dm->ops->creatematrix = DMCreateMatrix_Network;
74: dm->ops->createinterpolation = 0;
75: dm->ops->getaggregates = 0;
76: dm->ops->getinjection = 0;
77: dm->ops->refine = 0;
78: dm->ops->coarsen = 0;
79: dm->ops->refinehierarchy = 0;
80: dm->ops->coarsenhierarchy = 0;
81: dm->ops->globaltolocalbegin = DMGlobalToLocalBegin_Network;
82: dm->ops->globaltolocalend = DMGlobalToLocalEnd_Network;
83: dm->ops->localtoglobalbegin = DMLocalToGlobalBegin_Network;
84: dm->ops->localtoglobalend = DMLocalToGlobalEnd_Network;
85: dm->ops->destroy = DMDestroy_Network;
86: dm->ops->createsubdm = NULL;
87: dm->ops->locatepoints = NULL;
88: return(0);
89: }
93: PetscErrorCode DMClone_Network(DM dm, DM *newdm)
94: {
95: DM_Network *network = (DM_Network *) dm->data;
99: network->refct++;
100: (*newdm)->data = network;
101: PetscObjectChangeTypeName((PetscObject) *newdm, DMNETWORK);
102: DMInitialize_Network(*newdm);
103: return(0);
104: }
106: /*MC
107: DMNETWORK = "network" - A DM object that encapsulates an unstructured network. The implementation is based on the DM object
108: DMPlex that manages unstructured grids. Distributed networks use a non-overlapping partitioning of
109: the edges. In the local representation, Vecs contain all unknowns in the interior and shared boundary.
110: This is specified by a PetscSection object. Ownership in the global representation is determined by
111: ownership of the underlying DMPlex points. This is specified by another PetscSection object.
113: Level: intermediate
115: .seealso: DMType, DMNetworkCreate(), DMCreate(), DMSetType()
116: M*/
120: PETSC_EXTERN PetscErrorCode DMCreate_Network(DM dm)
121: {
122: DM_Network *network;
127: PetscNewLog(dm,&network);
128: dm->data = network;
130: network->refct = 1;
131: network->NNodes = -1;
132: network->NEdges = -1;
133: network->nNodes = -1;
134: network->nEdges = -1;
136: DMInitialize_Network(dm);
137: return(0);
138: }
142: /*@
143: DMNetworkCreate - Creates a DMNetwork object, which encapsulates an unstructured network.
145: Collective on MPI_Comm
147: Input Parameter:
148: . comm - The communicator for the DMNetwork object
150: Output Parameter:
151: . network - The DMNetwork object
153: Level: beginner
155: .keywords: DMNetwork, create
156: @*/
157: PetscErrorCode DMNetworkCreate(MPI_Comm comm, DM *network)
158: {
163: DMCreate(comm, network);
164: DMSetType(*network, DMNETWORK);
165: return(0);
166: }