[Yt-svn] yt-commit r600 - branches/yt-generalization/yt/lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Sat Jun 21 15:31:43 PDT 2008


Author: mturk
Date: Sat Jun 21 15:31:43 2008
New Revision: 600
URL: http://yt.spacepope.org/changeset/600

Log:
Unit tests now throw data errors.  Ready to put in the offset stuffs, and then,
PROFIT.



Modified:
   branches/yt-generalization/yt/lagos/BaseGridType.py
   branches/yt-generalization/yt/lagos/HierarchyType.py

Modified: branches/yt-generalization/yt/lagos/BaseGridType.py
==============================================================================
--- branches/yt-generalization/yt/lagos/BaseGridType.py	(original)
+++ branches/yt-generalization/yt/lagos/BaseGridType.py	Sat Jun 21 15:31:43 2008
@@ -32,9 +32,69 @@
     _num_ghost_zones = 0
     _grids = None
 
-    def __init__(self, *args, **kwargs):
-        pass
+    def __init__(self, id, filename=None, hierarchy = None):
+        self.data = {}
+        self.field_parameters = {}
+        self.fields = []
+        self.start_index = None
+        self.id = id
+        if hierarchy: self.hierarchy = weakref.proxy(hierarchy)
+        if filename: self.set_filename(filename)
+        self.overlap_masks = [None, None, None]
+        self._overlap_grids = [None, None, None]
     
+    def get_data(self, field):
+        """
+        Returns a field or set of fields for a key or set of keys
+        """
+        if not self.data.has_key(field):
+            if field in self.hierarchy.field_list:
+                conv_factor = 1.0
+                if fieldInfo.has_key(field):
+                    conv_factor = fieldInfo[field]._convert_function(self)
+                try:
+                    self[field] = self.readDataFast(field) * conv_factor
+                except self._read_exception:
+                    if field in fieldInfo:
+                        if fieldInfo[field].particle_type:
+                            self[field] = na.array([],dtype='int64')
+                        if fieldInfo[field].not_in_all:
+                            self[field] = na.zeros(self.ActiveDimensions, dtype='float64')
+                    else: raise
+            else:
+                self._generate_field(field)
+        return self.data[field]
+
+    def _generate_field(self, field):
+        if fieldInfo.has_key(field):
+            # First we check the validator
+            try:
+                fieldInfo[field].check_available(self)
+            except NeedsGridType, ngt_exception:
+                # This is only going to be raised if n_gz > 0
+                n_gz = ngt_exception.ghost_zones
+                f_gz = ngt_exception.fields
+                gz_grid = self.retrieve_ghost_zones(n_gz, f_gz)
+                temp_array = fieldInfo[field](gz_grid)
+                sl = [slice(n_gz,-n_gz)] * 3
+                self[field] = temp_array[sl]
+            else:
+                self[field] = fieldInfo[field](self)
+        else: # Can't find the field, try as it might
+            raise exceptions.KeyError, field
+
+    def _setup_dx(self):
+        # So first we figure out what the index is.  We don't assume
+        # that dx=dy=dz , at least here.  We probably do elsewhere.
+        self.dx = self.hierarchy.gridDxs[self.id-1,0]
+        self.dy = self.hierarchy.gridDys[self.id-1,0]
+        self.dz = self.hierarchy.gridDzs[self.id-1,0]
+        self.data['dx'] = self.dx
+        self.data['dy'] = self.dy
+        self.data['dz'] = self.dz
+        self._corners = self.hierarchy.gridCorners[:,:,self.id-1]
+
+
     def _generate_overlap_masks(self, axis, LE, RE):
         """
         Generate a mask that shows which cells overlap with arbitrary arrays
@@ -87,6 +147,30 @@
         AMRData.clear_data(self)
         self._setup_dx()
 
+    def _prepare_grid(self):
+        """
+        Copies all the appropriate attributes from the hierarchy
+        """
+        # This is definitely the slowest part of generating the hierarchy
+        # Now we give it pointers to all of its attributes
+        # Note that to keep in line with Enzo, we have broken PEP-8
+        h = self.hierarchy # cache it
+        self.Dimensions = h.gridDimensions[self.id-1]
+        self.StartIndices = h.gridStartIndices[self.id-1]
+        self.EndIndices = h.gridEndIndices[self.id-1]
+        self.LeftEdge = h.gridLeftEdge[self.id-1]
+        self.RightEdge = h.gridRightEdge[self.id-1]
+        self.Level = h.gridLevels[self.id-1,0]
+        self.Time = h.gridTimes[self.id-1,0]
+        self.NumberOfParticles = h.gridNumberOfParticles[self.id-1,0]
+        self.ActiveDimensions = (self.EndIndices - self.StartIndices + 1)
+        self.Children = h.gridTree[self.id-1]
+        pID = h.gridReverseTree[self.id-1]
+        if pID != None and pID != -1:
+            self.Parent = weakref.proxy(h.grids[pID - 1])
+        else:
+            self.Parent = None
+
     def __len__(self):
         return na.prod(self.ActiveDimensions)
 
@@ -259,93 +343,9 @@
         *filename* and *hierarchy*.
         """
         #All of the field parameters will be passed to us as needed.
-        AMRGridPatch.__init__(self, None, [])
-        self.data = {}
-        self.field_parameters = {}
-        self.fields = []
-        self.start_index = None
-        self.id = id
-        if hierarchy: self.hierarchy = weakref.proxy(hierarchy)
-        if filename: self.set_filename(filename)
-        self.overlap_masks = [None, None, None]
-        self._overlap_grids = [None, None, None]
+        AMRGridPatch.__init__(self, id, filename, hierarchy)
         self._file_access_pooling = False
 
-    def _generate_field(self, field):
-        if fieldInfo.has_key(field):
-            # First we check the validator
-            try:
-                fieldInfo[field].check_available(self)
-            except NeedsGridType, ngt_exception:
-                # This is only going to be raised if n_gz > 0
-                n_gz = ngt_exception.ghost_zones
-                f_gz = ngt_exception.fields
-                gz_grid = self.retrieve_ghost_zones(n_gz, f_gz)
-                temp_array = fieldInfo[field](gz_grid)
-                sl = [slice(n_gz,-n_gz)] * 3
-                self[field] = temp_array[sl]
-            else:
-                self[field] = fieldInfo[field](self)
-        else: # Can't find the field, try as it might
-            raise exceptions.KeyError, field
-
-    def get_data(self, field):
-        """
-        Returns a field or set of fields for a key or set of keys
-        """
-        if not self.data.has_key(field):
-            if field in self.hierarchy.field_list:
-                conv_factor = 1.0
-                if fieldInfo.has_key(field):
-                    conv_factor = fieldInfo[field]._convert_function(self)
-                try:
-                    self[field] = self.readDataFast(field) * conv_factor
-                except self._read_exception:
-                    if field in fieldInfo:
-                        if fieldInfo[field].particle_type:
-                            self[field] = na.array([],dtype='int64')
-                        if fieldInfo[field].not_in_all:
-                            self[field] = na.zeros(self.ActiveDimensions, dtype='float64')
-                    else: raise
-            else:
-                self._generate_field(field)
-        return self.data[field]
-
-    def _prepare_grid(self):
-        """
-        Copies all the appropriate attributes from the hierarchy
-        """
-        # This is definitely the slowest part of generating the hierarchy
-        # Now we give it pointers to all of its attributes
-        # Note that to keep in line with Enzo, we have broken PEP-8
-        h = self.hierarchy # cache it
-        self.Dimensions = h.gridDimensions[self.id-1]
-        self.StartIndices = h.gridStartIndices[self.id-1]
-        self.EndIndices = h.gridEndIndices[self.id-1]
-        self.LeftEdge = h.gridLeftEdge[self.id-1]
-        self.RightEdge = h.gridRightEdge[self.id-1]
-        self.Level = h.gridLevels[self.id-1,0]
-        self.Time = h.gridTimes[self.id-1,0]
-        self.NumberOfParticles = h.gridNumberOfParticles[self.id-1,0]
-        self.ActiveDimensions = (self.EndIndices - self.StartIndices + 1)
-        self.Children = h.gridTree[self.id-1]
-        pID = h.gridReverseTree[self.id-1]
-        if pID != None and pID != -1:
-            self.Parent = weakref.proxy(h.grids[pID - 1])
-        else:
-            self.Parent = None
-
-    def _setup_dx(self):
-        # So first we figure out what the index is.  We don't assume
-        # that dx=dy=dz , at least here.  We probably do elsewhere.
-        self.dx = self.hierarchy.gridDxs[self.id-1,0]
-        self.dy = self.hierarchy.gridDys[self.id-1,0]
-        self.dz = self.hierarchy.gridDzs[self.id-1,0]
-        self.data['dx'] = self.dx
-        self.data['dy'] = self.dy
-        self.data['dz'] = self.dz
-        self._corners = self.hierarchy.gridCorners[:,:,self.id-1]
-
     def _guess_properties_from_parent(self):
         """
         We know that our grid boundary occurs on the cell boundary of our
@@ -412,8 +412,11 @@
         return
 
 class OrionGridBase(AMRGridPatch):
-    def __init__(self,LeftEdge,RightEdge,index):
+    def __init__(self,LeftEdge,RightEdge,index, level):
+        AMRGridPatch.__init__(self, index)
+        self._file_access_pooling = False
         # should error check this
         self.LeftEdge  = LeftEdge
         self.RightEdge = RightEdge
         self.index = index
+        self.Level = level

Modified: branches/yt-generalization/yt/lagos/HierarchyType.py
==============================================================================
--- branches/yt-generalization/yt/lagos/HierarchyType.py	(original)
+++ branches/yt-generalization/yt/lagos/HierarchyType.py	Sat Jun 21 15:31:43 2008
@@ -802,10 +802,13 @@
 
 class OrionHierarchy(AMRHierarchy):
     def __init__(self,pf,data_style=7):
+        self.parameter_file = pf
         header_filename = os.path.join(pf.fullplotdir,'Header')
         self.data_style = data_style
+        self._setup_classes()
         self.readGlobalHeader(header_filename)
         AMRHierarchy.__init__(self,pf)
+
     def readGlobalHeader(self,filename):
         """
         read the global header file for an Orion plotfile output.
@@ -825,10 +828,10 @@
         self.orion_version = self.__global_header_lines[0].rstrip()
         self.n_fields      = int(self.__global_header_lines[1])
 
-        self.fields = []
+        self.field_list = []
         counter = self.n_fields+2
         for line in self.__global_header_lines[2:counter]:
-            self.fields.append(line.rstrip())
+            self.field_list.append(line.rstrip())
 
         self.dimension = int(self.__global_header_lines[counter])
         if self.dimension != 3:
@@ -885,7 +888,7 @@
                 counter+=1
                 lo = na.array([xlo,ylo,zlo])
                 hi = na.array([xhi,yhi,zhi])
-                self.levels[-1].grids.append(OrionGridBase(lo,hi,grid_counter))
+                self.levels[-1].grids.append(self.grid(lo,hi,grid_counter,level))
                 grid_counter += 1 # this is global, and shouldn't be reset
                                   # for each level
             self.levels[-1]._fileprefix = self.__global_header_lines[counter]
@@ -893,6 +896,8 @@
             self.num_grids = grid_counter
             self.float_type = 'float64'
 
+        self.maxLevel = self.n_levels
+        self.max_level = self.n_levels
         self.__header_file.close()
 
     def _initialize_grids(self):
@@ -915,11 +920,30 @@
         self.gridTree = [ [] for i in range(self.num_grids)]
         mylog.debug("Done creating grid objects")
 
+    def _populate_hierarchy(self):
+        self.__setup_grid_tree()
+        for i, grid in enumerate(self.grids):
+            if (i%1e4) == 0: mylog.debug("Prepared % 7i / % 7i grids", i, self.num_grids)
+            grid._prepare_grid()
+
+    def __setup_grid_tree(self):
+        for i, grid in enumerate(self.grids):
+            children = self._get_grid_children(grid)
+            for child in children:
+                self.gridReverseTree[child.id] = i
+                self.gridTree[i].append(weakref.proxy(child))
+
     def _setup_classes(self):
         dd = self._get_data_reader_dict()
         self.grid = classobj("OrionGrid",(OrionGridBase,), dd)
         AMRHierarchy._setup_classes(self, dd)
 
+    def _get_grid_children(self, grid):
+        mask = na.zeros(self.num_grids, dtype='bool')
+        grids, grid_ind = self.get_box_grids(grid.LeftEdge, grid.RightEdge)
+        mask[grid_ind] = True
+        mask = na.logical_and(mask, (self.gridLevels == (grid.Level+1)).flat)
+        return self.grids[mask]
 
 class OrionLevel:
     def __init__(self,level,ngrids):



More information about the yt-svn mailing list