[Yt-svn] yt-commit r1128 - trunk/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Sun Jan 18 09:48:54 PST 2009
Author: mturk
Date: Sun Jan 18 09:48:53 2009
New Revision: 1128
URL: http://yt.spacepope.org/changeset/1128
Log:
Cut down on memory humongously by only storign indices where the grid is not
completely enclosed. Indices for fully-enclosed grids will be generated on the
fly. Slows things down *marginally* but overall the memory savings are enough
that this isn't important.
Modified:
trunk/yt/lagos/BaseDataTypes.py
Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py (original)
+++ trunk/yt/lagos/BaseDataTypes.py Sun Jan 18 09:48:53 2009
@@ -1299,8 +1299,8 @@
i = 0
for grid in self._grids:
pointI = self._get_point_indices(grid)
- new_field = na.ones(grid.ActiveDimensions, dtype=dtype) * default_val
np = pointI[0].ravel().size
+ new_field = na.ones(grid.ActiveDimensions, dtype=dtype) * default_val
new_field[pointI] = self[field][i:i+np]
if grid.data.has_key(field): del grid.data[field]
grid[field] = new_field
@@ -1464,18 +1464,30 @@
splits = na.add.accumulate(splits)
xis, yis, zis = [na.array_split(aa, splits) for aa in [xi,yi,zi]]
self._indices = {}
+ h = self._base_region.pf.h
for grid_id, x, y, z in zip(grid_ids, xis, yis, zis):
# grid_id needs no offset
- self._indices[grid_id] = (x, y, z)
- self._grids = self._base_region.pf.h.grids[self._indices.keys()]
+ ll = h.grids[grid_id].ActiveDimensions.prod() \
+ - (na.logical_not(h.grids[grid_id].child_mask)).sum()
+ # This means we're completely enclosed, except for child masks
+ if x.size == ll:
+ self._indices[grid_id] = None
+ else: self._indices[grid_id] = (x, y, z)
+ self._grids = h.grids[self._indices.keys()]
def _is_fully_enclosed(self, grid):
- return (self._indices[grid.id-grid._id_offset][0].size == grid.ActiveDimensions.prod())
+ if self._indices[grid.id-grid._id_offset] is None or \
+ (self._indices[grid.id-grid._id_offset][0].size ==
+ grid.ActiveDimensions.prod()):
+ return True
+ return False
__empty_array = na.array([], dtype='bool')
def _get_point_indices(self, grid, use_child_mask=True):
# Yeah, if it's not true, we don't care.
- return self._indices.get(grid.id-grid._id_offset, self.__empty_array)
+ tr = self._indices.get(grid.id-grid._id_offset, self.__empty_array)
+ if tr is None: tr = na.where(grid.child_mask)
+ return tr
class InLineExtractedRegionBase(AMR3DData):
"""
More information about the yt-svn
mailing list