[Yt-svn] yt-commit r375 - in trunk/yt: lagos raven

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Fri Feb 1 13:16:17 PST 2008


Author: mturk
Date: Fri Feb  1 13:16:10 2008
New Revision: 375
URL: http://yt.spacepope.org/changeset/375

Log:
 * Sped up serial projections *significantly*.
 * Added Kinetic SZ effect, Y SZ effect, and (crude) XRayEmissivity.
 * Added a new means of specifying conversion factors for projections.  Right
   now it could use some work, and still tosses real conversions over to raven.
   This will be fixed when I eventually get around to unit testing raven.
   Apologies for the half-assery.



Modified:
   trunk/yt/lagos/BaseDataTypes.py
   trunk/yt/lagos/DataReadingFuncs.py
   trunk/yt/lagos/DerivedFields.py
   trunk/yt/lagos/HierarchyType.py
   trunk/yt/raven/PlotTypes.py

Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py	(original)
+++ trunk/yt/lagos/BaseDataTypes.py	Fri Feb  1 13:16:10 2008
@@ -247,6 +247,7 @@
         """
         self.axis = axis
         EnzoData.__init__(self, pf, fields, **kwargs)
+        self.set_field_parameter("axis",axis)
 
     @time_execution
     def get_data(self, fields = None):
@@ -597,7 +598,10 @@
         """
         Enzo2DData.__init__(self, axis, field, pf, **kwargs)
         if not source:
+            self._check_region = False
             source = EnzoGridCollection(center, self.hierarchy.grids)
+        else:
+            self._check_region = True
         self.source = source
         if max_level == None:
             max_level = self.hierarchy.maxLevel
@@ -809,13 +813,18 @@
             masked_data[grid.child_indices] = 0
             weight_data[grid.child_indices] = 0
         #@todo: Fix the func to set up a path length too
-        dl = just_one(grid['d%s' % axis_names[self.axis]])
+        dl = 1.0
+        if fieldInfo.has_key(field) and fieldInfo[field].line_integral:
+            dl = just_one(grid['d%s' % axis_names[self.axis]])
         dx = just_one(grid['d%s' % axis_names[x_dict[self.axis]]])
         dy = just_one(grid['d%s' % axis_names[y_dict[self.axis]]])
         full_proj = self.func(masked_data,axis=self.axis)*dl
         weight_proj = self.func(weight_data,axis=self.axis)*dl
-        used_data = self._get_points_in_region(grid)
-        used_points = na.where(na.logical_or.reduce(used_data, self.axis))
+        if self._check_region:
+            used_data = self._get_points_in_region(grid)
+            used_points = na.where(na.logical_or.reduce(used_data, self.axis))
+        else:
+            used_points = slice(None)
         if zero_out:
             subgrid_mask = na.logical_and.reduce(grid.child_mask, self.axis).astype('int64')
         else:
@@ -837,7 +846,10 @@
 
     @restore_grid_state
     def _get_data_from_grid(self, grid, field):
-        bad_points = self._get_points_in_region(grid)
+        if self._check_region:
+            bad_points = self._get_points_in_region(grid)
+        else:
+            bad_points = 1.0
         d = grid[field] * bad_points
         return d
 

Modified: trunk/yt/lagos/DataReadingFuncs.py
==============================================================================
--- trunk/yt/lagos/DataReadingFuncs.py	(original)
+++ trunk/yt/lagos/DataReadingFuncs.py	Fri Feb  1 13:16:10 2008
@@ -72,7 +72,7 @@
     @param field: field to read
     @type field: string
     """
-    f = tables.openFile(self.filename)
+    f = tables.openFile(self.filename, nodeCacheSize=1)
     t = f.getNode("/", field).read().astype("float64")
     try:
         t = t.swapaxes(0,2)
@@ -104,7 +104,7 @@
     @param sl: region to get
     @type sl: SliceType
     """
-    f = tables.openFile(grid.filename)
+    f = tables.openFile(grid.filename, nodeCacheSize=1)
     ss = f.getNode("/", field)[sl].swapaxes(0,2)
     f.close()
     return ss
@@ -125,8 +125,8 @@
 def readDataPacked(self, field):
     f = tables.openFile(self.filename,
                         rootUEP="/Grid%08i" % (self.id),
-                        mode='r')
-    t = f.getNode("/", field).read()
+                        mode='r', nodeCacheSize=1)
+    t = f.getNode("/", field).read().astype('float64')
     t = t.swapaxes(0,2)
     f.close()
     return t
@@ -142,7 +142,7 @@
     @param sl: region to get
     @type sl: SliceType
     """
-    f = tables.openFile(grid.filename)
+    f = tables.openFile(grid.filename, nodeCacheSize=1)
     ss = f.getNode("/Grid%08i" % (grid.id), field)[sl]
     f.close()
     return ss

Modified: trunk/yt/lagos/DerivedFields.py
==============================================================================
--- trunk/yt/lagos/DerivedFields.py	(original)
+++ trunk/yt/lagos/DerivedFields.py	Fri Feb  1 13:16:10 2008
@@ -13,7 +13,12 @@
 
 from yt.funcs import *
 
-mh = 1.67e-24
+mh = 1.67e-24 # g
+me = 9.11e-28 # g
+sigma_thompson = 6.65e-25 # cm^2
+clight = 3.0e10 # cm/s
+kboltz = 1.38e-16
+
 fieldInfo = {}
 
 class ValidationException(Exception):
@@ -66,7 +71,9 @@
                  convert_function = None,
                  units = "", projected_units = "",
                  take_log = True, validators = None,
-                 variable_length = False, vector_field=False):
+                 variable_length = False, vector_field=False,
+                 line_integral = True,
+                 projection_conversion = "cm"):
         self.name = name
         self._function = function
         if validators:
@@ -81,6 +88,8 @@
         self._convert_function = convert_function
         self.variable_length = variable_length
         self.vector_field = vector_field
+        self.line_integral = line_integral
+        self.projection_conversion = projection_conversion
     def check_available(self, data):
         for validator in self.validators:
             validator(data)
@@ -405,6 +414,36 @@
           function=_CellVolume,
           convert_function=_ConvertCellVolumeCGS)
 
+def _XRayEmissivity(field, data):
+    return ((data["Density"]**2.0)*data["Temperature"]**0.5)
+def _convertXRayEmissivity(data):
+    return 2.168e60
+add_field("XRayEmissivity",
+          convert_function=_convertXRayEmissivity,
+          projection_conversion="1")
+
+
+def _SZKinetic(field, data):
+    vel_axis = data.get_field_parameter('axis')
+    if vel_axis > 2:
+        raise NeedsParameter(['axis'])
+    vel = data["%s-velocity" % ({0:'x',1:'y',2:'z'}[vel_axis])]
+    return (vel*data["Density"])
+def _convertSZKinetic(data):
+    return 0.88*((sigma_thompson/mh)/clight)
+add_field("SZKinetic",
+          convert_function=_convertSZKinetic,
+          validators=[ValidateParameter('axis')])
+
+def _SZY(field, data):
+    return (data["Density"]*data["Temperature"])
+def _convertSZY(data):
+    conv = (0.88/mh) * (kboltz)/(me * clight*clight) * sigma_thompson
+    return conv
+add_field("SZY", convert_function=_convertSZY)
+
+
+
 def __gauss_kern(size):
     """ Returns a normalized 2D gauss kernel array for convolutions """
     size = int(size)

Modified: trunk/yt/lagos/HierarchyType.py
==============================================================================
--- trunk/yt/lagos/HierarchyType.py	(original)
+++ trunk/yt/lagos/HierarchyType.py	Fri Feb  1 13:16:10 2008
@@ -476,8 +476,15 @@
         if ytcfg.getboolean("lagos","ReconstructHierarchy") == True:
             mylog.debug("Reconstructing hierarchy")
             for level in range(self.maxLevel+1):
-                for grid in self.select_grids(level):
+                grids_to_recon = self.select_grids(level)
+                if len(self.grids) > 3e5:
+                    pbar = get_pbar('Reconsructing  level % 2i / % 2i ' \
+                                      % (level, self.maxLevel),
+                                      len(grids_to_recon))
+                for i,grid in enumerate(grids_to_recon):
+                    if pbar: pbar.update(i)
                     if grid.Parent: grid._guess_properties_from_parent()
+                if pbar: pbar.finish()
 
     def __select_level(self, level):
         """

Modified: trunk/yt/raven/PlotTypes.py
==============================================================================
--- trunk/yt/raven/PlotTypes.py	(original)
+++ trunk/yt/raven/PlotTypes.py	Fri Feb  1 13:16:10 2008
@@ -399,9 +399,15 @@
         if self.colorbar != None: self.colorbar.set_label(data_label)
 
     def __getitem__(self, item):
-        return self.data[item] * \
-                  self.data.hierarchy.parameter_file.units["cm"]
-                  #self.data.hierarchy.parameter_file.conversion_factors[item] * \
+        if lagos.fieldInfo.has_key(item):
+            if not lagos.fieldInfo[item].line_integral:
+                dl = 1.0
+            else:
+                dl = self.data.hierarchy.parameter_file.units[
+                    lagos.fieldInfo[item].projection_conversion]
+        else:
+            dl = self.data.hierarchy.parameter_file.units["cm"]
+        return self.data[item] * dl
 
 class CuttingPlanePlot(SlicePlot):
     _type_name = "CuttingPlane"



More information about the yt-svn mailing list