[Yt-svn] yt-commit r805 - trunk/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Sat Sep 27 13:56:35 PDT 2008
Author: mturk
Date: Sat Sep 27 13:56:34 2008
New Revision: 805
URL: http://yt.spacepope.org/changeset/805
Log:
Added 'unitary' as a unit to the parameter file. Going to try to go through
and change '1' to 'unitary' in prep for yt-g.
Added a set of functions to handle in-memory data. Right now it's meant for
Enzo. Turned some things from private to not-private methods in the hierarchy.
Modified:
trunk/yt/lagos/DataReadingFuncs.py
trunk/yt/lagos/HierarchyType.py
trunk/yt/lagos/OutputTypes.py
Modified: trunk/yt/lagos/DataReadingFuncs.py
==============================================================================
--- trunk/yt/lagos/DataReadingFuncs.py (original)
+++ trunk/yt/lagos/DataReadingFuncs.py Sat Sep 27 13:56:34 2008
@@ -143,6 +143,28 @@
def getExceptionHDF5():
return (exceptions.KeyError, HDF5LightReader.ReadingError)
+def readDataInMemory(self, field):
+ import enzo
+ return enzo.grid_data[self.id][field].swapaxes(0,2)
+
+def readAllDataInMemory(self):
+ pass
+
+def getFieldsInMemory(self):
+ import enzo
+ return enzo.grid_data[self.id].keys()
+
+def readDataSliceInMemory(self, grid, field, axis, coord):
+ import enzo
+ sl = [slice(None), slice(None), slice(None)]
+ sl[axis] = slice(coord, coord + 1)
+ sl = tuple(reversed(sl))
+ bsl = (slice(3,-3), slice(3,-3), slice(3,-3))
+ return enzo.grid_data[grid.id][field][bsl][sl].swapaxes(0,2)
+
+def getExceptionInMemory():
+ return KeyError
+
class BaseDataQueue(object):
def __init__(self):
@@ -205,8 +227,9 @@
mylog.debug("Finished read of %s", sets)
class DataQueueInMemory(BaseDataQueue):
- def __init__(self, grids_in_memory, ghost_zones=2):
- self.grids_in_memory = grids_in_memory
+ def __init__(self, ghost_zones=3):
+ import enzo
+ self.grids_in_memory = enzo.grid_data
self.my_slice = (slice(ghost_zones,-ghost_zones),
slice(ghost_zones,-ghost_zones),
slice(ghost_zones,-ghost_zones))
Modified: trunk/yt/lagos/HierarchyType.py
==============================================================================
--- trunk/yt/lagos/HierarchyType.py (original)
+++ trunk/yt/lagos/HierarchyType.py Sat Sep 27 13:56:34 2008
@@ -33,6 +33,7 @@
{ 4: (readDataHDF4, readAllDataHDF4, getFieldsHDF4, readDataSliceHDF4, getExceptionHDF4),
5: (readDataHDF5, readAllDataHDF5, getFieldsHDF5, readDataSliceHDF5, getExceptionHDF5),
6: (readDataPacked, readAllDataPacked, getFieldsPacked, readDataSlicePacked, getExceptionHDF5),
+ 8: (readDataInMemory, readAllDataInMemory, getFieldsInMemory, readDataSliceInMemory, getExceptionInMemory),
}
class AMRHierarchy:
@@ -175,7 +176,7 @@
self.disk = classobj("EnzoCylinder",(EnzoCylinderBase,), dd)
self.grid_collection = classobj("EnzoGridCollection",(EnzoGridCollection,), dd)
- def __deserialize_hierarchy(self, harray):
+ def _deserialize_hierarchy(self, harray):
mylog.debug("Cached entry found.")
self.gridDimensions[:] = harray[:,0:3]
self.gridStartIndices[:] = harray[:,3:6]
@@ -754,7 +755,7 @@
if self.num_grids <= 1000:
mylog.info("Skipping serialization!")
if harray and self.num_grids > 1000:
- self.__deserialize_hierarchy(harray)
+ self._deserialize_hierarchy(harray)
else:
self.__parse_hierarchy_file()
self.__obtain_filenames()
@@ -783,9 +784,9 @@
for i, grid in enumerate(self.grids):
if (i%1e4) == 0: mylog.debug("Prepared % 7i / % 7i grids", i, self.num_grids)
grid._prepare_grid()
- self.__setup_grid_dxs()
+ self._setup_grid_dxs()
mylog.debug("Prepared")
- self.__setup_field_lists()
+ self._setup_field_lists()
self.levelIndices = {}
self.levelNum = {}
ad = self.gridEndIndices - self.gridStartIndices + 1
@@ -797,7 +798,7 @@
self.levelNum[level] = len(self.levelIndices[level])
mylog.debug("Hierarchy fully populated.")
- def __setup_grid_dxs(self):
+ def _setup_grid_dxs(self):
mylog.debug("Setting up corners and dxs")
self._setup_grid_corners()
dx = (self.gridRightEdge[:,0] - self.gridLeftEdge[:,0]) / \
@@ -827,7 +828,7 @@
if grid.Parent: grid._guess_properties_from_parent()
if pbar: pbar.finish()
- def __setup_field_lists(self):
+ def _setup_field_lists(self):
field_list = self.get_data("/", "DataFields")
if field_list == None:
mylog.info("Gathering a field list (this may take a moment.)")
@@ -863,6 +864,65 @@
if field not in self.derived_field_list:
self.derived_field_list.append(field)
+class EnzoHierarchyInMemory(EnzoHierarchy):
+ def __init__(self, pf, data_style = 8):
+ import enzo
+ self.float_type = 'float64'
+ self.data_style = data_style # Mandated
+ self.directory = os.getcwd()
+ self.num_grids = na.max(enzo.grid_data.keys())
+ self.queue = DataQueueInMemory()
+ AMRHierarchy.__init__(self, pf)
+
+ def _initialize_data_file(self):
+ pass
+
+ def _populate_hierarchy(self):
+ self._copy_hierarchy_structure()
+ import enzo
+ mylog.debug("Copying reverse tree")
+ self.gridReverseTree = enzo.hierarchy_information["GridParentIDs"].ravel().tolist()
+ # Initial setup:
+ mylog.debug("Reconstructing parent-child relationships")
+ self.gridTree = [ [] for i in range(self.num_grids) ]
+ for id,pid in enumerate(self.gridReverseTree):
+ if pid > 0:
+ self.gridTree[pid-1].append(
+ weakref.proxy(self.grids[id]))
+ else:
+ self.gridReverseTree[id] = None
+ self.max_level = self.gridLevels.max()
+ self.maxLevel = self.max_level
+ mylog.debug("Preparing grids")
+ for i, grid in enumerate(self.grids):
+ if (i%1e4) == 0: mylog.debug("Prepared % 7i / % 7i grids", i, self.num_grids)
+ grid._prepare_grid()
+ self._setup_grid_dxs()
+ mylog.debug("Prepared")
+ self._setup_field_lists()
+ self.levelIndices = {}
+ self.levelNum = {}
+ ad = self.gridEndIndices - self.gridStartIndices + 1
+ for level in xrange(self.maxLevel+1):
+ self.level_stats[level]['numgrids'] = na.where(self.gridLevels==level)[0].size
+ li = na.where(self.gridLevels[:,0] == level)
+ self.level_stats[level]['numcells'] = ad[li].prod(axis=1).sum()
+ self.levelIndices[level] = self._select_level(level)
+ self.levelNum[level] = len(self.levelIndices[level])
+ mylog.debug("Hierarchy fully populated.")
+
+ def _copy_hierarchy_structure(self):
+ import enzo
+ print dir(enzo)
+ self.gridDimensions[:] = enzo.hierarchy_information["GridDimensions"][:]
+ self.gridStartIndices[:] = enzo.hierarchy_information["GridStartIndices"][:]
+ self.gridEndIndices[:] = enzo.hierarchy_information["GridEndIndices"][:]
+ self.gridLeftEdge[:] = enzo.hierarchy_information["GridLeftEdge"][:]
+ self.gridRightEdge[:] = enzo.hierarchy_information["GridRightEdge"][:]
+ self.gridLevels[:] = enzo.hierarchy_information["GridLevels"][:]
+ self.gridTimes[:] = enzo.hierarchy_information["GridTimes"][:]
+ self.gridNumberOfParticles[:] = enzo.hierarchy_information["GridNumberOfParticles"][:]
+
scanf_regex = {}
scanf_regex['e'] = r"[-+]?\d+\.?\d*?|\.\d+[eE][-+]?\d+?"
scanf_regex['g'] = scanf_regex['e']
Modified: trunk/yt/lagos/OutputTypes.py
==============================================================================
--- trunk/yt/lagos/OutputTypes.py (original)
+++ trunk/yt/lagos/OutputTypes.py Sat Sep 27 13:56:34 2008
@@ -207,6 +207,7 @@
self._setup_nounits_units()
self.time_units['1'] = 1
self.units['1'] = 1
+ self.units['unitary'] = 1.0 / (self["DomainRightEdge"] - self["DomainLeftEdge"]).max()
seconds = self["Time"]
self.time_units['years'] = seconds / (365*3600*24.0)
self.time_units['days'] = seconds / (3600*24.0)
@@ -272,3 +273,30 @@
k["aye"] = (1.0 + self.parameters["CosmologyInitialRedshift"]) / \
(1.0 + self.parameters["CosmologyCurrentRedshift"])
return k
+
+class EnzoStaticOutputInMemory(EnzoStaticOutput):
+ _hierarchy_class = EnzoHierarchyInMemory
+ def __init__(self, parameter_override=None, conversion_override=None):
+ if parameter_override is None: parameter_override = {}
+ self.__parameter_override = parameter_override
+ if conversion_override is None: conversion_override = {}
+ self.__conversion_override = conversion_override
+
+ StaticOutput.__init__(self, "InMemoryParameterFile", 8)
+
+ def _parse_parameter_file(self):
+ import enzo
+ self.parameters['CurrentTimeIdentifier'] = time.time()
+ self.parameters.update(enzo.yt_parameter_file)
+ self.conversion_factors.update(enzo.conversion_factors)
+ for i in self.parameters:
+ if isinstance(self.parameters[i], types.TupleType):
+ self.parameters[i] = na.array(self.parameters[i])
+ for i in self.conversion_factors:
+ if isinstance(self.conversion_factors[i], types.TupleType):
+ self.conversion_factors[i] = na.array(self.conversion_factors[i])
+ for p, v in self.__parameter_override.items():
+ self.parameters[p] = v
+ for p, v in self.__conversion_override.items():
+ self.conversion_factors[p] = v
+
More information about the yt-svn
mailing list