Source code for yt.data_objects.index_subobjects.stretched_grid

import numpy as np

from yt.geometry.selection_routines import convert_mask_to_indices

from .grid_patch import AMRGridPatch


[docs] class StretchedGrid(AMRGridPatch): def __init__(self, id, cell_widths, *, filename=None, index=None): self.cell_widths = [np.array(_) for _ in cell_widths] super().__init__(id, filename, index) def _check_consistency(self): computed_right_edge = self.LeftEdge + [ _.sum() for _ in self.cell_widths * self.LeftEdge.uq ] assert (computed_right_edge == self.RightEdge).all() def _get_selector_mask(self, selector): if self._cache_mask and hash(selector) == self._last_selector_id: mask = self._last_mask else: mask = selector.fill_mask(self) if self._cache_mask: self._last_mask = mask self._last_selector_id = hash(selector) if mask is None: self._last_count = 0 else: self._last_count = mask.sum() return mask
[docs] def select_fwidth(self, dobj): mask = self._get_selector_mask(dobj.selector) if mask is None: return np.empty((0, 3), dtype="float64") indices = convert_mask_to_indices(mask, self._last_count) coords = np.array( [ self.cell_widths[0][indices[:, 0]], self.cell_widths[1][indices[:, 1]], self.cell_widths[2][indices[:, 2]], ] ).T return coords
[docs] def select_fcoords(self, dobj): mask = self._get_selector_mask(dobj.selector) if mask is None: return np.empty((0, 3), dtype="float64") cell_centers = [ self.LeftEdge[i].d + np.add.accumulate(self.cell_widths[i]) - 0.5 * self.cell_widths[i] for i in range(3) ] indices = convert_mask_to_indices(mask, self._last_count) coords = np.array( [ cell_centers[0][indices[:, 0]], cell_centers[1][indices[:, 1]], cell_centers[2][indices[:, 2]], ] ).T return coords