[yt-users] ray problem with cell volume

Elizabeth Tasker taskere at mcmaster.ca
Thu Apr 28 08:33:35 PDT 2011


Hi,

When using the ray feature in yt, we hit problems if we try to plot any 
variable that contains the cell volume. e.g.

def _Momentum(field, data):
    return (data["Density"]*data["CellVolume"]*sqrt(
         data["x-velocity"]**2.0
         + data["y-velocity"]**2.0
         + data["z-velocity"]**2.0 ))



ray = pf.h.ray([0.5, 0.5, 0.5], [1.0,1.0,1.0], "Momentum")
    pylab.plot(ray["RadiusCode"], ray["Momentum"], 'o')


Gives:



IndexError                                Traceback (most recent call 
last) 

/saw_sfs/work/chris/yt/scripts/iyt in <module>()
----> 1                                        
      2                                        
      3                                        
      4                                        
      5                                        

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
__getitem__(self, key)
    274             if key not in 
self.fields:                                     
    275                 
self.fields.append(key)                                    
--> 276             
self.get_data(key)                                             
    277         return 
self.data[key]                                              
    
278                                                                             


/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
get_data(self, fields, in_grids)
    445             mylog.info("Getting field %s from %s", field, 
len(self._grids))          
    446             if field not in self.hierarchy.field_list and not 
in_grids:              
--> 447                 if field not in ("dts", "t") and 
self._generate_field(field):        
    448                     continue # True means we already assigned 
it                     
    449             self[field] = 
na.concatenate(                                            

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
_generate_field(self, field)
    423                 return 
False                                                     
    424             
else:                                                                
--> 425                 self[field] = 
self.pf.field_info[field](self)                    
    426                 return 
True                                                      
    427         else: # Can't find the field, try as it 
might                            

/saw_sfs/work/chris/yt/yt/data_objects/field_info_container.pyc in 
__call__(self, data)
    292         ii = 
self.check_available(data)                                       
    293         original_fields = data.keys() # 
Copy                                  
--> 294         dd = self._function(self, 
data)                                       
    295         dd *= 
self._convert_function(data)                                    
    296         for field_name in 
data.keys():                                        

/saw_sfs/work/chris/yt/scripts/iyt in _Momentum(field, data)
     14                                                    
     15 def _Momentum(field, data):                        
---> 16     return (data["Density"]*data["CellVolume"]*sqrt(
     17          
data["x-velocity"]**2.0                                                                                                          

     18          + 
data["y-velocity"]**2.0                                                                                                        


/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
__getitem__(self, key)
    274             if key not in 
self.fields:                                     
    275                 
self.fields.append(key)                                    
--> 276             
self.get_data(key)                                             
    277         return 
self.data[key]                                              
    
278                                                                             


/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
get_data(self, fields, in_grids)
    445             mylog.info("Getting field %s from %s", field, 
len(self._grids))          
    446             if field not in self.hierarchy.field_list and not 
in_grids:              
--> 447                 if field not in ("dts", "t") and 
self._generate_field(field):        
    448                     continue # True means we already assigned 
it                     
    449             self[field] = 
na.concatenate(                                            

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
_generate_field(self, field)
    423                 return 
False                                                     
    424             
else:                                                                
--> 425                 self[field] = 
self.pf.field_info[field](self)                    
    426                 return True
    427         else: # Can't find the field, try as it might

/saw_sfs/work/chris/yt/yt/data_objects/field_info_container.pyc in 
__call__(self, data)
    292         ii = self.check_available(data)
    293         original_fields = data.keys() # Copy
--> 294         dd = self._function(self, data)
    295         dd *= self._convert_function(data)
    296         for field_name in data.keys():

/saw_sfs/work/chris/yt/yt/data_objects/universal_fields.pyc in 
_CellVolume(field, data)
    392
    393 def _CellVolume(field, data):
--> 394     if data['dx'].size == 1:
    395         try:
    396             return data['dx']*data['dy']*data['dx']*\

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
__getitem__(self, key)
    274             if key not in self.fields:
    275                 self.fields.append(key)
--> 276             self.get_data(key)
    277         return self.data[key]
    278

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
get_data(self, fields, in_grids)
    449             self[field] = na.concatenate(
    450                 [self._get_data_from_grid(grid, field)
--> 451                  for grid in self._grids])
    452             if not self.data.has_key(field):
    453                 continue

/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in 
_get_data_from_grid(self, grid, field)
    558         if field == 'dts': return self._dts[grid.id][mask]
    559         if field == 't': return self._ts[grid.id][mask]
--> 560         return grid[field][mask]
    561
    562     @cache_mask

IndexError: invalid index to scalar variable.



Any ideas?

Elizabeth



More information about the yt-users mailing list