Skip to content

Commit fac694e

Browse files
author
Umberto Zerbinati
committed
DG Labelling
Signed-off-by: Umberto Zerbinati <[email protected]>
1 parent 33a8698 commit fac694e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

ngsPETSc/plex.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,24 @@ def createPETScDMPlex(self, mesh):
183183
plex = PETSc.DMPlex().createFromCellList(dim, T, V, comm=comm)
184184
plex.setName(self.name)
185185
vStart, _ = plex.getDepthStratum(0)
186+
nMat = len(self.ngMesh.GetRegionNames(dim=2)) # number of materials
187+
nBnd = len(self.ngMesh.GetRegionNames(dim=1)) # number of boundaries
186188
if surfMesh:
187189
for e in self.ngMesh.Elements1D():
188190
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
189191
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.surfaces[1]))
192+
if nMat > 1:
193+
cone = plex.getCone(join[0])
194+
for i in range(len(cone)):
195+
plex.setLabelValue(FACE_SETS_LABEL, cone[i], nBnd+int(e.index))
190196
else:
191197
for e in self.ngMesh.Elements2D():
192198
join = plex.getFullJoin([vStart+v.nr-1 for v in e.vertices])
193199
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.index))
200+
if nMat > 1:
201+
cone = plex.getCone(join[0])
202+
for i in range(len(cone)):
203+
plex.setLabelValue(FACE_SETS_LABEL, cone[i], nBnd+int(e.index))
194204
for e in self.ngMesh.Elements1D():
195205
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
196206
plex.setLabelValue(EDGE_SETS_LABEL, join[0], int(e.index))
@@ -209,9 +219,16 @@ def createPETScDMPlex(self, mesh):
209219
plex = PETSc.DMPlex().createFromCellList(2, T, V, comm=comm)
210220
plex.setName(self.name)
211221
vStart, _ = plex.getDepthStratum(0) # vertices
222+
nMat = len(self.ngMesh.GetRegionNames(dim=2)) # number of materials
223+
nBnd = len(self.ngMesh.GetRegionNames(dim=1)) # number of boundaries
212224
for e in self.ngMesh.Elements1D():
213225
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
214226
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.index))
227+
# If we have more than one material, we set the facet with different labels
228+
if nMat > 1:
229+
cone = plex.getCone(join[0])
230+
for i in range(len(cone)):
231+
plex.setLabelValue(FACE_SETS_LABEL, cone[i], nBnd+int(e.index))
215232
if not (1 == self.ngMesh.Elements2D().NumPy()["index"]).all():
216233
for e in self.ngMesh.Elements2D():
217234
join = plex.getFullJoin([vStart+v.nr-1 for v in e.vertices])

ngsPETSc/utils/firedrake/meshes.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,17 @@ def createFromTopology(self, topology, name, comm):
255255
#Adding refine_marked_elements and curve_field methods
256256
setattr(fd.MeshGeometry, "refine_marked_elements", refineMarkedElements)
257257
setattr(fd.MeshGeometry, "curve_field", curveField)
258+
#Adding labels for boundary regions and regions
259+
Regions = self.meshMap.ngMesh.GetRegionNames(dim=geometric_dim)
260+
bndRegions = self.meshMap.ngMesh.GetRegionNames(dim=geometric_dim-1)
261+
numberRegions = len(Regions)
262+
numberBndRegions = len(bndRegions)
263+
self.firedrakeMesh.labels = {}
264+
for i in range(numberBndRegions):
265+
if bndRegions[i] not in self.firedrakeMesh.labels:
266+
self.firedrakeMesh.labels[bndRegions[i]] = []
267+
self.firedrakeMesh.labels[bndRegions[i]].append(i+1)
268+
for i in range(numberRegions):
269+
if Regions[i] not in self.firedrakeMesh.labels:
270+
self.firedrakeMesh.labels[Regions[i]] = []
271+
self.firedrakeMesh.labels[Regions[i]].append(i+1+numberBndRegions)

0 commit comments

Comments
 (0)