diff --git a/grudge/symbolic/mappers/__init__.py b/grudge/symbolic/mappers/__init__.py index d2ef5c66b60d587078857b74fcd01b81c9e54358..a0d16d42ad9b1393592193cc1252ef5a096967d3 100644 --- a/grudge/symbolic/mappers/__init__.py +++ b/grudge/symbolic/mappers/__init__.py @@ -355,37 +355,10 @@ class DistributedMapper(CSECachingMapperMixin, IdentityMapper): distributed_work += op.InterpolationOperator(dd_in=btag_part, dd_out=expr.op.dd_out)(mapped_field) return expr + distributed_work - # if isinstance(expr.op, op.RefFaceMassOperator): - # return expr.op(RankCommunicationMapper(self.connected_parts)(expr.field)) else: return IdentityMapper.map_operator_binding(self, expr) -# class RankCommunicationMapper(CSECachingMapperMixin, IdentityMapper): -# map_common_subexpression_uncached = IdentityMapper.map_common_subexpression -# -# def __init__(self, connected_parts): -# self.connected_parts = connected_parts -# -# def map_operator_binding(self, expr): -# from meshmode.mesh import BTAG_PARTITION -# from meshmode.discretization.connection import (FACE_RESTR_ALL, -# FACE_RESTR_INTERIOR) -# if (isinstance(expr.op, op.InterpolationOperator) -# and expr.op.dd_in.domain_tag is FACE_RESTR_INTERIOR -# and expr.op.dd_out.domain_tag is FACE_RESTR_ALL): -# distributed_work = 0 -# for i_remote_part in self.connected_parts: -# mapped_field = RankGeometryChanger(i_remote_part)(expr.field) -# btag_part = BTAG_PARTITION(i_remote_part) -# distributed_work += op.InterpolationOperator(dd_in=btag_part, -# dd_out=expr.op.dd_out)(mapped_field) -# return expr + distributed_work -# -# else: -# return IdentityMapper.map_operator_binding(self, expr) - - class RankGeometryChanger(CSECachingMapperMixin, IdentityMapper): map_common_subexpression_uncached = IdentityMapper.map_common_subexpression @@ -402,8 +375,11 @@ class RankGeometryChanger(CSECachingMapperMixin, IdentityMapper): % (str(expr), self.prev_dd, self.new_dd)) def map_operator_binding(self, expr): - if isinstance(expr.op, op.OppositeInteriorFaceSwap): - return op.OppositePartitionFaceSwap(dd_in=self.new_dd)( + if (isinstance(expr.op, op.OppositeInteriorFaceSwap) + and expr.op.dd_in == self.prev_dd + and expr.op.dd_out == self.prev_dd): + return op.OppositePartitionFaceSwap(dd_in=self.new_dd, + dd_out=self.new_dd)( self.rec(expr.field)) elif (isinstance(expr.op, op.InterpolationOperator) and expr.op.dd_out == self.prev_dd): diff --git a/grudge/symbolic/operators.py b/grudge/symbolic/operators.py index 7dc28669a405f21c0ed680ad2d44eafc0f481ed2..739e7b6cd39af4f5d98a88f40b3b21b414f9d564 100644 --- a/grudge/symbolic/operators.py +++ b/grudge/symbolic/operators.py @@ -396,7 +396,7 @@ class OppositePartitionFaceSwap(Operator): if self.dd_out != self.dd_in: raise ValueError("dd_out and dd_in must be identical") - self.i_remote_part = dd_in.domain_tag.part_nr + self.i_remote_part = self.dd_in.domain_tag.part_nr mapper_method = intern("map_opposite_partition_face_swap")