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
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
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)
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)
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
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
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
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
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