Skip to content

Commit 1b23e14

Browse files
committed
DirichletBC: support string subdomain_id
1 parent 43a5050 commit 1b23e14

3 files changed

Lines changed: 6 additions & 0 deletions

File tree

firedrake/functionspacedata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,8 @@ def __str__(self):
478478

479479
@PETSc.Log.EventDecorator()
480480
def boundary_nodes(self, V, sub_domain):
481+
region_names = V.mesh().topology_dm.getAttr("face_region_names") or {}
482+
sub_domain = region_names.get(sub_domain, sub_domain)
481483
if sub_domain in ["bottom", "top"]:
482484
if not V.extruded:
483485
raise ValueError("Invalid subdomain '%s' for non-extruded mesh",

firedrake/mg/mesh.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ def MeshHierarchy(mesh, refinement_levels,
129129
dm_cell_type, = mesh.dm_cell_types
130130
tdim = mesh.topology_dm.getDimension()
131131
cdm = dmcommon.submesh_create(mesh.topology_dm, tdim, "celltype", dm_cell_type, True)
132+
cdm.setAttr("face_region_names", mesh.topology_dm.getAttr("face_region_names"))
132133
cdm.removeLabel("pyop2_core")
133134
cdm.removeLabel("pyop2_owned")
134135
cdm.removeLabel("pyop2_ghost")
@@ -142,6 +143,7 @@ def MeshHierarchy(mesh, refinement_levels,
142143
if i % refinements_per_level == 0:
143144
before(cdm, i)
144145
rdm = cdm.refine()
146+
rdm.setAttr("face_region_names", cdm.getAttr("face_region_names"))
145147
if i % refinements_per_level == 0:
146148
after(rdm, i)
147149
dms.append(rdm)

firedrake/mg/netgen.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def uniformRefinementRoutine(ngmesh, cdm):
155155
logger.info(f"\t\t\t[{time.time()}]Refining the plex")
156156
cdm.setRefinementUniform(True)
157157
rdm = cdm.refine()
158+
rdm.setAttr("face_region_names", cdm.getAttr("face_region_names"))
158159
rdm.removeLabel("pyop2_core")
159160
rdm.removeLabel("pyop2_owned")
160161
rdm.removeLabel("pyop2_ghost")
@@ -267,6 +268,7 @@ def NetgenHierarchy(mesh, levs, flags, distribution_parameters=None):
267268
# Make a plex (cdm) without overlap.
268269
dm_cell_type, = mesh.dm_cell_types
269270
cdm = dmcommon.submesh_create(mesh.topology_dm, tdim, "celltype", dm_cell_type, True)
271+
cdm.setAttr("face_region_names", mesh.topology_dm.getAttr("face_region_names"))
270272
cdm.removeLabel("pyop2_core")
271273
cdm.removeLabel("pyop2_owned")
272274
cdm.removeLabel("pyop2_ghost")

0 commit comments

Comments
 (0)