[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