def initialize(self, method): Depositor.initialize(self, method) backend_class = getattr( _internal, "InterpolatingDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data)
def initialize(self, method): Depositor.initialize(self, method) discr = method.discretization eg, = discr.element_groups fg, = discr.face_groups ldis = eg.local_discretization from hedge.mesh import TAG_ALL bdry = discr.get_boundary(TAG_ALL) bdry_fg, = bdry.face_groups if self.filter_response: from hedge.discretization import Filter filter = Filter(discr, self.filter_response) filter_mat, = filter.filter_matrices else: filter_mat = numpy.zeros((0, 0)) backend_class = getattr( _internal, "AdvectiveDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data, len(ldis.face_indices()), ldis.node_count(), ldis.mass_matrix(), ldis.inverse_mass_matrix(), filter_mat, ldis.face_mass_matrix(), fg, bdry_fg, self.activation_threshold, self.kill_threshold, self.upwind_alpha) for i, diffmat in enumerate(ldis.differentiation_matrices()): self.backend.add_local_diff_matrix(i, diffmat)
def initialize(self, method): Depositor.initialize(self, method) eg, = method.discretization.element_groups ldis = eg.local_discretization backend_class = getattr(_internal, "NormalizingInterpolatingDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data, ldis.mass_matrix())
def initialize(self, method): Depositor.initialize(self, method) eg, = method.discretization.element_groups ldis = eg.local_discretization backend_class = getattr( _internal, "NormalizingInterpolatingDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data, ldis.mass_matrix())
def initialize(self, method): Depositor.initialize(self, method) if self.jiggle_radius: dep_type = "Jiggly" else: dep_type = "Regular" backend_class = getattr( _internal, dep_type + "GridDepositor" + method.get_dimensionality_suffix()) backend = self.backend = backend_class(method.mesh_data) discr = method.discretization if self.enforce_continuity: self.prepare_average_groups() else: backend.average_group_starts.append(0) if self.filter_min_amplification is not None: from hedge.discretization import Filter, ExponentialFilterResponseFunction self.filter = Filter( discr, ExponentialFilterResponseFunction( self.filter_min_amplification, self.filter_order)) else: self.filter = None for i, (stepwidths, origin, dims) in enumerate(self.brick_generator(discr)): if self.jiggle_radius: brk = _internal.JigglyBrick( i, backend.grid_node_count_with_extra(), stepwidths, origin, dims, jiggle_radius=self.jiggle_radius) else: brk = _internal.Brick(i, backend.grid_node_count_with_extra(), stepwidths, origin, dims) backend.bricks.append(brk) if self.submethod == "simplex_extra": self.prepare_with_pointwise_projection_and_extra_points() elif self.submethod == "simplex_enlarge": self.prepare_with_pointwise_projection_and_enlargement() elif self.submethod == "simplex_reduce": self.prepare_with_pointwise_projection_and_basis_reduction() elif self.submethod == "brick": self.prepare_with_brick_interpolation() else: raise RuntimeError, "invalid rec_grid submethod specified"
def initialize(self, method): Depositor.initialize(self, method) if self.jiggle_radius: dep_type = "Jiggly" else: dep_type = "Regular" backend_class = getattr(_internal, dep_type + "GridDepositor" + method.get_dimensionality_suffix()) backend = self.backend = backend_class(method.mesh_data) discr = method.discretization if self.enforce_continuity: self.prepare_average_groups() else: backend.average_group_starts.append(0) if self.filter_min_amplification is not None: from hedge.discretization import Filter, ExponentialFilterResponseFunction self.filter = Filter(discr, ExponentialFilterResponseFunction( self.filter_min_amplification, self.filter_order)) else: self.filter = None for i, (stepwidths, origin, dims) in enumerate( self.brick_generator(discr)): if self.jiggle_radius: brk = _internal.JigglyBrick(i, backend.grid_node_count_with_extra(), stepwidths, origin, dims, jiggle_radius=self.jiggle_radius) else: brk = _internal.Brick(i, backend.grid_node_count_with_extra(), stepwidths, origin, dims) backend.bricks.append(brk) if self.submethod == "simplex_extra": self.prepare_with_pointwise_projection_and_extra_points() elif self.submethod == "simplex_enlarge": self.prepare_with_pointwise_projection_and_enlargement() elif self.submethod == "simplex_reduce": self.prepare_with_pointwise_projection_and_basis_reduction() elif self.submethod == "brick": self.prepare_with_brick_interpolation() else: raise RuntimeError, "invalid rec_grid submethod specified"
def initialize(self, method): Depositor.initialize(self, method) discr = method.discretization eg, = discr.element_groups fg, = discr.face_groups ldis = eg.local_discretization from hedge.mesh import TAG_ALL bdry = discr.get_boundary(TAG_ALL) bdry_fg, = bdry.face_groups if self.filter_response: from hedge.discretization import Filter filter = Filter(discr, self.filter_response) filter_mat, = filter.filter_matrices else: filter_mat = numpy.zeros((0,0)) backend_class = getattr(_internal, "AdvectiveDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data, len(ldis.face_indices()), ldis.node_count(), ldis.mass_matrix(), ldis.inverse_mass_matrix(), filter_mat, ldis.face_mass_matrix(), fg, bdry_fg, self.activation_threshold, self.kill_threshold, self.upwind_alpha) for i, diffmat in enumerate(ldis.differentiation_matrices()): self.backend.add_local_diff_matrix(i, diffmat)
def initialize(self, method): Depositor.initialize(self, method) backend_class = getattr(_internal, "InterpolatingDepositor" + method.get_dimensionality_suffix()) self.backend = backend_class(method.mesh_data)
def initialize(self, method): Depositor.initialize(self, method) backend_class = getattr( _internal, "GridFindDepositor" + method.get_dimensionality_suffix()) backend = self.backend = backend_class(method.mesh_data) discr = method.discretization grid_node_num_to_nodes = {} if self.brick_generator is None: bbox_min, bbox_max = discr.mesh.bounding_box() max_bbox_size = max(bbox_max - bbox_min) self.brick_generator = SingleBrickGenerator(mesh_margin=1e-3 * max_bbox_size, overresolve=0.2) from pyrticle._internal import Brick for i, (stepwidths, origin, dims) in enumerate(self.brick_generator(discr)): backend.bricks.append( Brick(i, backend.grid_node_count(), stepwidths, origin, dims)) from pyrticle._internal import BoxFloat for eg in discr.element_groups: ldis = eg.local_discretization for el in eg.members: el_bbox = BoxFloat(*el.bounding_box(discr.mesh.points)) el_slice = discr.find_el_range(el.id) for brk in backend.bricks: if brk.bounding_box().intersect(el_bbox).is_empty(): continue for node_num in range(el_slice.start, el_slice.stop): try: cell_number = brk.which_cell(discr.nodes[node_num]) except ValueError: pass else: grid_node_num_to_nodes.setdefault( brk.index(cell_number), []).append(node_num) from pytools import flatten unassigned_nodes = (set(xrange(len(discr))) - set(flatten(grid_node_num_to_nodes.itervalues()))) if unassigned_nodes: raise RuntimeError( "dep_grid_find: unassigned mesh nodes found. " "you should specify a mesh_margin when generating " "bricks") usecounts = numpy.zeros((backend.grid_node_count(), )) for gnn in xrange(backend.grid_node_count()): grid_nodes = grid_node_num_to_nodes.get(gnn, []) usecounts[gnn] = len(grid_nodes) backend.node_number_list_starts.append( len(backend.node_number_lists)) backend.node_number_lists.extend(grid_nodes) backend.node_number_list_starts.append(len(backend.node_number_lists)) if "depositor" in method.debug: from hedge.visualization import SiloVisualizer vis = SiloVisualizer(discr) visf = vis.make_file("grid-find-debug") vis.add_data(visf, []) self.visualize_grid_quantities(visf, [("usecounts", usecounts)]) visf.close() if "interactive" in cloud.debug: from matplotlib.pylab import hist, show hist(usecounts, bins=20) show()
def initialize(self, method): Depositor.initialize(self, method) backend_class = getattr(_internal, "GridFindDepositor" + method.get_dimensionality_suffix()) backend = self.backend = backend_class(method.mesh_data) discr = method.discretization grid_node_num_to_nodes = {} if self.brick_generator is None: bbox_min, bbox_max = discr.mesh.bounding_box() max_bbox_size = max(bbox_max-bbox_min) self.brick_generator = SingleBrickGenerator( mesh_margin=1e-3*max_bbox_size, overresolve=0.2) from pyrticle._internal import Brick for i, (stepwidths, origin, dims) in enumerate( self.brick_generator(discr)): backend.bricks.append( Brick(i, backend.grid_node_count(), stepwidths, origin, dims)) from pyrticle._internal import BoxFloat for eg in discr.element_groups: ldis = eg.local_discretization for el in eg.members: el_bbox = BoxFloat(*el.bounding_box(discr.mesh.points)) el_slice = discr.find_el_range(el.id) for brk in backend.bricks: if brk.bounding_box().intersect(el_bbox).is_empty(): continue for node_num in range(el_slice.start, el_slice.stop): try: cell_number = brk.which_cell( discr.nodes[node_num]) except ValueError: pass else: grid_node_num_to_nodes.setdefault( brk.index(cell_number), []).append(node_num) from pytools import flatten unassigned_nodes = (set(xrange(len(discr))) - set(flatten(grid_node_num_to_nodes.itervalues()))) if unassigned_nodes: raise RuntimeError("dep_grid_find: unassigned mesh nodes found. " "you should specify a mesh_margin when generating " "bricks") usecounts = numpy.zeros( (backend.grid_node_count(),)) for gnn in xrange(backend.grid_node_count()): grid_nodes = grid_node_num_to_nodes.get(gnn, []) usecounts[gnn] = len(grid_nodes) backend.node_number_list_starts.append(len(backend.node_number_lists)) backend.node_number_lists.extend(grid_nodes) backend.node_number_list_starts.append(len(backend.node_number_lists)) if "depositor" in method.debug: from hedge.visualization import SiloVisualizer vis = SiloVisualizer(discr) visf = vis.make_file("grid-find-debug") vis.add_data(visf, []) self.visualize_grid_quantities(visf, [ ("usecounts", usecounts) ]) visf.close() if "interactive" in cloud.debug: from matplotlib.pylab import hist, show hist(usecounts, bins=20) show()