示例#1
0
    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)
示例#2
0
    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)))
示例#3
0
    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)