示例#1
0
    def diff_rst(self, op, field):
        result = self.discr.volume_zeros(dtype=field.dtype)

        from hedge._internal import perform_elwise_operator
        for eg in self.discr.element_groups:
            perform_elwise_operator(op.preimage_ranges(eg), eg.ranges,
                    op.matrices(eg)[op.rst_axis].astype(field.dtype),
                    field, result)

        return result
示例#2
0
    def diff_rst(self, op, field):
        result = self.discr.volume_zeros(dtype=field.dtype)

        from hedge._internal import perform_elwise_operator
        for eg in self.discr.element_groups:
            perform_elwise_operator(
                op.preimage_ranges(eg), eg.ranges,
                op.matrices(eg)[op.rst_axis].astype(field.dtype), field,
                result)

        return result
示例#3
0
    def do_elementwise_linear(self, op, field, out):
        for eg in self.discr.element_groups:
            try:
                matrix, coeffs = self.elwise_linear_cache[eg, op, field.dtype]
            except KeyError:
                matrix = np.asarray(op.matrix(eg), dtype=field.dtype)
                coeffs = op.coefficients(eg)
                self.elwise_linear_cache[eg, op, field.dtype] = matrix, coeffs

            from hedge._internal import (perform_elwise_scaled_operator,
                                         perform_elwise_operator)

            if coeffs is None:
                perform_elwise_operator(eg.ranges, eg.ranges, matrix, field,
                                        out)
            else:
                perform_elwise_scaled_operator(eg.ranges, eg.ranges, coeffs,
                                               matrix, field, out)
示例#4
0
    def do_elementwise_linear(self, op, field, out):
        for eg in self.discr.element_groups:
            try:
                matrix, coeffs = self.elwise_linear_cache[eg, op, field.dtype]
            except KeyError:
                matrix = np.asarray(op.matrix(eg), dtype=field.dtype)
                coeffs = op.coefficients(eg)
                self.elwise_linear_cache[eg, op, field.dtype] = matrix, coeffs

            from hedge._internal import (
                    perform_elwise_scaled_operator,
                    perform_elwise_operator)

            if coeffs is None:
                perform_elwise_operator(eg.ranges, eg.ranges,
                        matrix, field, out)
            else:
                perform_elwise_scaled_operator(eg.ranges, eg.ranges,
                        coeffs, matrix, field, out)
示例#5
0
    def map_ref_quad_mass(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        qtag = op.quadrature_tag

        from hedge._internal import perform_elwise_operator

        out = self.discr.volume_zeros()
        for eg in self.discr.element_groups:
            eg_quad_info = eg.quadrature_info[qtag]

            perform_elwise_operator(eg_quad_info.ranges, eg.ranges,
                                    eg_quad_info.ldis_quad_info.mass_matrix(),
                                    field, out)

        return out
示例#6
0
    def map_ref_quad_mass(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        qtag = op.quadrature_tag

        from hedge._internal import perform_elwise_operator

        out = self.discr.volume_zeros()
        for eg in self.discr.element_groups:
            eg_quad_info = eg.quadrature_info[qtag]

            perform_elwise_operator(eg_quad_info.ranges, eg.ranges,
                    eg_quad_info.ldis_quad_info.mass_matrix(),
                    field, out)

        return out
示例#7
0
    def map_quad_bdry_grid_upsampler(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        bdry = self.discr.get_boundary(op.boundary_tag)
        bdry_q_info = bdry.get_quadrature_info(op.quadrature_tag)

        out = np.zeros(bdry_q_info.node_count, field.dtype)

        from hedge._internal import perform_elwise_operator
        for fg, from_ranges, to_ranges, ldis_quad_info in zip(
                bdry.face_groups, bdry.fg_ranges, bdry_q_info.fg_ranges,
                bdry_q_info.fg_ldis_quad_infos):
            perform_elwise_operator(
                from_ranges, to_ranges,
                ldis_quad_info.face_up_interpolation_matrix(), field, out)

        return out
示例#8
0
    def map_quad_int_faces_grid_upsampler(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        qtag = op.quadrature_tag

        from hedge._internal import perform_elwise_operator
        quad_info = self.discr.get_quadrature_info(qtag)

        out = np.zeros(quad_info.int_faces_node_count, field.dtype)
        for eg in self.discr.element_groups:
            eg_quad_info = eg.quadrature_info[qtag]

            perform_elwise_operator(eg.ranges, eg_quad_info.el_faces_ranges,
                eg_quad_info.ldis_quad_info.volume_to_face_up_interpolation_matrix(),
                field, out)

        return out
示例#9
0
    def map_quad_int_faces_grid_upsampler(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        qtag = op.quadrature_tag

        from hedge._internal import perform_elwise_operator
        quad_info = self.discr.get_quadrature_info(qtag)

        out = np.zeros(quad_info.int_faces_node_count, field.dtype)
        for eg in self.discr.element_groups:
            eg_quad_info = eg.quadrature_info[qtag]

            perform_elwise_operator(
                eg.ranges, eg_quad_info.el_faces_ranges,
                eg_quad_info.ldis_quad_info.
                volume_to_face_up_interpolation_matrix(), field, out)

        return out
示例#10
0
    def map_quad_bdry_grid_upsampler(self, op, field_expr):
        field = self.rec(field_expr)

        from hedge.tools import is_zero
        if is_zero(field):
            return 0

        bdry = self.discr.get_boundary(op.boundary_tag)
        bdry_q_info = bdry.get_quadrature_info(op.quadrature_tag)

        out = np.zeros(bdry_q_info.node_count, field.dtype)

        from hedge._internal import perform_elwise_operator
        for fg, from_ranges, to_ranges, ldis_quad_info in zip(
                bdry.face_groups,
                bdry.fg_ranges,
                bdry_q_info.fg_ranges,
                bdry_q_info.fg_ldis_quad_infos):
            perform_elwise_operator(from_ranges, to_ranges,
                ldis_quad_info.face_up_interpolation_matrix(),
                field, out)

        return out