[Yt-svn] yt-commit r818 - trunk/yt/lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Fri Oct 10 08:28:38 PDT 2008


Author: mturk
Date: Fri Oct 10 08:28:37 2008
New Revision: 818
URL: http://yt.spacepope.org/changeset/818

Log:
Added periodic regions from Britton



Modified:
   trunk/yt/lagos/BaseDataTypes.py

Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py	(original)
+++ trunk/yt/lagos/BaseDataTypes.py	Fri Oct 10 08:28:37 2008
@@ -3,6 +3,8 @@
 
 Author: Matthew Turk <matthewturk at gmail.com>
 Affiliation: KIPAC/SLAC/Stanford
+Author: Britton Smith <Britton.Smith at colorado.edu>
+Affiliation: University of Colorado at Boulder
 Homepage: http://yt.enzotools.org/
 License:
   Copyright (C) 2007-2008 Matthew Turk.  All Rights Reserved.
@@ -1463,6 +1465,59 @@
                  & (grid['z'] >= self.left_edge[2]) )
         return cm
 
+class EnzoPeriodicRegionBase(Enzo3DData):
+    """
+    EnzoRegions are rectangular prisms of data.
+    """
+    def __init__(self, center, left_edge, right_edge, fields = None,
+                 pf = None, **kwargs):
+        """
+        We create an object with a set of three *left_edge* coordinates,
+        three *right_edge* coordinates, and a *center* that need not be the
+        center.
+        """
+        Enzo3DData.__init__(self, center, fields, pf, **kwargs)
+        self.left_edge = na.array(left_edge)
+        self.right_edge = na.array(right_edge)
+        self._refresh_data()
+        self.offsets = (na.mgrid[-1:1:3j,-1:1:3j,-1:1:3j] * \
+                        (self.pf["DomainRightEdge"] -
+                         self.pf["DomainLeftEdge"])[:,None,None,None])\
+                       .transpose().reshape(27,3) # cached and in order
+
+    def _get_list_of_grids(self):
+        self._grids, ind = self.pf.hierarchy.get_periodic_box_grids(self.left_edge,
+                                                                    self.right_edge)
+
+    def _is_fully_enclosed(self, grid):
+        offsets = na.array([-1,0,1])
+
+        for off_x, off_y, off_z in self.offsets:
+            region_left = [self.left_edge[0]+off_x,
+                           self.left_edge[1]+off_y,self.left_edge[2]+off_z]
+            region_right = [self.right_edge[0]+off_x,
+                            self.right_edge[1]+off_y,self.right_edge[2]+off_z]
+            if (na.all((grid._corners <= region_right) &
+                       (grid._corners >= region_left))):
+                return True
+        return False
+
+    @cache_mask
+    def _get_cut_mask(self, grid):
+        if self._is_fully_enclosed(grid):
+            return True
+        else:
+            cm = na.array(na.shape(grid['x'])[0],dtype=bool)
+            offsets = na.array([-1,0,1])
+            for off_x, off_y, off_z in self.offsets:
+                cm = cm | ( (grid['x'] < self.right_edge[0]+off_x)
+                          & (grid['x'] >= self.left_edge[0]+off_x)
+                          & (grid['y'] < self.right_edge[1]+off_y)
+                          & (grid['y'] >= self.left_edge[1]+off_y)
+                          & (grid['z'] < self.right_edge[2]+off_z)
+                          & (grid['z'] >= self.left_edge[2]+off_z) )
+            return cm
+
 class EnzoGridCollection(Enzo3DData):
     """
     An arbitrary selection of grids, within which we accept all points.



More information about the yt-svn mailing list