[Yt-svn] yt: Adding in particle mass function, fixing some issues with le...
hg at spacepope.org
hg at spacepope.org
Fri Sep 3 16:33:51 PDT 2010
hg Repository: yt
details: yt/rev/0eae5b1c68d5
changeset: 3381:0eae5b1c68d5
user: Matthew Turk <matthewturk at gmail.com>
date:
Fri Sep 03 16:33:46 2010 -0700
description:
Adding in particle mass function, fixing some issues with left/right edges and
IO for Gadget
diffstat:
yt/frontends/gadget/data_structures.py | 36 ++++++++++++++++++++++--------------
yt/frontends/gadget/fields.py | 17 ++++++++++++++---
yt/frontends/gadget/io.py | 2 +-
3 files changed, 37 insertions(+), 18 deletions(-)
diffs (124 lines):
diff -r a16fa728b1fc -r 0eae5b1c68d5 yt/frontends/gadget/data_structures.py
--- a/yt/frontends/gadget/data_structures.py Fri Sep 03 15:30:24 2010 -0700
+++ b/yt/frontends/gadget/data_structures.py Fri Sep 03 16:33:46 2010 -0700
@@ -41,13 +41,13 @@
class GadgetGrid(AMRGridPatch):
_id_offset = 0
- def __init__(self, hierarchy, id,dimensions,left_index,
+ def __init__(self, hierarchy, id, dimensions, left_index,
level, parent_id, particle_count):
AMRGridPatch.__init__(self, id, filename = hierarchy.filename,
hierarchy = hierarchy)
self.id = id
self.ActiveDimensions = dimensions
- self.start_index = left_index
+ self.start_index = left_index.astype("int64")
self.Level = level
self._parent_id = parent_id
self.Parent = None # Only one parent per grid
@@ -101,24 +101,29 @@
def _parse_hierarchy(self):
f = self._handle # shortcut
npa = na.array
+ DLE = self.parameter_file.domain_left_edge
+ DRE = self.parameter_file.domain_right_edge
+ DW = (DRE - DLE)
self.grid_levels.flat[:] = f['/grid_level'][:].astype("int32")
- self.grid_left_edge[:] = f['/grid_left_index'][:]
+ LI = f['/grid_left_index'][:]
+ print LI
self.grid_dimensions[:] = f['/grid_dimensions'][:]
- self.grid_right_edge[:] = self.grid_left_edge + self.grid_dimensions
+ self.grid_left_edge[:] = (LI * DW + DLE)
+ dxs = 1.0/(2**(self.grid_levels+1)) * DW
+ self.grid_right_edge[:] = self.grid_left_edge \
+ + dxs *(1 + self.grid_dimensions)
self.grid_particle_count.flat[:] = f['/grid_particle_count'][:].astype("int32")
grid_parent_id = f['/grid_parent_id'][:]
self.max_level = na.max(self.grid_levels)
- args = izip(xrange(self.num_grids), self.grid_levels,
- grid_parent_id, self.grid_left_edge,
- self.grid_dimensions, self.grid_particle_count)
+ args = izip(xrange(self.num_grids), self.grid_levels.flat,
+ grid_parent_id, LI,
+ self.grid_dimensions, self.grid_particle_count.flat)
self.grids = na.array([self.grid(self,j,d,le,lvl,p,n)
for j,lvl,p, le, d, n in args],
dtype='object')
-
-
def _populate_grid_objects(self):
for g in self.grids:
if g._parent_id >= 0:
@@ -183,9 +188,12 @@
format = 'Gadget Infrastructure'
add1 = 'griddded_data_format'
add2 = 'data_software'
- fileh = h5py.File(args[0],'r')
- if add1 in fileh['/'].items():
- if add2 in fileh['/'+add1].attrs.keys():
- if fileh['/'+add1].attrs[add2] == format:
- return True
+ try:
+ fileh = h5py.File(args[0],'r')
+ if add1 in fileh['/'].items():
+ if add2 in fileh['/'+add1].attrs.keys():
+ if fileh['/'+add1].attrs[add2] == format:
+ return True
+ except h5py.h5e.LowLevelIOError:
+ pass
return False
diff -r a16fa728b1fc -r 0eae5b1c68d5 yt/frontends/gadget/fields.py
--- a/yt/frontends/gadget/fields.py Fri Sep 03 15:30:24 2010 -0700
+++ b/yt/frontends/gadget/fields.py Fri Sep 03 16:33:46 2010 -0700
@@ -23,6 +23,9 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
+import numpy as na
+
+from yt.funcs import *
from yt.data_objects.field_info_container import \
CodeFieldInfoContainer, \
ValidateParameter, \
@@ -90,13 +93,21 @@
validators = [ValidateDataField("VEL")],
units=r"")
-add_field("ID", function=lambda a,b: None, take_log=True,
+add_field("id", function=lambda a,b: None, take_log=True,
validators = [ValidateDataField("ID")],
units=r"")
-add_field("MASS", function=lambda a,b: None, take_log=True,
- validators = [ValidateDataField("MASS")],
+add_field("mass", function=lambda a,b: None, take_log=True,
+ validators = [ValidateDataField("mass")],
units=r"\rm{g}")
+def _particle_mass(field, data):
+ return data["mass"]/just_one(data["CellVolume"])
+def _convert_particle_mass(data):
+ return 1.0
+add_field("particle_mass", function=_particle_mass, take_log=True,
+ convert_function=_convert_particle_mass,
+ validators = [ValidateSpatial(0)],
+ units=r"\mathrm{g}\/\mathrm{cm}^{-3}")
add_field("U", function=lambda a,b: None, take_log=True,
validators = [ValidateDataField("U")],
diff -r a16fa728b1fc -r 0eae5b1c68d5 yt/frontends/gadget/io.py
--- a/yt/frontends/gadget/io.py Fri Sep 03 15:30:24 2010 -0700
+++ b/yt/frontends/gadget/io.py Fri Sep 03 16:33:46 2010 -0700
@@ -38,7 +38,7 @@
address = '/data/grid_%010i/particles/%s/%s' % (grid.id, ptype, field)
data.append(fh[address][:])
if len(data) > 0:
- data = na.vstack(data)
+ data = na.concatenate(data)
fh.close()
return na.array(data)
def _read_field_names(self,grid):
More information about the yt-svn
mailing list