[yt-svn] commit/yt: 4 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Thu Oct 2 16:16:27 PDT 2014
4 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/29b9257922ed/
Changeset: 29b9257922ed
Branch: yt
User: atmyers
Date: 2014-10-01 07:19:26+00:00
Summary: Orion sink particle optimizations
Affected #: 4 files
diff -r 7c48b53f10cb25b0b2aa820706f5f54ec292e9ae -r 29b9257922edb6db2adb478eb61729ada31bead8 yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -683,7 +683,7 @@
with open(fn, 'r') as f:
lines = f.readlines()
self.num_stars = int(lines[0].strip()[0])
- for line in lines[1:]:
+ for num, line in enumerate(lines[1:]):
particle_position_x = float(line.split(' ')[1])
particle_position_y = float(line.split(' ')[2])
particle_position_z = float(line.split(' ')[3])
@@ -704,6 +704,12 @@
ind = np.where(self.grids == grid)[0][0]
self.grid_particle_count[ind] += 1
self.grids[ind].NumberOfParticles += 1
+
+ # store the position in the *.sink file for fast access.
+ try:
+ self.grids[ind]._particle_line_numbers.append(num + 1)
+ except AttributeError:
+ self.grids[ind]._particle_line_numbers = [num + 1]
return True
diff -r 7c48b53f10cb25b0b2aa820706f5f54ec292e9ae -r 29b9257922edb6db2adb478eb61729ada31bead8 yt/frontends/boxlib/io.py
--- a/yt/frontends/boxlib/io.py
+++ b/yt/frontends/boxlib/io.py
@@ -125,29 +125,27 @@
rv[ftype, fname] = np.concatenate((data, rv[ftype, fname]))
return rv
- def _read_particles(self, grid, field):
+ def _read_particles(self, grid, field):
"""
parses the Orion Star Particle text files
"""
- fn = self.particle_filename
+ particles = []
+
+ if grid.NumberOfParticles == 0:
+ return np.array(particles)
def read(line, field):
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
+ fn = self.particle_filename
with open(fn, 'r') as f:
lines = f.readlines()
- particles = []
- for line in lines[1:]:
- if grid.NumberOfParticles > 0:
- coord = read(line, "particle_position_x"), \
- read(line, "particle_position_y"), \
- read(line, "particle_position_z")
- if ( (grid.LeftEdge <= coord).all() and
- (coord <= grid.RightEdge).all() ):
- particles.append(read(line, field))
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
return np.array(particles)
diff -r 7c48b53f10cb25b0b2aa820706f5f54ec292e9ae -r 29b9257922edb6db2adb478eb61729ada31bead8 yt/frontends/chombo/data_structures.py
--- a/yt/frontends/chombo/data_structures.py
+++ b/yt/frontends/chombo/data_structures.py
@@ -540,14 +540,14 @@
with open(self.particle_filename, 'r') as f:
lines = f.readlines()
self.num_stars = int(lines[0].strip().split(' ')[0])
- for line in lines[1:]:
+ for num, line in enumerate(lines[1:]):
particle_position_x = float(line.split(' ')[1])
particle_position_y = float(line.split(' ')[2])
particle_position_z = float(line.split(' ')[3])
coord = [particle_position_x, particle_position_y, particle_position_z]
# for each particle, determine which grids contain it
# copied from object_finding_mixin.py
- mask=np.ones(self.num_grids)
+ mask = np.ones(self.num_grids)
for i in xrange(len(coord)):
np.choose(np.greater(self.grid_left_edge.d[:,i],coord[i]), (mask,0), mask)
np.choose(np.greater(self.grid_right_edge.d[:,i],coord[i]), (0,mask), mask)
@@ -562,6 +562,12 @@
self.grid_particle_count[ind] += 1
self.grids[ind].NumberOfParticles += 1
+ # store the position in the *.sink file for fast access.
+ try:
+ self.grids[ind]._particle_line_numbers.append(num + 1)
+ except AttributeError:
+ self.grids[ind]._particle_line_numbers = [num + 1]
+
class Orion2Dataset(ChomboDataset):
diff -r 7c48b53f10cb25b0b2aa820706f5f54ec292e9ae -r 29b9257922edb6db2adb478eb61729ada31bead8 yt/frontends/chombo/io.py
--- a/yt/frontends/chombo/io.py
+++ b/yt/frontends/chombo/io.py
@@ -289,6 +289,11 @@
"""
+ particles = []
+
+ if grid.NumberOfParticles == 0:
+ return np.array(particles)
+
def read(line, field):
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
@@ -296,13 +301,7 @@
fn = grid.ds.fullplotdir[:-4] + "sink"
with open(fn, 'r') as f:
lines = f.readlines()
- particles = []
- for line in lines[1:]:
- if grid.NumberOfParticles > 0:
- coord = read(line, "particle_position_x"), \
- read(line, "particle_position_y"), \
- read(line, "particle_position_z")
- if ((grid.LeftEdge <= coord).all() and
- (coord <= grid.RightEdge).all() ):
- particles.append(read(line, field))
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
return np.array(particles)
https://bitbucket.org/yt_analysis/yt/commits/e241341675f1/
Changeset: e241341675f1
Branch: yt
User: atmyers
Date: 2014-10-01 07:23:24+00:00
Summary: fixing typo in comment
Affected #: 1 file
diff -r 29b9257922edb6db2adb478eb61729ada31bead8 -r e241341675f1f1592338ce14c34cf432575053ed yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -705,7 +705,7 @@
self.grid_particle_count[ind] += 1
self.grids[ind].NumberOfParticles += 1
- # store the position in the *.sink file for fast access.
+ # store the position in the particle file for fast access.
try:
self.grids[ind]._particle_line_numbers.append(num + 1)
except AttributeError:
https://bitbucket.org/yt_analysis/yt/commits/c5ce18a0efde/
Changeset: c5ce18a0efde
Branch: yt
User: atmyers
Date: 2014-10-02 00:46:43+00:00
Summary: caching the particle file so it doesn't get read multiple times as well
Affected #: 2 files
diff -r e241341675f1f1592338ce14c34cf432575053ed -r c5ce18a0efde184ceb2a209e5246598ae4774fb8 yt/frontends/boxlib/io.py
--- a/yt/frontends/boxlib/io.py
+++ b/yt/frontends/boxlib/io.py
@@ -140,13 +140,21 @@
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
- fn = self.particle_filename
- with open(fn, 'r') as f:
- lines = f.readlines()
+ try:
+ lines = self._cached_lines
for num in grid._particle_line_numbers:
line = lines[num]
particles.append(read(line, field))
- return np.array(particles)
+ return np.array(particles)
+ except AttributeError:
+ fn = self.particle_filename
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ self._cached_lines = lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
class IOHandlerCastro(IOHandlerBoxlib):
diff -r e241341675f1f1592338ce14c34cf432575053ed -r c5ce18a0efde184ceb2a209e5246598ae4774fb8 yt/frontends/chombo/io.py
--- a/yt/frontends/chombo/io.py
+++ b/yt/frontends/chombo/io.py
@@ -69,11 +69,11 @@
self._particle_field_index = field_dict
return self._particle_field_index
- def _read_field_names(self,grid):
+ def _read_field_names(self, grid):
ncomp = int(self._handle.attrs['num_components'])
fns = [c[1] for c in f.attrs.items()[-ncomp-1:-1]]
- def _read_data(self,grid,field):
+ def _read_data(self, grid, field):
lstring = 'level_%i' % grid.Level
lev = self._handle[lstring]
dims = grid.ActiveDimensions
@@ -298,10 +298,18 @@
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
- fn = grid.ds.fullplotdir[:-4] + "sink"
- with open(fn, 'r') as f:
- lines = f.readlines()
+ try:
+ lines = self._cached_lines
for num in grid._particle_line_numbers:
line = lines[num]
particles.append(read(line, field))
- return np.array(particles)
+ return np.array(particles)
+ except AttributeError:
+ fn = grid.ds.fullplotdir[:-4] + "sink"
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ self._cached_lines = lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
https://bitbucket.org/yt_analysis/yt/commits/bcb2b0862ef0/
Changeset: bcb2b0862ef0
Branch: yt
User: ChrisMalone
Date: 2014-10-02 23:16:20+00:00
Summary: Merged in atmyers/yt (pull request #1230)
Orion particle speedup
Affected #: 4 files
diff -r c0d6e31c64f3cd8029b911c36d2d08185434f713 -r bcb2b0862ef066031bee060107e06de5eda235ad yt/frontends/boxlib/data_structures.py
--- a/yt/frontends/boxlib/data_structures.py
+++ b/yt/frontends/boxlib/data_structures.py
@@ -683,7 +683,7 @@
with open(fn, 'r') as f:
lines = f.readlines()
self.num_stars = int(lines[0].strip()[0])
- for line in lines[1:]:
+ for num, line in enumerate(lines[1:]):
particle_position_x = float(line.split(' ')[1])
particle_position_y = float(line.split(' ')[2])
particle_position_z = float(line.split(' ')[3])
@@ -704,6 +704,12 @@
ind = np.where(self.grids == grid)[0][0]
self.grid_particle_count[ind] += 1
self.grids[ind].NumberOfParticles += 1
+
+ # store the position in the particle file for fast access.
+ try:
+ self.grids[ind]._particle_line_numbers.append(num + 1)
+ except AttributeError:
+ self.grids[ind]._particle_line_numbers = [num + 1]
return True
diff -r c0d6e31c64f3cd8029b911c36d2d08185434f713 -r bcb2b0862ef066031bee060107e06de5eda235ad yt/frontends/boxlib/io.py
--- a/yt/frontends/boxlib/io.py
+++ b/yt/frontends/boxlib/io.py
@@ -125,30 +125,36 @@
rv[ftype, fname] = np.concatenate((data, rv[ftype, fname]))
return rv
- def _read_particles(self, grid, field):
+ def _read_particles(self, grid, field):
"""
parses the Orion Star Particle text files
"""
- fn = self.particle_filename
+ particles = []
+
+ if grid.NumberOfParticles == 0:
+ return np.array(particles)
def read(line, field):
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
- with open(fn, 'r') as f:
- lines = f.readlines()
- particles = []
- for line in lines[1:]:
- if grid.NumberOfParticles > 0:
- coord = read(line, "particle_position_x"), \
- read(line, "particle_position_y"), \
- read(line, "particle_position_z")
- if ( (grid.LeftEdge <= coord).all() and
- (coord <= grid.RightEdge).all() ):
- particles.append(read(line, field))
- return np.array(particles)
+ try:
+ lines = self._cached_lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
+ except AttributeError:
+ fn = self.particle_filename
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ self._cached_lines = lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
class IOHandlerCastro(IOHandlerBoxlib):
diff -r c0d6e31c64f3cd8029b911c36d2d08185434f713 -r bcb2b0862ef066031bee060107e06de5eda235ad yt/frontends/chombo/data_structures.py
--- a/yt/frontends/chombo/data_structures.py
+++ b/yt/frontends/chombo/data_structures.py
@@ -540,14 +540,14 @@
with open(self.particle_filename, 'r') as f:
lines = f.readlines()
self.num_stars = int(lines[0].strip().split(' ')[0])
- for line in lines[1:]:
+ for num, line in enumerate(lines[1:]):
particle_position_x = float(line.split(' ')[1])
particle_position_y = float(line.split(' ')[2])
particle_position_z = float(line.split(' ')[3])
coord = [particle_position_x, particle_position_y, particle_position_z]
# for each particle, determine which grids contain it
# copied from object_finding_mixin.py
- mask=np.ones(self.num_grids)
+ mask = np.ones(self.num_grids)
for i in xrange(len(coord)):
np.choose(np.greater(self.grid_left_edge.d[:,i],coord[i]), (mask,0), mask)
np.choose(np.greater(self.grid_right_edge.d[:,i],coord[i]), (0,mask), mask)
@@ -562,6 +562,12 @@
self.grid_particle_count[ind] += 1
self.grids[ind].NumberOfParticles += 1
+ # store the position in the *.sink file for fast access.
+ try:
+ self.grids[ind]._particle_line_numbers.append(num + 1)
+ except AttributeError:
+ self.grids[ind]._particle_line_numbers = [num + 1]
+
class Orion2Dataset(ChomboDataset):
diff -r c0d6e31c64f3cd8029b911c36d2d08185434f713 -r bcb2b0862ef066031bee060107e06de5eda235ad yt/frontends/chombo/io.py
--- a/yt/frontends/chombo/io.py
+++ b/yt/frontends/chombo/io.py
@@ -69,11 +69,11 @@
self._particle_field_index = field_dict
return self._particle_field_index
- def _read_field_names(self,grid):
+ def _read_field_names(self, grid):
ncomp = int(self._handle.attrs['num_components'])
fns = [c[1] for c in f.attrs.items()[-ncomp-1:-1]]
- def _read_data(self,grid,field):
+ def _read_data(self, grid, field):
lstring = 'level_%i' % grid.Level
lev = self._handle[lstring]
dims = grid.ActiveDimensions
@@ -289,20 +289,27 @@
"""
+ particles = []
+
+ if grid.NumberOfParticles == 0:
+ return np.array(particles)
+
def read(line, field):
entry = line.strip().split(' ')[self.particle_field_index[field]]
return np.float(entry)
- fn = grid.ds.fullplotdir[:-4] + "sink"
- with open(fn, 'r') as f:
- lines = f.readlines()
- particles = []
- for line in lines[1:]:
- if grid.NumberOfParticles > 0:
- coord = read(line, "particle_position_x"), \
- read(line, "particle_position_y"), \
- read(line, "particle_position_z")
- if ((grid.LeftEdge <= coord).all() and
- (coord <= grid.RightEdge).all() ):
- particles.append(read(line, field))
- return np.array(particles)
+ try:
+ lines = self._cached_lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
+ except AttributeError:
+ fn = grid.ds.fullplotdir[:-4] + "sink"
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ self._cached_lines = lines
+ for num in grid._particle_line_numbers:
+ line = lines[num]
+ particles.append(read(line, field))
+ return np.array(particles)
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list