[Yt-svn] yt-commit r382 - trunk/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Mon Feb 25 10:06:52 PST 2008
Author: mturk
Date: Mon Feb 25 10:06:48 2008
New Revision: 382
URL: http://yt.spacepope.org/changeset/382
Log:
Adding "_is_fully_enclosed" method to see if we can speed up projections in parallel. We only really want to get the point indices for grids that are on the border.
Modified:
trunk/yt/lagos/BaseDataTypes.py
Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py (original)
+++ trunk/yt/lagos/BaseDataTypes.py Mon Feb 25 10:06:48 2008
@@ -42,7 +42,6 @@
return self._cut_masks[grid.id]
return check_cache
-
class EnzoData:
"""
Generic EnzoData container. By itself, will attempt to
@@ -613,7 +612,7 @@
self.func = na.sum
if not self._deserialize():
self.__calculate_memory()
- if self.hierarchy.data_style == 6:
+ if self.hierarchy.data_style == 6 and False:
self.__cache_data()
self._refresh_data()
@@ -853,7 +852,7 @@
dy = just_one(grid['d%s' % axis_names[y_dict[self.axis]]])
full_proj = self.func(masked_data,axis=self.axis)*dl
weight_proj = self.func(weight_data,axis=self.axis)*dl
- if self._check_region:
+ if self._check_region and not self.source._is_fully_enclosed(grid):
used_data = self._get_points_in_region(grid)
used_points = na.where(na.logical_or.reduce(used_data, self.axis))
else:
@@ -1014,6 +1013,9 @@
def __touch_grid_field(self, grid, field):
grid[field]
+ def _is_fully_enclosed(grid):
+ return na.all(self._get_cut_mask)
+
def _get_point_indices(self, grid, use_child_mask=True):
k = na.zeros(grid.ActiveDimensions, dtype='bool')
k = (k | self._get_cut_mask(grid))
@@ -1200,6 +1202,9 @@
zi[self._base_indices][ind_ind]])
self._grids = self._base_region.pf.h.grids[self._indices.keys()]
+ def _is_fully_enclosed(self, grid):
+ return (self._indices[grid.id[-1]][0].size == grid.ActiveDimensions.prod())
+
def _get_point_indices(self, grid, use_child_mask=True):
# Yeah, if it's not true, we don't care.
return self._indices[grid.id-1]
@@ -1231,6 +1236,16 @@
) ) ]
self._grids = self.hierarchy.grids
+ def _is_fully_enclosed(self, grid):
+ corners = grid._corners.reshape((8,3,1))
+ H = na.sum(self._norm_vec.reshape((1,3,1)) * corners,
+ axis=1) + self._d
+ D = na.sqrt(na.sum((corners -
+ self.center.reshape((1,3,1)))**2.0,axis=1))
+ R = na.sqrt(D**2.0-H**2.0)
+ return (na.all(na.abs(H) < self._height, axis=0) \
+ and na.all(R < self._radius, axis=0))
+
@cache_mask
def _get_cut_mask(self, grid):
corners = grid._corners.reshape((8,3,1))
@@ -1281,6 +1296,10 @@
self._grids, ind = self.pf.hierarchy.get_box_grids(self.left_edge,
self.right_edge)
+ def _is_fully_enclosed(self):
+ return na.all( (grid._corners < self.right_edge)
+ & (grid._corners >= self.left_edge))
+
@cache_mask
def _get_cut_mask(self, grid):
if na.all( (grid._corners < self.right_edge)
@@ -1315,6 +1334,9 @@
def _get_list_of_grids(self):
pass
+ def _is_fully_enclosed(self, grid):
+ return True
+
@cache_mask
def _get_cut_mask(self, grid):
return na.ones(grid.ActiveDimensions, dtype='bool')
@@ -1351,6 +1373,10 @@
grids.sort(key=lambda x: (x.Level, x.LeftEdge[0], x.LeftEdge[1], x.LeftEdge[2]))
self._grids = na.array(grids)
+ def _is_fully_enclosed(self, grid):
+ corner_radius = na.sqrt(((grid._corners - self.center)**2.0).sum(axis=1))
+ return na.all(corner_radius <= self.radius)
+
@restore_grid_state # Pains me not to decorate with cache_mask here
def _get_cut_mask(self, grid, field=None):
# We have the *property* center, which is not necessarily
More information about the yt-svn
mailing list