[yt-svn] commit/yt: MatthewTurk: Merging
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Mon Mar 24 12:50:45 PDT 2014
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/2052f06e3786/
Changeset: 2052f06e3786
Branch: yt-3.0
User: MatthewTurk
Date: 2014-03-24 20:50:31
Summary: Merging
Affected #: 5 files
diff -r b061bd31de3a3bbc044cba3a2a955c9a3d5e1ce9 -r 2052f06e3786ee96c35d5a79851ea82066b1061d yt/fields/species_fields.py
--- a/yt/fields/species_fields.py
+++ b/yt/fields/species_fields.py
@@ -53,6 +53,12 @@
/ amu_cgs
return _number_density
+def _create_density_func(ftype, species):
+ def _density(field, data):
+ return data[ftype, "%s_fraction" % species] \
+ * data[ftype,'density']
+ return _density
+
def add_species_field_by_density(registry, ftype, species):
"""
This takes a field registry, a fluid type, and a species name and then
@@ -68,3 +74,19 @@
registry.add_field((ftype, "%s_number_density" % species),
function = _create_number_density_func(ftype, species),
units = "cm**-3")
+
+def add_species_field_by_fraction(registry, ftype, species):
+ """
+ This takes a field registry, a fluid type, and a species name and then
+ adds the other fluids based on that. This assumes that the field
+ "SPECIES_fraction" already exists and refers to mass fraction.
+ """
+ registry.add_field((ftype, "%s_density" % species),
+ function = _create_density_func(ftype, species),
+ units = "g/cm**3")
+ registry.add_field((ftype, "%s_mass" % species),
+ function = _create_mass_func(ftype, species),
+ units = "g")
+ registry.add_field((ftype, "%s_number_density" % species),
+ function = _create_number_density_func(ftype, species),
+ units = "cm**-3")
diff -r b061bd31de3a3bbc044cba3a2a955c9a3d5e1ce9 -r 2052f06e3786ee96c35d5a79851ea82066b1061d yt/frontends/sph/data_structures.py
--- a/yt/frontends/sph/data_structures.py
+++ b/yt/frontends/sph/data_structures.py
@@ -38,7 +38,7 @@
mass_sun_cgs
from yt.utilities.cosmology import Cosmology
from .fields import \
- SPHFieldInfo
+ SPHFieldInfo, OWLSFieldInfo
from .definitions import \
gadget_header_specs, \
gadget_field_specs, \
@@ -284,6 +284,7 @@
class OWLSDataset(GadgetHDF5Dataset):
_particle_mass_name = "Mass"
+ _field_info_class = OWLSFieldInfo
def _parse_parameter_file(self):
handle = h5py.File(self.parameter_filename, mode="r")
diff -r b061bd31de3a3bbc044cba3a2a955c9a3d5e1ce9 -r 2052f06e3786ee96c35d5a79851ea82066b1061d yt/frontends/sph/fields.py
--- a/yt/frontends/sph/fields.py
+++ b/yt/frontends/sph/fields.py
@@ -23,6 +23,10 @@
gadget_ptypes, \
ghdf5_ptypes
+from yt.fields.species_fields import add_species_field_by_fraction
+
+
+
# Here are helper functions for things like vector fields and so on.
def _get_conv(cf):
@@ -50,3 +54,40 @@
("Phi", ("code_length", [], None)),
("FormationTime", ("code_time", ["creation_time"], None)),
)
+
+
+
+
+class OWLSFieldInfo(SPHFieldInfo):
+
+ _species_fractions = ['H_fraction', 'He_fraction', 'C_fraction',
+ 'N_fraction', 'O_fraction', 'Ne_fraction',
+ 'Mg_fraction', 'Si_fraction', 'Fe_fraction']
+
+ # override
+ #--------------------------------------------------------------
+ def __init__(self, *args, **kwargs):
+
+ new_particle_fields = (
+ ('Hydrogen', ('', ['H_fraction'], None)),
+ ('Helium', ('', ['He_fraction'], None)),
+ ('Carbon', ('', ['C_fraction'], None)),
+ ('Nitrogen', ('', ['N_fraction'], None)),
+ ('Oxygen', ('', ['O_fraction'], None)),
+ ('Neon', ('', ['Ne_fraction'], None)),
+ ('Magnesium', ('', ['Mg_fraction'], None)),
+ ('Silicon', ('', ['Si_fraction'], None)),
+ ('Iron', ('', ['Fe_fraction'], None))
+ )
+
+ self.known_particle_fields += new_particle_fields
+
+ super(OWLSFieldInfo,self).__init__( *args, **kwargs )
+
+
+
+ def setup_fluid_fields(self):
+ # here species_name is "H", "He", etc
+ for s in self._species_fractions:
+ species_name = s.split('_')[0]
+ add_species_field_by_fraction(self, "gas", species_name)
diff -r b061bd31de3a3bbc044cba3a2a955c9a3d5e1ce9 -r 2052f06e3786ee96c35d5a79851ea82066b1061d yt/frontends/sph/io.py
--- a/yt/frontends/sph/io.py
+++ b/yt/frontends/sph/io.py
@@ -53,6 +53,9 @@
_vector_fields = ("Coordinates", "Velocity", "Velocities")
_known_ptypes = ghdf5_ptypes
_var_mass = None
+ _element_fields = ('Hydrogen', 'Helium', 'Carbon', 'Nitrogen', 'Oxygen',
+ 'Neon', 'Magnesium', 'Silicon', 'Iron' )
+
@property
def var_mass(self):
@@ -100,13 +103,20 @@
del coords
if mask is None: continue
for field in field_list:
+
if field in ("Mass", "Masses") and \
ptype not in self.var_mass:
data = np.empty(mask.sum(), dtype="float64")
ind = self._known_ptypes.index(ptype)
data[:] = self.pf["Massarr"][ind]
+
+ elif field in self._element_fields:
+ rfield = 'ElementAbundance/' + field
+ data = g[rfield][:][mask,...]
+
else:
data = g[field][:][mask,...]
+
yield (ptype, field), data
f.close()
@@ -144,24 +154,46 @@
npart = dict(("PartType%s" % (i), v) for i, v in enumerate(pcount))
return npart
+
def _identify_fields(self, data_file):
f = _get_h5_handle(data_file.filename)
fields = []
- cname = self.pf._particle_coordinates_name
- mname = self.pf._particle_mass_name
- for key in f.keys():
+ cname = self.pf._particle_coordinates_name # Coordinates
+ mname = self.pf._particle_mass_name # Mass
+
+ # loop over all keys in OWLS hdf5 file
+ #--------------------------------------------------
+ for key in f.keys():
+
+ # only want particle data
+ #--------------------------------------
if not key.startswith("PartType"): continue
+
+ # particle data group
+ #--------------------------------------
g = f[key]
if cname not in g: continue
+
+ # note str => not unicode!
+
#ptype = int(key[8:])
ptype = str(key)
+
+ # loop over all keys in PartTypeX group
+ #----------------------------------------
for k in g.keys():
- if not hasattr(g[k], "shape"): continue
- # str => not unicode!
- fields.append((ptype, str(k)))
- if mname not in g.keys():
- # We'll append it anyway.
- fields.append((ptype, mname))
+
+ if k == 'ElementAbundance':
+ gp = g[k]
+ for j in gp.keys():
+ kk = j
+ fields.append((ptype, str(kk)))
+ else:
+ kk = k
+ if not hasattr(g[kk], "shape"): continue
+ fields.append((ptype, str(kk)))
+
+
f.close()
return fields, {}
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