[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