# HG changeset patch # User Matthew Turk # Date 1283408589 25200 # Branch yt # Node ID ae6149ab12f91c2abc611b51f92ea2948664857c # Parent 48274493af4e82e80ce2a83c982dee71f88486a8 Assuming sorted particles, the particle IO is now substantially faster in FLASH datasets. diff -r 48274493af4e82e80ce2a83c982dee71f88486a8 -r ae6149ab12f91c2abc611b51f92ea2948664857c 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:23:09 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 48274493af4e82e80ce2a83c982dee71f88486a8 -r ae6149ab12f91c2abc611b51f92ea2948664857c 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:23:09 2010 -0700 @@ -68,7 +68,10 @@ def _read_data_set(self, grid, field): f = self._handle if field in self._particle_fields: - tr = self._select_particles(grid, field) + 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")