[yt-svn] commit/yt: 5 new changesets
Bitbucket
commits-noreply at bitbucket.org
Fri Jan 27 10:29:38 PST 2012
5 new commits in yt:
https://bitbucket.org/yt_analysis/yt/changeset/6fdf31a764c3/
changeset: 6fdf31a764c3
branch: yt
user: Andrew Myers
date: 2012-01-26 22:15:40
summary: first stab at adding particle support for Orion
affected #: 3 files
diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -26,6 +26,7 @@
import os
import re
import weakref
+import pdb
from collections import defaultdict
from string import strip, rstrip
@@ -88,7 +89,7 @@
h.grid_left_edge[self.id,:] = self.LeftEdge[:]
h.grid_right_edge[self.id,:] = self.RightEdge[:]
#self.Time = h.gridTimes[self.id,0]
- #self.NumberOfParticles = h.gridNumberOfParticles[self.id,0]
+ self.NumberOfParticles = 0 # these will be read in later
self.field_indexes = h.field_indexes
self.Children = h.gridTree[self.id]
pIDs = h.gridReverseTree[self.id]
@@ -127,7 +128,39 @@
self.__cache_endianness(self.levels[-1].grids[-1])
AMRHierarchy.__init__(self,pf, self.data_style)
self._populate_hierarchy()
-
+ self._read_particles()
+
+ def _read_particles(self):
+ """
+ reads in particles and assigns them to grids
+
+ """
+ self.grid_particle_count = na.zeros(len(self.grids))
+ fn = self.pf.fullplotdir + "/StarParticles"
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ self.num_stars = int(lines[0].strip())
+ for line in 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=na.ones(self.num_grids)
+ for i in xrange(len(coord)):
+ na.choose(na.greater(self.grid_left_edge[:,i],coord[i]), (mask,0), mask)
+ na.choose(na.greater(self.grid_right_edge[:,i],coord[i]), (0,mask), mask)
+ ind = na.where(mask == 1)
+ selected_grids = self.grids[ind]
+ # in orion, particles always live on the finest level.
+ # so, we want to assign the particle to the finest of
+ # the grids we just found
+ grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
+ ind = na.where(self.grids == grid)[0][0]
+ self.grid_particle_count[ind] += 1
+ self.grids[ind].NumberOfParticles += 1
+
def readGlobalHeader(self,filename,paranoid_read):
"""
read the global header file for an Orion plotfile output.
@@ -308,7 +341,7 @@
mylog.debug("Creating grid objects")
self.grids = na.concatenate([level.grids for level in self.levels])
self.grid_levels = na.concatenate([level.ngrids*[level.level] for level in self.levels])
- self.grid_levels = na.array(self.grid_levels.reshape((self.num_grids,1)),dtype='int32')
+ self.grid_levels = self.grid_levels.reshape((self.num_grids,1))
grid_dcs = na.concatenate([level.ngrids*[self.dx[level.level]] for level in self.levels],axis=0)
self.grid_dxs = grid_dcs[:,0].reshape((self.num_grids,1))
self.grid_dys = grid_dcs[:,1].reshape((self.num_grids,1))
@@ -488,7 +521,6 @@
param, vals = map(strip,map(rstrip,line.split("=")))
except ValueError:
mylog.error("ValueError: '%s'", line)
- continue
if orion2enzoDict.has_key(param):
paramName = orion2enzoDict[param]
t = map(parameterDict[paramName], vals.split())
@@ -509,7 +541,7 @@
self.parameters["TopGridRank"] = len(self.parameters["TopGridDimensions"])
self.dimensionality = self.parameters["TopGridRank"]
- self.domain_dimensions = na.array(self.parameters["TopGridDimensions"],dtype='int32')
+ self.domain_dimensions = self.parameters["TopGridDimensions"]
self.refine_by = self.parameters["RefineBy"]
if self.parameters.has_key("ComovingCoordinates") and bool(self.parameters["ComovingCoordinates"]):
diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/fields.py
--- a/yt/frontends/orion/fields.py
+++ b/yt/frontends/orion/fields.py
@@ -22,6 +22,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
+
+import numpy as na
+
from yt.utilities.physical_constants import \
mh, kboltz
from yt.data_objects.field_info_container import \
@@ -135,3 +138,38 @@
def _Temperature(field,data):
return (data.pf["Gamma"]-1.0)*data.pf["mu"]*mh*data["ThermalEnergy"]/(kboltz*data["Density"])
add_field("Temperature",function=_Temperature,units=r"\rm{Kelvin}",take_log=False)
+
+# particle fields
+
+def particle_func(p_field, dtype='float64'):
+ def _Particles(field, data):
+ io = data.hierarchy.io
+ if not data.NumberOfParticles > 0:
+ return na.array([], dtype=dtype)
+ else:
+ return io._read_particles(data, p_field).astype(dtype)
+
+ return _Particles
+
+_particle_field_list = ["mass",
+ "position_x",
+ "position_y",
+ "position_z",
+ "momentum_x",
+ "momentum_y",
+ "momentum_z",
+ "angmomen_x",
+ "angmomen_y",
+ "angmomen_z",
+ "mlast",
+ "mdeut",
+ "n",
+ "mdot",
+ "burnstate",
+ "id"]
+
+for pf in _particle_field_list:
+ pfunc = particle_func("particle_%s" % (pf))
+ add_field("particle_%s" % pf, function=pfunc,
+ validators = [ValidateSpatial(0)],
+ particle_type=True)
diff -r b00b8a98ec643bf18d1147cf8f398fc715e39d95 -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -39,11 +39,46 @@
def modify(self, field):
return field.swapaxes(0,2)
+ def _read_particles(self, grid, field):
+ """
+ parses the Orion Star Particle text files
+
+ """
+ index = {'particle_mass': 0,
+ 'particle_position_x': 1,
+ 'particle_position_y': 2,
+ 'particle_position_z': 3,
+ 'particle_momentum_x': 4,
+ 'particle_momentum_y': 5,
+ 'particle_momentum_z': 6,
+ 'particle_angmomen_x': 7,
+ 'particle_angmomen_y': 8,
+ 'particle_angmomen_z': 9,
+ 'particle_mlast': 10,
+ 'particle_mdeut': 11,
+ 'particle_n': 12,
+ 'particle_mdot': 13,
+ 'particle_burnstate': 14,
+ 'particle_id': 15}
+
+ def read(line, field):
+ return float(line.split(' ')[index[field]])
+
+ fn = grid.pf.fullplotdir + "/StarParticles"
+ with open(fn, 'r') as f:
+ lines = f.readlines()
+ particles = []
+ for line in lines[1:]:
+ particles.append(read(line, field))
+
+ return na.array(particles)
+
def _read_data_set(self,grid,field):
"""
reads packed multiFABs output by BoxLib in "NATIVE" format.
"""
+
filen = os.path.expanduser(grid.filename[field])
off = grid._offset[field]
inFile = open(filen,'rb')
https://bitbucket.org/yt_analysis/yt/changeset/389328b3894e/
changeset: 389328b3894e
branch: yt
user: Andrew Myers
date: 2012-01-26 22:22:59
summary: merging in some changes I accidently overrode
affected #: 1 file
diff -r 6fdf31a764c3db2e7cab310482ebe9cf77a28c3e -r 389328b3894e8281048c2468a30787af70c6b4db yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -341,7 +341,7 @@
mylog.debug("Creating grid objects")
self.grids = na.concatenate([level.grids for level in self.levels])
self.grid_levels = na.concatenate([level.ngrids*[level.level] for level in self.levels])
- self.grid_levels = self.grid_levels.reshape((self.num_grids,1))
+ self.grid_levels = na.array(self.grid_levels.reshape((self.num_grids,1)),dtype='int32')
grid_dcs = na.concatenate([level.ngrids*[self.dx[level.level]] for level in self.levels],axis=0)
self.grid_dxs = grid_dcs[:,0].reshape((self.num_grids,1))
self.grid_dys = grid_dcs[:,1].reshape((self.num_grids,1))
@@ -521,6 +521,7 @@
param, vals = map(strip,map(rstrip,line.split("=")))
except ValueError:
mylog.error("ValueError: '%s'", line)
+ continue
if orion2enzoDict.has_key(param):
paramName = orion2enzoDict[param]
t = map(parameterDict[paramName], vals.split())
@@ -541,7 +542,7 @@
self.parameters["TopGridRank"] = len(self.parameters["TopGridDimensions"])
self.dimensionality = self.parameters["TopGridRank"]
- self.domain_dimensions = self.parameters["TopGridDimensions"]
+ self.domain_dimensions = na.array(self.parameters["TopGridDimensions"],dtype='int32')
self.refine_by = self.parameters["RefineBy"]
if self.parameters.has_key("ComovingCoordinates") and bool(self.parameters["ComovingCoordinates"]):
https://bitbucket.org/yt_analysis/yt/changeset/b79b37c2536c/
changeset: b79b37c2536c
branch: yt
user: Andrew Myers
date: 2012-01-26 23:39:39
summary: don't need pdb anymore
affected #: 1 file
diff -r 389328b3894e8281048c2468a30787af70c6b4db -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -26,7 +26,6 @@
import os
import re
import weakref
-import pdb
from collections import defaultdict
from string import strip, rstrip
https://bitbucket.org/yt_analysis/yt/changeset/3971d2d44d68/
changeset: 3971d2d44d68
branch: yt
user: Andrew Myers
date: 2012-01-27 01:26:52
summary: a couple of fixes for the particle reader
affected #: 2 files
diff -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e -r 3971d2d44d68915a101776fb98a1fa8674cac976 yt/frontends/orion/data_structures.py
--- a/yt/frontends/orion/data_structures.py
+++ b/yt/frontends/orion/data_structures.py
@@ -151,14 +151,15 @@
na.choose(na.greater(self.grid_left_edge[:,i],coord[i]), (mask,0), mask)
na.choose(na.greater(self.grid_right_edge[:,i],coord[i]), (0,mask), mask)
ind = na.where(mask == 1)
- selected_grids = self.grids[ind]
- # in orion, particles always live on the finest level.
- # so, we want to assign the particle to the finest of
- # the grids we just found
- grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
- ind = na.where(self.grids == grid)[0][0]
- self.grid_particle_count[ind] += 1
- self.grids[ind].NumberOfParticles += 1
+ selected_grids = self.grids[ind]
+ # in orion, particles always live on the finest level.
+ # so, we want to assign the particle to the finest of
+ # the grids we just found
+ if len(selected_grids) != 0:
+ grid = sorted(selected_grids, key=lambda grid: grid.Level)[-1]
+ ind = na.where(self.grids == grid)[0][0]
+ self.grid_particle_count[ind] += 1
+ self.grids[ind].NumberOfParticles += 1
def readGlobalHeader(self,filename,paranoid_read):
"""
diff -r b79b37c2536cc0a9a31e219e4e9c79feb257e73e -r 3971d2d44d68915a101776fb98a1fa8674cac976 yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -69,8 +69,14 @@
lines = f.readlines()
particles = []
for line in lines[1:]:
- particles.append(read(line, field))
-
+ if grid.NumberOfParticles > 0:
+ x = read(line, "particle_position_x")
+ y = read(line, "particle_position_y")
+ z = read(line, "particle_position_z")
+ if (grid.LeftEdge[0] < x < grid.RightEdge[0] and
+ grid.LeftEdge[1] < y < grid.RightEdge[1] and
+ grid.LeftEdge[2] < z < grid.RightEdge[2]):
+ particles.append(read(line, field))
return na.array(particles)
def _read_data_set(self,grid,field):
https://bitbucket.org/yt_analysis/yt/changeset/6d8bfb101da0/
changeset: 6d8bfb101da0
branch: yt
user: Andrew Myers
date: 2012-01-27 16:38:41
summary: particles in Orion tested and working
affected #: 1 file
diff -r 3971d2d44d68915a101776fb98a1fa8674cac976 -r 6d8bfb101da035580ef9140ec994e5104b275dce yt/frontends/orion/io.py
--- a/yt/frontends/orion/io.py
+++ b/yt/frontends/orion/io.py
@@ -70,12 +70,11 @@
particles = []
for line in lines[1:]:
if grid.NumberOfParticles > 0:
- x = read(line, "particle_position_x")
- y = read(line, "particle_position_y")
- z = read(line, "particle_position_z")
- if (grid.LeftEdge[0] < x < grid.RightEdge[0] and
- grid.LeftEdge[1] < y < grid.RightEdge[1] and
- grid.LeftEdge[2] < z < grid.RightEdge[2]):
+ 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 na.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