[Yt-svn] yt-commit r1116 - branches/grid-optimization/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Thu Jan 15 21:04:20 PST 2009
Author: mturk
Date: Thu Jan 15 21:04:18 2009
New Revision: 1116
URL: http://yt.spacepope.org/changeset/1116
Log:
Rewrote (left in the old one) the get_data routine for covering grids. This
now leaves MOST field generation in the covering grid. Added a NEW validator,
to ensure you are using the *original* grid when the data is obtained. This
means that 'dx' will now be generated properly, as will 'CellVolume'.
Added some __str__ methods to the exceptions, too, to make them look a bit
nicer.
Unfortunately the clump finder tests now fail! So I'll fix that before this
gets merged into trunk. I need to test the whole thing more thoroughly as
well.
Modified:
branches/grid-optimization/yt/lagos/BaseDataTypes.py
branches/grid-optimization/yt/lagos/BaseGridType.py
branches/grid-optimization/yt/lagos/FieldInfoContainer.py
branches/grid-optimization/yt/lagos/UniversalFields.py
branches/grid-optimization/yt/lagos/setup.py
Modified: branches/grid-optimization/yt/lagos/BaseDataTypes.py
==============================================================================
--- branches/grid-optimization/yt/lagos/BaseDataTypes.py (original)
+++ branches/grid-optimization/yt/lagos/BaseDataTypes.py Thu Jan 15 21:04:18 2009
@@ -1823,6 +1823,49 @@
return
raise KeyError
+ def get_data(self, fields=None):
+ if self._grids is None:
+ self._get_list_of_grids()
+ if fields is None:
+ fields = self.fields[:]
+ else:
+ fields = ensure_list(fields)
+ obtain_fields = []
+ for field in fields:
+ if self.data.has_key(field): continue
+ if field not in self.hierarchy.field_list:
+ try:
+ self._generate_field(field)
+ continue
+ except NeedsOriginalGrid, ngt_exception:
+ pass
+ obtain_fields.append(field)
+ self[field] = na.zeros(self.ActiveDimensions, dtype='float64') -999
+ if len(obtain_fields) == 0: return
+ mylog.debug("Getting fields %s from %s possible grids",
+ obtain_fields, len(self._grids))
+ if self._use_pbar: pbar = \
+ get_pbar('Searching grids for values ', len(self._grids))
+ for i, grid in enumerate(self._grids):
+ if self._use_pbar: pbar.update(i)
+ self._get_data_from_grid(grid, obtain_fields)
+ if not na.any(self[obtain_fields[0]] == -999): break
+ if self._use_pbar: pbar.finish()
+ if na.any(self[obtain_fields[0]] == -999):
+ # and self.dx < self.hierarchy.grids[0].dx:
+ print "COVERING PROBLEM", na.where(self[obtain_fields[0]]==-999)[0].size
+ print na.where(self[obtain_fields[0]]==-999)
+ raise KeyError
+
+ def _generate_field(self, field):
+ if self.pf.field_info.has_key(field):
+ # First we check the validator; this might even raise!
+ self.pf.field_info[field].check_available(self)
+ self[field] = self.pf.field_info[field](self)
+ else: # Can't find the field, try as it might
+ raise exceptions.KeyError(field)
+
+
def flush_data(self, field=None):
"""
Any modifications made to the data in this object are pushed back
@@ -1865,6 +1908,14 @@
self.left_edge, self.right_edge, c_dx, c_fields,
ll, self.pf["DomainLeftEdge"], self.pf["DomainRightEdge"])
+ @property
+ def LeftEdge(self):
+ return self.left_edge
+
+ @property
+ def RightEdge(self):
+ return self.right_edge
+
class AMRSmoothedCoveringGridBase(AMRCoveringGridBase):
_type_name = "smoothed_covering_grid"
def __init__(self, *args, **kwargs):
Modified: branches/grid-optimization/yt/lagos/BaseGridType.py
==============================================================================
--- branches/grid-optimization/yt/lagos/BaseGridType.py (original)
+++ branches/grid-optimization/yt/lagos/BaseGridType.py Thu Jan 15 21:04:18 2009
@@ -70,8 +70,7 @@
Returns a field or set of fields for a key or set of keys
"""
if not self.data.has_key(field):
- if field in ('dx','dy','dz','dds'):
- return self._dds[field]
+ #if field in ('dx','dy','dz','dds'): return self._dds[field]
if field in self.hierarchy.field_list:
conv_factor = 1.0
if self.pf.field_info.has_key(field):
Modified: branches/grid-optimization/yt/lagos/FieldInfoContainer.py
==============================================================================
--- branches/grid-optimization/yt/lagos/FieldInfoContainer.py (original)
+++ branches/grid-optimization/yt/lagos/FieldInfoContainer.py Thu Jan 15 21:04:18 2009
@@ -95,18 +95,30 @@
def __init__(self, ghost_zones = 0, fields=None):
self.ghost_zones = ghost_zones
self.fields = fields
+ def __str__(self):
+ return "(%s, %s)" % (self.ghost_zones, self.fields)
+
+class NeedsOriginalGrid(NeedsGridType):
+ def __init__(self):
+ self.ghost_zones = 0
class NeedsDataField(ValidationException):
def __init__(self, missing_fields):
self.missing_fields = missing_fields
+ def __str__(self):
+ return "(%s)" % (self.missing_fields)
class NeedsProperty(ValidationException):
def __init__(self, missing_properties):
self.missing_properties = missing_properties
+ def __str__(self):
+ return "(%s)" % (self.missing_properties)
class NeedsParameter(ValidationException):
def __init__(self, missing_parameters):
self.missing_parameters = missing_parameters
+ def __str__(self):
+ return "(%s)" % (self.missing_parameters)
class FieldDetector(defaultdict):
Level = 1
@@ -279,6 +291,14 @@
if isinstance(data, FieldDetector): return True
if not data._spatial:
raise NeedsGridType(self.ghost_zones,self.fields)
- if self.ghost_zones == data._num_ghost_zones:
+ if self.ghost_zones <= data._num_ghost_zones:
return True
raise NeedsGridType(self.ghost_zones,self.fields)
+
+class ValidateGridType(FieldValidator):
+ def __init__(self):
+ FieldValidator.__init__(self)
+ def __call__(self, data):
+ # We need to make sure that it's an actual AMR grid
+ if data._type_name == 'grid': return True
+ raise NeedsOriginalGrid()
Modified: branches/grid-optimization/yt/lagos/UniversalFields.py
==============================================================================
--- branches/grid-optimization/yt/lagos/UniversalFields.py (original)
+++ branches/grid-optimization/yt/lagos/UniversalFields.py Thu Jan 15 21:04:18 2009
@@ -97,13 +97,13 @@
def _GridLevel(field, data):
return na.ones(data["Density"].shape)*(data.Level)
add_field("GridLevel", function=_GridLevel,
- validators=[#ValidateProperty('Level'),
+ validators=[ValidateGridType(),
ValidateSpatial(0)])
def _GridIndices(field, data):
return na.ones(data["Density"].shape)*(data.id-data._id_offset)
add_field("GridIndices", function=_GridIndices,
- validators=[#ValidateProperty('id'),
+ validators=[ValidateGridType(),
ValidateSpatial(0)], take_log=False)
def _OnesOverDx(field, data):
Modified: branches/grid-optimization/yt/lagos/setup.py
==============================================================================
--- branches/grid-optimization/yt/lagos/setup.py (original)
+++ branches/grid-optimization/yt/lagos/setup.py Thu Jan 15 21:04:18 2009
@@ -32,8 +32,8 @@
libraries=["m","hdf5"],
library_dirs=library_dirs, include_dirs=include_dirs)
# Uncomment the next two lines if you want particle_density support
- #config.add_extension("cic_deposit", ["yt/lagos/enzo_routines/cic_deposit.pyf",
- # "yt/lagos/enzo_routines/cic_deposit.f"])
+ config.add_extension("cic_deposit", ["yt/lagos/enzo_routines/cic_deposit.pyf",
+ "yt/lagos/enzo_routines/cic_deposit.f"])
if 0:
sys.argv.extend(["config_fc","--f77flags",
"'-Dr16 -ffixed-line-length-132 -fno-second-underscore -DPYFORT -DNOMETALS -ggdb -O0'"])
More information about the yt-svn
mailing list