[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