[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