diff --git a/grudge/models/advection.py b/grudge/models/advection.py index a9033881f1f724af153a17f3d936b9d1b4be0703..4165724b73c714ebf93da8143a833847d114ecdf 100644 --- a/grudge/models/advection.py +++ b/grudge/models/advection.py @@ -163,7 +163,7 @@ class WeakAdvectionOperator(AdvectionOperatorBase): get_flux_operator, make_stiffness_t, InverseMassOperator, - BoundarizeOperator, + RestrictToBoundary, QuadratureGridUpsampler, QuadratureInteriorFacesGridUpsampler) @@ -174,7 +174,7 @@ class WeakAdvectionOperator(AdvectionOperatorBase): # boundary conditions ------------------------------------------------- bc_in = Field("bc_in") - bc_out = BoundarizeOperator(self.outflow_tag)*u + bc_out = RestrictToBoundary(self.outflow_tag)*u stiff_t = make_stiffness_t(self.dimensions) m_inv = InverseMassOperator() @@ -281,7 +281,7 @@ class VariableCoefficientAdvectionOperator(HyperbolicOperator): # {{{ operator preliminaries ------------------------------------------ from grudge.symbolic import (Field, BoundaryPair, get_flux_operator, make_stiffness_t, InverseMassOperator, make_sym_vector, - ElementwiseMaxOperator, BoundarizeOperator) + ElementwiseMaxOperator, RestrictToBoundary) from grudge.symbolic.primitives import make_common_subexpression as cse @@ -309,9 +309,9 @@ class VariableCoefficientAdvectionOperator(HyperbolicOperator): # {{{ boundary conditions --------------------------------------------- from grudge.mesh import BTAG_ALL - bc_c = to_quad(BoundarizeOperator(BTAG_ALL)(c)) + bc_c = to_quad(RestrictToBoundary(BTAG_ALL)(c)) bc_u = to_quad(Field("bc_u")) - bc_v = to_quad(BoundarizeOperator(BTAG_ALL)(v)) + bc_v = to_quad(RestrictToBoundary(BTAG_ALL)(v)) if self.bc_u_f is "None": bc_w = join_fields(0, bc_v, bc_c) diff --git a/grudge/models/em.py b/grudge/models/em.py index e573fe68f50f7eaeaf62bf670f453eaca57146fc..3a2b70cbac3d00dab20420e060ceb073f6c1447a 100644 --- a/grudge/models/em.py +++ b/grudge/models/em.py @@ -227,9 +227,9 @@ class MaxwellOperator(HyperbolicOperator): "Construct part of the flux operator template for PEC boundary conditions" e, h = self.split_eh(self.field_placeholder(w)) - from grudge.symbolic import BoundarizeOperator - pec_e = BoundarizeOperator(self.pec_tag)(e) - pec_h = BoundarizeOperator(self.pec_tag)(h) + from grudge.symbolic import RestrictToBoundary + pec_e = RestrictToBoundary(self.pec_tag)(e) + pec_h = RestrictToBoundary(self.pec_tag)(h) return join_fields(-pec_e, pec_h) @@ -237,9 +237,9 @@ class MaxwellOperator(HyperbolicOperator): "Construct part of the flux operator template for PMC boundary conditions" e, h = self.split_eh(self.field_placeholder(w)) - from grudge.symbolic import BoundarizeOperator - pmc_e = BoundarizeOperator(self.pmc_tag)(e) - pmc_h = BoundarizeOperator(self.pmc_tag)(h) + from grudge.symbolic import RestrictToBoundary + pmc_e = RestrictToBoundary(self.pmc_tag)(e) + pmc_h = RestrictToBoundary(self.pmc_tag)(h) return join_fields(pmc_e, -pmc_h) @@ -251,7 +251,7 @@ class MaxwellOperator(HyperbolicOperator): from grudge.symbolic import normal absorb_normal = normal(self.absorb_tag, self.dimensions) - from grudge.symbolic import BoundarizeOperator, Field + from grudge.symbolic import RestrictToBoundary, Field e, h = self.split_eh(self.field_placeholder(w)) @@ -260,15 +260,15 @@ class MaxwellOperator(HyperbolicOperator): mu = self.mu else: epsilon = cse( - BoundarizeOperator(self.absorb_tag)(Field("epsilon"))) + RestrictToBoundary(self.absorb_tag)(Field("epsilon"))) mu = cse( - BoundarizeOperator(self.absorb_tag)(Field("mu"))) + RestrictToBoundary(self.absorb_tag)(Field("mu"))) absorb_Z = (mu/epsilon)**0.5 absorb_Y = 1/absorb_Z - absorb_e = BoundarizeOperator(self.absorb_tag)(e) - absorb_h = BoundarizeOperator(self.absorb_tag)(h) + absorb_e = RestrictToBoundary(self.absorb_tag)(e) + absorb_h = RestrictToBoundary(self.absorb_tag)(h) bc = join_fields( absorb_e + 1/2*(self.space_cross_h(absorb_normal, self.space_cross_e( @@ -350,10 +350,10 @@ class MaxwellOperator(HyperbolicOperator): if self.fixed_material: return bc else: - from grudge.symbolic import BoundarizeOperator + from grudge.symbolic import RestrictToBoundary return join_fields( - cse(BoundarizeOperator(tag)(epsilon)), - cse(BoundarizeOperator(tag)(mu)), + cse(RestrictToBoundary(tag)(epsilon)), + cse(RestrictToBoundary(tag)(mu)), bc) return ( diff --git a/grudge/models/gas_dynamics/__init__.py b/grudge/models/gas_dynamics/__init__.py index 3262cc6fd16e957b07315685884aed0d013c5ff2..e5a8ddc9418f1bac4776f252d2951fab3d3c1a2b 100644 --- a/grudge/models/gas_dynamics/__init__.py +++ b/grudge/models/gas_dynamics/__init__.py @@ -498,8 +498,8 @@ class GasDynamicsOperator(TimeDependentOperator): c0 = (self.equation_of_state.gamma * p0 / rho0)**0.5 - from grudge.symbolic import BoundarizeOperator - bdrize_op = BoundarizeOperator(tag) + from grudge.symbolic import RestrictToBoundary + bdrize_op = RestrictToBoundary(tag) class SingleBCInfo(Record): pass @@ -567,8 +567,8 @@ class GasDynamicsOperator(TimeDependentOperator): return self.inflow_state_inner(normal, bc, "noslip") def wall_state(self, state): - from grudge.symbolic import BoundarizeOperator - bc = BoundarizeOperator(self.wall_tag)(state) + from grudge.symbolic import RestrictToBoundary + bc = RestrictToBoundary(self.wall_tag)(state) wall_rho = self.rho(bc) wall_e = self.e(bc) # <3 eve wall_rho_u = self.rho_u(bc) @@ -596,12 +596,12 @@ class GasDynamicsOperator(TimeDependentOperator): def get_conservative_boundary_conditions(self): state = self.state() - from grudge.symbolic import BoundarizeOperator + from grudge.symbolic import RestrictToBoundary return { self.supersonic_inflow_tag: make_sym_vector("bc_q_supersonic_in", self.dimensions+2), self.supersonic_outflow_tag: - BoundarizeOperator(self.supersonic_outflow_tag)( + RestrictToBoundary(self.supersonic_outflow_tag)( (state)), self.wall_tag: self.wall_state(state), } @@ -664,8 +664,8 @@ class GasDynamicsOperator(TimeDependentOperator): return cbstate[expr.index] elif isinstance(expr, Variable) and expr.name =="sensor": - from grudge.symbolic import BoundarizeOperator - result = BoundarizeOperator(tag)(self.sensor()) + from grudge.symbolic import RestrictToBoundary + result = RestrictToBoundary(tag)(self.sensor()) return cse(to_bdry_quad(result), "bdry_sensor") from grudge.symbolic import SubstitutionMapper diff --git a/grudge/models/wave.py b/grudge/models/wave.py index f016699347aaa1fe3655e0b34170a2b7ce254592..9591573e0b7cc16b2d86f4b55632b719a5e371bd 100644 --- a/grudge/models/wave.py +++ b/grudge/models/wave.py @@ -117,8 +117,8 @@ class StrongWaveOperator(HyperbolicOperator): # boundary conditions ------------------------------------------------- # dirichlet BCs ------------------------------------------------------- - dir_u = sym.BoundarizeOperator(self.dirichlet_tag) * u - dir_v = sym.BoundarizeOperator(self.dirichlet_tag) * v + dir_u = sym.RestrictToBoundary(self.dirichlet_tag) * u + dir_v = sym.RestrictToBoundary(self.dirichlet_tag) * v if self.dirichlet_bc_f: # FIXME from warnings import warn @@ -131,15 +131,15 @@ class StrongWaveOperator(HyperbolicOperator): dir_bc = join_fields(-dir_u, dir_v) # neumann BCs --------------------------------------------------------- - neu_u = sym.BoundarizeOperator(self.neumann_tag) * u - neu_v = sym.BoundarizeOperator(self.neumann_tag) * v + neu_u = sym.RestrictToBoundary(self.neumann_tag) * u + neu_v = sym.RestrictToBoundary(self.neumann_tag) * v neu_bc = join_fields(neu_u, -neu_v) # radiation BCs ------------------------------------------------------- rad_normal = sym.normal(self.radiation_tag, d) - rad_u = sym.BoundarizeOperator(self.radiation_tag) * u - rad_v = sym.BoundarizeOperator(self.radiation_tag) * v + rad_u = sym.RestrictToBoundary(self.radiation_tag) * u + rad_v = sym.RestrictToBoundary(self.radiation_tag) * v rad_bc = join_fields( 0.5*(rad_u - self.sign*np.dot(rad_normal, rad_v)), @@ -274,25 +274,25 @@ class VariableVelocityStrongWaveOperator(HyperbolicOperator): # {{{ boundary conditions # Dirichlet - dir_c = sym.BoundarizeOperator(self.dirichlet_tag) * self.c - dir_u = sym.BoundarizeOperator(self.dirichlet_tag) * u - dir_v = sym.BoundarizeOperator(self.dirichlet_tag) * v + dir_c = sym.RestrictToBoundary(self.dirichlet_tag) * self.c + dir_u = sym.RestrictToBoundary(self.dirichlet_tag) * u + dir_v = sym.RestrictToBoundary(self.dirichlet_tag) * v dir_bc = join_fields(dir_c, -dir_u, dir_v) # Neumann - neu_c = sym.BoundarizeOperator(self.neumann_tag) * self.c - neu_u = sym.BoundarizeOperator(self.neumann_tag) * u - neu_v = sym.BoundarizeOperator(self.neumann_tag) * v + neu_c = sym.RestrictToBoundary(self.neumann_tag) * self.c + neu_u = sym.RestrictToBoundary(self.neumann_tag) * u + neu_v = sym.RestrictToBoundary(self.neumann_tag) * v neu_bc = join_fields(neu_c, neu_u, -neu_v) # Radiation rad_normal = sym.make_normal(self.radiation_tag, d) - rad_c = sym.BoundarizeOperator(self.radiation_tag) * self.c - rad_u = sym.BoundarizeOperator(self.radiation_tag) * u - rad_v = sym.BoundarizeOperator(self.radiation_tag) * v + rad_c = sym.RestrictToBoundary(self.radiation_tag) * self.c + rad_u = sym.RestrictToBoundary(self.radiation_tag) * u + rad_v = sym.RestrictToBoundary(self.radiation_tag) * v rad_bc = join_fields( rad_c, diff --git a/grudge/symbolic/mappers/__init__.py b/grudge/symbolic/mappers/__init__.py index e47214d1b88950ae32310e1ac4437f2ec1c72358..815e624455d6421883a17d7c2703d36da47776ca 100644 --- a/grudge/symbolic/mappers/__init__.py +++ b/grudge/symbolic/mappers/__init__.py @@ -400,8 +400,8 @@ class OperatorSpecializer(CSECachingMapperMixin, IdentityMapper): and isinstance(field_type, type_info.BoundaryVectorBase)): # potential shortcut: #if (isinstance(expr.field, OperatorBinding) - #and isinstance(expr.field.op, BoundarizeOperator)): - #return QuadratureBoundarizeOperator( + #and isinstance(expr.field.op, RestrictToBoundary)): + #return QuadratureRestrictToBoundary( #expr.field.op.tag, expr.op.quadrature_tag)( #self.rec(expr.field.field)) @@ -409,8 +409,8 @@ class OperatorSpecializer(CSECachingMapperMixin, IdentityMapper): expr.op.quadrature_tag, field_type.boundary_tag)(expr.field) # }}} - elif isinstance(expr.op, op.BoundarizeOperator) and has_quad_operand: - raise TypeError("BoundarizeOperator cannot be applied to " + elif isinstance(expr.op, op.RestrictToBoundary) and has_quad_operand: + raise TypeError("RestrictToBoundary cannot be applied to " "quadrature-based operands--use QuadUpsample(Boundarize(...))") # {{{ flux operator specialization @@ -806,7 +806,7 @@ class PrettyStringifyMapper( return "BC%d@%s" % (bc_number, self._format_btag(expr.tag)) def map_operator_binding(self, expr, enclosing_prec): - if isinstance(expr.op, op.BoundarizeOperator): + if isinstance(expr.op, op.RestrictToBoundary): from pymbolic.mapper.stringifier import PREC_CALL, PREC_SUM return self.parenthesize_if_needed( "%s@%s" % ( diff --git a/grudge/symbolic/mappers/bc_to_flux.py b/grudge/symbolic/mappers/bc_to_flux.py index c3307688c584a1b6dbae79d4e997374f0e99c35c..545743698a673dd02e12c52343fdb9bfa0778837 100644 --- a/grudge/symbolic/mappers/bc_to_flux.py +++ b/grudge/symbolic/mappers/bc_to_flux.py @@ -43,7 +43,7 @@ class ExpensiveBoundaryOperatorDetector(CombineMapper): return False def map_operator_binding(self, expr): - if isinstance(expr.op, sym.BoundarizeOperator): + if isinstance(expr.op, sym.RestrictToBoundary): return False elif isinstance(expr.op, sym.FluxExchangeOperator): @@ -52,7 +52,7 @@ class ExpensiveBoundaryOperatorDetector(CombineMapper): elif isinstance(expr.op, ( sym.QuadratureGridUpsampler, - sym.QuadratureBoundaryGridUpsampler)): + sym.QuadratureInteriorFacesGridUpsampler)): return True else: @@ -204,9 +204,9 @@ class BCToFluxRewriter(CSECachingMapperMixin, IdentityMapper): map_subscript = map_variable def map_operator_binding(self, expr): - if isinstance(expr.op, sym.BoundarizeOperator): + if isinstance(expr.op, sym.RestrictToBoundary): if expr.op.tag != bpair.tag: - raise RuntimeError("BoundarizeOperator and BoundaryPair " + raise RuntimeError("RestrictToBoundary and BoundaryPair " "do not agree about boundary tag: %s vs %s" % (expr.op.tag, bpair.tag)) @@ -218,7 +218,7 @@ class BCToFluxRewriter(CSECachingMapperMixin, IdentityMapper): from grudge.mesh import TAG_RANK_BOUNDARY op_tag = TAG_RANK_BOUNDARY(expr.op.rank) if bpair.tag != op_tag: - raise RuntimeError("BoundarizeOperator and " + raise RuntimeError("RestrictToBoundary and " "FluxExchangeOperator do not agree about " "boundary tag: %s vs %s" % (op_tag, bpair.tag)) @@ -228,7 +228,7 @@ class BCToFluxRewriter(CSECachingMapperMixin, IdentityMapper): elif isinstance(expr.op, sym.QuadratureBoundaryGridUpsampler): if bpair.tag != expr.op.boundary_tag: - raise RuntimeError("BoundarizeOperator " + raise RuntimeError("RestrictToBoundary " "and QuadratureBoundaryGridUpsampler " "do not agree about boundary tag: %s vs %s" % (expr.op.boundary_tag, bpair.tag)) diff --git a/grudge/symbolic/mappers/type_inference.py b/grudge/symbolic/mappers/type_inference.py index a90d4348a455b07a95d78f7877f3f1f210dcb77a..7f3c9bfec20f1e59452c1496dfc280a81b2d6f5b 100644 --- a/grudge/symbolic/mappers/type_inference.py +++ b/grudge/symbolic/mappers/type_inference.py @@ -506,7 +506,7 @@ class TypeInferrer(pymbolic.mapper.RecursiveMapper): type_info.KnownVolume(), expr.field) return self.rec(expr.field, typedict) - elif isinstance(expr.op, sym.BoundarizeOperator): + elif isinstance(expr.op, sym.RestrictToBoundary): # upward propagation: argument has same rep tag as result typedict[expr.field] = type_info.KnownVolume().unify( extract_representation(type_info), expr.field) diff --git a/grudge/symbolic/operators.py b/grudge/symbolic/operators.py index c5375c4f68eb0dab3e4f0aad1fa840a835e2ee64..de96dba9ecd57c15c0fdabc2f27f4fe584b4d852 100644 --- a/grudge/symbolic/operators.py +++ b/grudge/symbolic/operators.py @@ -427,7 +427,7 @@ class ReferenceInverseMassOperator(ReferenceMassOperatorBase): # {{{ boundary-related operators -class BoundarizeOperator(Operator): +class RestrictToBoundary(Operator): def __init__(self, tag): self.tag = tag