def grid_scatter(self, bounds: Box, resolution: math.Shape, outside_handling: str): """ Approximately samples this field on a regular grid using math.scatter(). Args: outside_handling: `str` passed to `phi.math.scatter()`. bounds: physical dimensions of the grid resolution: grid resolution Returns: CenteredGrid """ closest_index = bounds.global_to_local(self.points) * resolution - 0.5 mode = 'add' if self._add_overlapping else 'mean' base = math.zeros(resolution) if isinstance(self.extrapolation, math.extrapolation.ConstantExtrapolation): base += self.extrapolation.value scattered = math.scatter(base, closest_index, self.values, mode=mode, outside_handling=outside_handling) return scattered
def _grid_scatter(self, box: Box, resolution: math.Shape): """ Approximately samples this field on a regular grid using math.scatter(). Args: box: physical dimensions of the grid resolution: grid resolution box: Box: resolution: math.Shape: Returns: CenteredGrid """ closest_index = math.to_int(math.round(box.global_to_local(self.points) * resolution - 0.5)) if self._add_overlapping: duplicates_handling = 'add' else: duplicates_handling = 'mean' scattered = math.scatter(closest_index, self.values, resolution, duplicates_handling=duplicates_handling, outside_handling='discard', scatter_dims=('points',)) return scattered