def map_int_g(self, expr): if expr.target.discr_stage is None: expr = expr.copy(target=expr.target.to_stage1()) if expr.source.discr_stage is not None: return expr from pytential.qbx import QBXLayerPotentialSource lpot_source = self.places.get_geometry(expr.source.geometry) if not isinstance(lpot_source, QBXLayerPotentialSource): return expr from_dd = expr.source.to_stage1() to_dd = from_dd.to_quad_stage2() density = prim.interp(from_dd, to_dd, self.rec(expr.density)) from_dd = from_dd.copy(discr_stage=self.from_discr_stage) kernel_arguments = { name: prim.interp(from_dd, to_dd, self.rec(self.tagger(arg_expr))) for name, arg_expr in expr.kernel_arguments.items() } return expr.copy(kernel=expr.kernel, density=density, kernel_arguments=kernel_arguments, source=to_dd)
def map_num_reference_derivative(self, expr): to_dd = expr.dofdesc if to_dd.discr_stage != prim.QBX_SOURCE_QUAD_STAGE2: return expr from pytential.qbx import QBXLayerPotentialSource lpot_source = self.places.get_geometry(to_dd.geometry) if not isinstance(lpot_source, QBXLayerPotentialSource): return expr from_dd = to_dd.copy(discr_stage=self.from_discr_stage) return prim.interp(from_dd, to_dd, self.rec(self.tagger(expr)))
def map_int_g(self, expr): from_dd = expr.source if from_dd.discr_stage is not None: return expr from pytential.qbx import QBXLayerPotentialSource lpot_source = self.places.get_geometry(from_dd) if not isinstance(lpot_source, QBXLayerPotentialSource): return expr to_dd = from_dd.copy(discr_stage=prim.QBX_SOURCE_QUAD_STAGE2) density = prim.interp(from_dd, to_dd, self.rec(expr.density)) kernel_arguments = dict( (name, prim.interp(from_dd, to_dd, self.rec(arg_expr))) for name, arg_expr in expr.kernel_arguments.items()) return expr.copy(kernel=expr.kernel, density=density, kernel_arguments=kernel_arguments, source=to_dd, target=expr.target)