[Yt-svn] yt: 2 new changesets
hg at spacepope.org
hg at spacepope.org
Wed Sep 1 23:34:47 PDT 2010
hg Repository: yt
details: yt/rev/ae6149ab12f9
changeset: 3367:ae6149ab12f9
user: Matthew Turk <matthewturk at gmail.com>
date:
Wed Sep 01 23:23:09 2010 -0700
description:
Assuming sorted particles, the particle IO is now substantially faster in FLASH
datasets.
hg Repository: yt
details: yt/rev/e2b55f386569
changeset: 3368:e2b55f386569
user: Matthew Turk <matthewturk at gmail.com>
date:
Wed Sep 01 23:34:38 2010 -0700
description:
Adding additional particle handling for FLASH
diffstat:
yt/data_objects/object_finding_mixin.py | 8 ++++----
yt/frontends/flash/data_structures.py | 16 +---------------
yt/frontends/flash/fields.py | 11 +++++++++--
yt/frontends/flash/io.py | 6 +++++-
4 files changed, 19 insertions(+), 22 deletions(-)
diffs (95 lines):
diff -r 48274493af4e -r e2b55f386569 yt/data_objects/object_finding_mixin.py
--- a/yt/data_objects/object_finding_mixin.py Wed Sep 01 23:13:35 2010 -0700
+++ b/yt/data_objects/object_finding_mixin.py Wed Sep 01 23:34:38 2010 -0700
@@ -131,8 +131,8 @@
centers = (self.grid_right_edge + self.grid_left_edge)/2.0
long_axis = na.maximum.reduce(self.grid_right_edge - self.grid_left_edge, 1)
t = na.abs(centers - center)
- DW = self.parameter_file["DomainRightEdge"] \
- - self.parameter_file["DomainLeftEdge"]
+ DW = self.parameter_file.domain_right_edge \
+ - self.parameter_file.domain_left_edge
na.minimum(t, na.abs(DW-t), t)
dist = na.sqrt(na.sum((t**2.0), axis=1))
gridI = na.where(dist < (radius + long_axis))
@@ -150,8 +150,8 @@
left_edge = na.array(left_edge)
right_edge = na.array(right_edge)
mask = na.zeros(self.grids.shape, dtype='bool')
- dl = self.parameters["DomainLeftEdge"]
- dr = self.parameters["DomainRightEdge"]
+ dl = self.parameter_file.domain_left_edge
+ dr = self.parameter_file.domain_right_edge
db = right_edge - left_edge
for off_x in [-1, 0, 1]:
nle = left_edge.copy()
diff -r 48274493af4e -r e2b55f386569 yt/frontends/flash/data_structures.py
--- a/yt/frontends/flash/data_structures.py Wed Sep 01 23:13:35 2010 -0700
+++ b/yt/frontends/flash/data_structures.py Wed Sep 01 23:34:38 2010 -0700
@@ -114,21 +114,7 @@
nxb, nyb, nzb = [int(f["/simulation parameters"]['n%sb' % ax])
for ax in 'xyz']
self.grid_dimensions[:] *= (nxb, nyb, nzb)
- # particle_count is harder. We stride over the particle file and count
- # up per grid.
- npart = f["/tracer particles"].shape[0]
- blki = [s[0].strip() for s in f["/particle names"][:]].index("blk")
- start = 0
- stride = 1e6
- while start < npart:
- end = min(start + stride - 1, npart)
- blks = f["/tracer particles"][start:end,blki].astype("int64")
- ta = na.bincount(blks)
- old_size = ta.size
- ta = na.resize(ta, self.num_grids)
- ta[old_size:] = 0
- self.grid_particle_count += ta[:,None]
- start = end
+ self.grid_particle_count[:] = f["/localnp"][:][:,None]
# This will become redundant, as _prepare_grid will reset it to its
# current value. Note that FLASH uses 1-based indexing for refinement
# levels, but we do not, so we reduce the level by 1.
diff -r 48274493af4e -r e2b55f386569 yt/frontends/flash/fields.py
--- a/yt/frontends/flash/fields.py Wed Sep 01 23:13:35 2010 -0700
+++ b/yt/frontends/flash/fields.py Wed Sep 01 23:34:38 2010 -0700
@@ -64,15 +64,22 @@
"Total_Energy": "ener",
"Gas_Energy": "eint",
"Temperature": "temp",
+ "particle_position_x" : "particle_posx",
+ "particle_position_y" : "particle_posy",
+ "particle_position_z" : "particle_posz",
}
def _generate_translation(mine, theirs):
- add_field(theirs, function=lambda a, b: b[mine], take_log=True)
+ pfield = theirs.startswith("particle")
+ add_field(theirs, function=lambda a, b: b[mine], take_log=True,
+ particle_type = pfield)
for f,v in translation_dict.items():
if v not in FLASHFieldInfo:
+ pfield = v.startswith("particle")
add_field(v, function=lambda a,b: None, take_log=False,
- validators = [ValidateDataField(v)])
+ validators = [ValidateDataField(v)],
+ particle_type = pfield)
#print "Setting up translator from %s to %s" % (v, f)
_generate_translation(v, f)
diff -r 48274493af4e -r e2b55f386569 yt/frontends/flash/io.py
--- a/yt/frontends/flash/io.py Wed Sep 01 23:13:35 2010 -0700
+++ b/yt/frontends/flash/io.py Wed Sep 01 23:34:38 2010 -0700
@@ -68,7 +68,11 @@
def _read_data_set(self, grid, field):
f = self._handle
if field in self._particle_fields:
- tr = self._select_particles(grid, field)
+ if grid.NumberOfParticles == 0: return na.array([], dtype='float64')
+ start = na.sum(self.pf.h.grid_particle_count[:grid.id-grid._id_offset])
+ end = start + grid.NumberOfParticles
+ fi = self._particle_fields[field]
+ tr = f["/tracer particles"][start:end, fi]
else:
tr = f["/%s" % field][grid.id - grid._id_offset,:,:,:].transpose()
return tr.astype("float64")
More information about the yt-svn
mailing list