[Yt-svn] yt-commit r643 - trunk/yt/lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Tue Jul 1 13:20:23 PDT 2008


Author: mturk
Date: Tue Jul  1 13:20:21 2008
New Revision: 643
URL: http://yt.spacepope.org/changeset/643

Log:

Got rid of raising the ValueError on the smoothing grid; I believe it works on
non-power-of-two grids, but I am currently testing.

Changed the bounds for interpolation in smoothing grid to be cell-centered
bounds.  Still experimenting.

Added truncation option to the TrilinearInterpolator, which affects the
smoothing grids.

Added smoothed option for getting ghost-zones.



Modified:
   trunk/yt/lagos/BaseDataTypes.py
   trunk/yt/lagos/BaseGridType.py
   trunk/yt/lagos/HelperFunctions.py

Modified: trunk/yt/lagos/BaseDataTypes.py
==============================================================================
--- trunk/yt/lagos/BaseDataTypes.py	(original)
+++ trunk/yt/lagos/BaseDataTypes.py	Tue Jul  1 13:20:21 2008
@@ -1497,7 +1497,7 @@
                 self._get_data_from_grid(grid, field)
                 if not na.any(self[field] == -999): break
             if self._use_pbar: pbar.finish()
-            if na.any(self[field] == -999) and self.dx < self.hierarchy.grids[0].dx:
+            if na.any(self[field] == -999):# and self.dx < self.hierarchy.grids[0].dx:
                 print "COVERING PROBLEM", na.where(self[field]==-999)[0].size
                 print na.where(self[field]==-999)
                 return
@@ -1553,7 +1553,7 @@
         dlog2 = na.log10(kwargs['dims'])/na.log10(2)
         if not na.all(na.floor(dlog2) == na.ceil(dlog2)):
             mylog.warning("Must be power of two dimensions")
-            raise ValueError
+            #raise ValueError
         kwargs['num_ghost_zones'] = 0
         EnzoCoveringGrid.__init__(self, *args, **kwargs)
         if na.any(self.left_edge == 0):
@@ -1573,7 +1573,7 @@
     def _get_level_array(self, level, fields):
         fields = ensure_list(fields)
         # We assume refinement by a factor of two
-        rf = 2**(self.level - level)
+        rf = float(2**(self.level - level))
         dims = na.maximum(1,self.ActiveDimensions/rf) + 2
         dx = (self.right_edge-self.left_edge)/(dims-2)
         x,y,z = (na.mgrid[0:dims[0],0:dims[1],0:dims[2]].astype('float64')+0.5)\
@@ -1581,20 +1581,23 @@
         x += self.left_edge[0] - dx[0]
         y += self.left_edge[1] - dx[1]
         z += self.left_edge[2] - dx[2]
-        bounds = [self.left_edge[0]-self['cdx'], self.right_edge[0]+self['cdx'],
-                  self.left_edge[1]-self['cdy'], self.right_edge[1]+self['cdy'],
-                  self.left_edge[2]-self['cdz'], self.right_edge[2]+self['cdz']]
+        offsets = [self['cd%s' % ax]*0.5 for ax in 'xyz']
+        bounds = [self.left_edge[0]-offsets[0], self.right_edge[0]+offsets[0],
+                  self.left_edge[1]-offsets[1], self.right_edge[1]+offsets[1],
+                  self.left_edge[2]-offsets[2], self.right_edge[2]+offsets[2]]
         fake_grid = {'x':x,'y':y,'z':z,'dx':dx[0],'dy':dx[1],'dz':dx[2]}
         for ax in 'xyz': self['cd%s'%ax] = fake_grid['d%s'%ax]
         for field in fields:
             # Generate the new grid field
             if field in fieldInfo and fieldInfo[field].take_log:
                 interpolator = TrilinearFieldInterpolator(
-                                na.log10(self[field]), bounds, ['x','y','z'])
+                                na.log10(self[field]), bounds, ['x','y','z'],
+                                truncate = True)
                 self[field] = 10**interpolator(fake_grid)
             else:
                 interpolator = TrilinearFieldInterpolator(
-                                self[field], bounds, ['x','y','z'])
+                                self[field], bounds, ['x','y','z'],
+                                truncate = True)
                 self[field] = interpolator(fake_grid)
         return fake_grid
 

Modified: trunk/yt/lagos/BaseGridType.py
==============================================================================
--- trunk/yt/lagos/BaseGridType.py	(original)
+++ trunk/yt/lagos/BaseGridType.py	Tue Jul  1 13:20:21 2008
@@ -395,7 +395,8 @@
     child_mask = property(fget=_get_child_mask, fdel=_del_child_mask)
     child_indices = property(fget=_get_child_indices, fdel = _del_child_indices)
 
-    def retrieve_ghost_zones(self, n_zones, fields, all_levels=False):
+    def retrieve_ghost_zones(self, n_zones, fields, all_levels=False,
+                             smoothed=False):
         # We will attempt this by creating a datacube that is exactly bigger
         # than the grid by nZones*dx in each direction
         new_left_edge = self.LeftEdge - n_zones * self.dx
@@ -404,10 +405,14 @@
         level = self.Level
         if all_levels:
             level = self.hierarchy.max_level + 1
-        cube = self.hierarchy.covering_grid(level,
-                        new_left_edge, new_right_edge,
-                        self.ActiveDimensions + 2*n_zones, fields,
-                        num_ghost_zones=n_zones, use_pbar=False)
+        args = (level, new_left_edge, new_right_edge)
+        kwargs = {'dims': self.ActiveDimensions + 2*n_zones,
+                  'num_ghost_zones':n_zones,
+                  'use_pbar':False, 'fields':fields}
+        if smoothed:
+            cube = self.hierarchy.smoothed_covering_grid(*args, **kwargs)
+        else:
+            cube = self.hierarchy.covering_grid(*args, **kwargs)
         return cube
 
     def _save_data_state(self):

Modified: trunk/yt/lagos/HelperFunctions.py
==============================================================================
--- trunk/yt/lagos/HelperFunctions.py	(original)
+++ trunk/yt/lagos/HelperFunctions.py	Tue Jul  1 13:20:21 2008
@@ -83,8 +83,9 @@
         return my_vals.reshape(orig_shape)
 
 class TrilinearFieldInterpolator:
-    def __init__(self, table, boundaries, field_names):
+    def __init__(self, table, boundaries, field_names, truncate = False):
         self.table = table
+        self.truncate = truncate
         x0, x1, y0, y1, z0, z1 = boundaries
         self.x_name, self.y_name, self.z_name = field_names
         self.x_bins = na.linspace(x0, x1, table.shape[0])
@@ -103,10 +104,15 @@
         if na.any((x_i == -1) | (x_i == len(self.x_bins)-1)) \
             or na.any((y_i == -1) | (y_i == len(self.y_bins)-1)) \
             or na.any((z_i == -1) | (z_i == len(self.z_bins)-1)):
-            mylog.error("Sorry, but your values are outside" + \
-                        " the table!  Dunno what to do, so dying.")
-            mylog.error("Error was in: %s", data_object)
-            raise ValueError
+            if not self.truncate:
+                mylog.error("Sorry, but your values are outside" + \
+                            " the table!  Dunno what to do, so dying.")
+                mylog.error("Error was in: %s", data_object)
+                raise ValueError
+            else:
+                x_i = na.minimum(na.maximum(x_i,0), len(self.x_bins)-2)
+                y_i = na.minimum(na.maximum(y_i,0), len(self.y_bins)-2)
+                z_i = na.minimum(na.maximum(z_i,0), len(self.z_bins)-2)
 
         # Use notation from Paul Bourke's page on interpolation
         # http://local.wasp.uwa.edu.au/~pbourke/other/interpolation/



More information about the yt-svn mailing list