[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