[read] fix sampling
This commit is contained in:
parent
1cc47da386
commit
526b9e1666
2 changed files with 35 additions and 4 deletions
|
|
@ -68,7 +68,8 @@ class GridReadMixin(GridPosMixin):
|
||||||
raise GridError('Coordinate of selected plane must be within simulation domain')
|
raise GridError('Coordinate of selected plane must be within simulation domain')
|
||||||
|
|
||||||
# Extract grid values from planes above and below visualized slice
|
# Extract grid values from planes above and below visualized slice
|
||||||
sliced_grid = numpy.zeros(self.shape[surface])
|
sample_shape = tuple(self.shifted_xyz(which_shifts)[a][::sp].size for a in surface)
|
||||||
|
sliced_grid = numpy.zeros(sample_shape, dtype=numpy.result_type(cell_data.dtype, float))
|
||||||
for ci, weight in zip(centers, w, strict=True):
|
for ci, weight in zip(centers, w, strict=True):
|
||||||
s = tuple(ci if a == plane.axis else numpy.s_[::sp] for a in range(3))
|
s = tuple(ci if a == plane.axis else numpy.s_[::sp] for a in range(3))
|
||||||
sliced_grid += weight * cell_data[which_shifts][tuple(s)]
|
sliced_grid += weight * cell_data[which_shifts][tuple(s)]
|
||||||
|
|
@ -122,7 +123,11 @@ class GridReadMixin(GridPosMixin):
|
||||||
|
|
||||||
surface = numpy.delete(range(3), plane.axis)
|
surface = numpy.delete(range(3), plane.axis)
|
||||||
|
|
||||||
x, y = (self.shifted_exyz(which_shifts)[a] for a in surface)
|
if sample_period == 1:
|
||||||
|
x, y = (self.shifted_exyz(which_shifts)[a] for a in surface)
|
||||||
|
else:
|
||||||
|
x, y = (self.shifted_xyz(which_shifts)[a][::sample_period] for a in surface)
|
||||||
|
pcolormesh_args.setdefault('shading', 'nearest')
|
||||||
xmesh, ymesh = numpy.meshgrid(x, y, indexing='ij')
|
xmesh, ymesh = numpy.meshgrid(x, y, indexing='ij')
|
||||||
x_label, y_label = ('xyz'[a] for a in surface)
|
x_label, y_label = ('xyz'[a] for a in surface)
|
||||||
|
|
||||||
|
|
@ -208,10 +213,10 @@ class GridReadMixin(GridPosMixin):
|
||||||
fig, ax = pyplot.subplots()
|
fig, ax = pyplot.subplots()
|
||||||
else:
|
else:
|
||||||
fig = ax.figure
|
fig = ax.figure
|
||||||
xc, yc = (self.shifted_xyz(which_shifts)[a] for a in surface)
|
xc, yc = (self.shifted_xyz(which_shifts)[a][::sample_period] for a in surface)
|
||||||
xcmesh, ycmesh = numpy.meshgrid(xc, yc, indexing='ij')
|
xcmesh, ycmesh = numpy.meshgrid(xc, yc, indexing='ij')
|
||||||
|
|
||||||
mappable = ax.contour(xcmesh, ycmesh, grid_slice, levels=levels, **contour_args)
|
ax.contour(xcmesh, ycmesh, grid_slice, levels=levels, **contour_args)
|
||||||
|
|
||||||
if finalize:
|
if finalize:
|
||||||
pyplot.show()
|
pyplot.show()
|
||||||
|
|
|
||||||
|
|
@ -168,3 +168,29 @@ def test_draw_polygon_rejects_noncoplanar_nx3_vertices() -> None:
|
||||||
with pytest.raises(GridError):
|
with pytest.raises(GridError):
|
||||||
grid.draw_polygon(arr, slab=dict(axis='z', center=0.5, span=1.0), polygon=polygon, foreground=1)
|
grid.draw_polygon(arr, slab=dict(axis='z', center=0.5, span=1.0), polygon=polygon, foreground=1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_slice_supports_sampling() -> None:
|
||||||
|
grid = Grid([[0, 1, 2, 3], [0, 1, 2, 3], [0, 1]], shifts=[[0, 0, 0]])
|
||||||
|
cell_data = numpy.arange(numpy.prod(grid.cell_data_shape), dtype=float).reshape(grid.cell_data_shape)
|
||||||
|
|
||||||
|
grid_slice = grid.get_slice(cell_data, Plane(z=0.5), sample_period=2)
|
||||||
|
|
||||||
|
assert_allclose(grid_slice, cell_data[0, ::2, ::2, 0])
|
||||||
|
|
||||||
|
|
||||||
|
def test_sampled_visualization_helpers_do_not_error() -> None:
|
||||||
|
matplotlib = pytest.importorskip('matplotlib')
|
||||||
|
matplotlib.use('Agg')
|
||||||
|
from matplotlib import pyplot
|
||||||
|
|
||||||
|
grid = Grid([[0, 1, 2, 3], [0, 1, 2, 3], [0, 1]], shifts=[[0, 0, 0]])
|
||||||
|
cell_data = numpy.arange(numpy.prod(grid.cell_data_shape), dtype=float).reshape(grid.cell_data_shape)
|
||||||
|
|
||||||
|
fig_slice, ax_slice = grid.visualize_slice(cell_data, Plane(z=0.5), sample_period=2, finalize=False)
|
||||||
|
fig_edges, ax_edges = grid.visualize_edges(cell_data, Plane(z=0.5), sample_period=2, finalize=False)
|
||||||
|
|
||||||
|
assert fig_slice is ax_slice.figure
|
||||||
|
assert fig_edges is ax_edges.figure
|
||||||
|
|
||||||
|
pyplot.close(fig_slice)
|
||||||
|
pyplot.close(fig_edges)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue