From 5994a40f86fa61f07beca9888b74ba11d5e39c87 Mon Sep 17 00:00:00 2001 From: "[6~" <inform@tiker.net> Date: Sun, 17 May 2020 14:12:03 -0500 Subject: [PATCH] Standardize all boundary DOFDescs to use DTAG_BOUNDARY, rename DOFDesc.is_boundary -> is_boundary_or_partition_interface --- grudge/discretization.py | 13 +++++++------ grudge/symbolic/mappers/__init__.py | 15 +++++++-------- grudge/symbolic/operators.py | 9 ++++++--- grudge/symbolic/primitives.py | 17 ++++++----------- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/grudge/discretization.py b/grudge/discretization.py index 730c9d3e..d24fb2c0 100644 --- a/grudge/discretization.py +++ b/grudge/discretization.py @@ -131,9 +131,10 @@ class DGDiscretizationWithBoundaries(DiscretizationBase): # FIXME raise NotImplementedError("Distributed communication with quadrature") - assert isinstance(dd.domain_tag, sym.BTAG_PARTITION) + assert isinstance(dd.domain_tag, sym.DTAG_BOUNDARY) + assert isinstance(dd.domain_tag.tag, sym.BTAG_PARTITION) - return self._dist_boundary_connections[dd.domain_tag.part_nr] + return self._dist_boundary_connections[dd.domain_tag.tag.part_nr] @memoize_method def discr_from_dd(self, dd): @@ -161,8 +162,8 @@ class DGDiscretizationWithBoundaries(DiscretizationBase): return self._all_faces_volume_connection().to_discr elif dd.domain_tag is sym.FACE_RESTR_INTERIOR: return self._interior_faces_connection().to_discr - elif dd.is_boundary(): - return self._boundary_connection(dd.domain_tag).to_discr + elif dd.is_boundary_or_partition_interface(): + return self._boundary_connection(dd.domain_tag.tag).to_discr else: raise ValueError("DOF desc tag not understood: " + str(dd)) @@ -239,9 +240,9 @@ class DGDiscretizationWithBoundaries(DiscretizationBase): return self._all_faces_volume_connection() if to_dd.domain_tag is sym.FACE_RESTR_INTERIOR: return self._interior_faces_connection() - elif to_dd.is_boundary(): + elif to_dd.is_boundary_or_partition_interface(): assert from_dd.quadrature_tag is sym.QTAG_NONE - return self._boundary_connection(to_dd.domain_tag) + return self._boundary_connection(to_dd.domain_tag.tag) elif to_dd.is_volume(): from meshmode.discretization.connection import \ make_same_mesh_connection diff --git a/grudge/symbolic/mappers/__init__.py b/grudge/symbolic/mappers/__init__.py index 8107b4cb..21abb9e8 100644 --- a/grudge/symbolic/mappers/__init__.py +++ b/grudge/symbolic/mappers/__init__.py @@ -930,14 +930,13 @@ class EmptyFluxKiller(CSECachingMapperMixin, IdentityMapper): def map_operator_binding(self, expr): from meshmode.mesh import is_boundary_tag_empty if (isinstance(expr.op, sym.InterpolationOperator) - and expr.op.dd_out.is_boundary() - and expr.op.dd_out.domain_tag not in [ - sym.FACE_RESTR_ALL, sym.FACE_RESTR_INTERIOR] - and is_boundary_tag_empty(self.mesh, - expr.op.dd_out.domain_tag)): - return 0 - else: - return IdentityMapper.map_operator_binding(self, expr) + and expr.op.dd_out.is_boundary_or_partition_interface()): + domain_tag = expr.op.dd_out.domain_tag + assert isinstance(domain_tag, sym.DTAG_BOUNDARY) + if is_boundary_tag_empty(self.mesh, domain_tag.tag): + return 0 + + return IdentityMapper.map_operator_binding(self, expr) class _InnerDerivativeJoiner(pymbolic.mapper.RecursiveMapper): diff --git a/grudge/symbolic/operators.py b/grudge/symbolic/operators.py index a1899ed2..7b315317 100644 --- a/grudge/symbolic/operators.py +++ b/grudge/symbolic/operators.py @@ -472,12 +472,15 @@ class OppositePartitionFaceSwap(Operator): dd_out = dd_in super(OppositePartitionFaceSwap, self).__init__(dd_in, dd_out) - if not isinstance(self.dd_in.domain_tag, sym.BTAG_PARTITION): - raise ValueError("dd_in must be a partition boundary faces domain") + if not (isinstance(self.dd_in.domain_tag, sym.DTAG_BOUNDARY) + and isinstance(self.dd_in.domain_tag.tag, sym.BTAG_PARTITION)): + raise ValueError( + "dd_in must be a partition boundary faces domain, not '%s'" + % self.dd_in.domain_tag) if self.dd_out != self.dd_in: raise ValueError("dd_out and dd_in must be identical") - self.i_remote_part = self.dd_in.domain_tag.part_nr + self.i_remote_part = self.dd_in.domain_tag.tag.part_nr assert unique_id is None or isinstance(unique_id, int) self.unique_id = unique_id diff --git a/grudge/symbolic/primitives.py b/grudge/symbolic/primitives.py index 0e57fcef..0cd8c6ee 100644 --- a/grudge/symbolic/primitives.py +++ b/grudge/symbolic/primitives.py @@ -149,7 +149,7 @@ class DOFDesc(object): .. automethod:: is_scalar .. automethod:: is_discretized .. automethod:: is_volume - .. automethod:: is_boundary + .. automethod:: is_boundary_or_partition_interface .. automethod:: is_trace .. automethod:: uses_quadrature .. automethod:: with_qtag @@ -203,10 +203,9 @@ class DOFDesc(object): elif domain_tag is None: pass elif isinstance(domain_tag, BTAG_PARTITION): - pass + domain_tag = DTAG_BOUNDARY(domain_tag) elif domain_tag in [BTAG_ALL, BTAG_REALLY_ALL, BTAG_NONE]: - # FIXME: Should wrap these in DTAG_BOUNDARY - pass + domain_tag = DTAG_BOUNDARY(domain_tag) elif isinstance(domain_tag, DTAG_BOUNDARY): pass else: @@ -230,15 +229,11 @@ class DOFDesc(object): def is_volume(self): return self.domain_tag is DTAG_VOLUME_ALL - def is_boundary(self): - return ( - self.domain_tag in [ - BTAG_ALL, BTAG_NONE, BTAG_REALLY_ALL] - or isinstance(self.domain_tag, BTAG_PARTITION) - or isinstance(self.domain_tag, DTAG_BOUNDARY)) + def is_boundary_or_partition_interface(self): + return isinstance(self.domain_tag, DTAG_BOUNDARY) def is_trace(self): - return (self.is_boundary() + return (self.is_boundary_or_partition_interface() or self.domain_tag in [ FACE_RESTR_ALL, FACE_RESTR_INTERIOR]) -- GitLab