[yt-svn] commit/yt: MatthewTurk: Merged in karraki/yt (pull request #1438)
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Thu Jul 23 09:12:45 PDT 2015
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/fcc7f7abfff1/
Changeset: fcc7f7abfff1
Branch: yt
User: MatthewTurk
Date: 2015-07-23 16:12:33+00:00
Summary: Merged in karraki/yt (pull request #1438)
[NEW] NMSU-ART tests
Affected #: 4 files
diff -r 610e1c392d21d529b1fcb2ed88c98f50f67bcde0 -r fcc7f7abfff1f2d6c0598bc54b421121ab4d029b yt/frontends/art/data_structures.py
--- a/yt/frontends/art/data_structures.py
+++ b/yt/frontends/art/data_structures.py
@@ -255,7 +255,6 @@
self.velocity_unit = self.quan(velocity, "cm/s")
self.time_unit = self.length_unit / self.velocity_unit
-
def _parse_parameter_file(self):
"""
Get the various simulation parameters & constants.
diff -r 610e1c392d21d529b1fcb2ed88c98f50f67bcde0 -r fcc7f7abfff1f2d6c0598bc54b421121ab4d029b yt/frontends/art/fields.py
--- a/yt/frontends/art/fields.py
+++ b/yt/frontends/art/fields.py
@@ -60,3 +60,75 @@
("particle_metallicity1", ("", [], None)),
("particle_metallicity2", ("", [], None)),
)
+
+ def setup_fluid_fields(self):
+ def _temperature(field, data):
+ r0 = data.ds.parameters['boxh'] / data.ds.parameters['ng']
+ tr = data.ds.quan(3.03e5 * r0**2, 'K/code_velocity**2')
+ tr *= data.ds.parameters['wmu'] * data.ds.parameters['Om0']
+ tr *= (data.ds.parameters['gamma'] - 1.)
+ tr /= data.ds.parameters['aexpn']**2
+ return tr * data['art', 'GasEnergy'] / data['art', 'Density']
+ self.add_field(('gas', 'temperature'),
+ function=_temperature,
+ units='K')
+
+ def _get_vel(axis):
+ def velocity(field, data):
+ return (data[('gas','momentum_%s' % axis)] /
+ data[('gas','density')])
+ return velocity
+ for ax in 'xyz':
+ self.add_field(('gas','velocity_%s' % ax),
+ function = _get_vel(ax),
+ units='cm/s')
+
+ def _momentum_magnitude(field, data):
+ tr = (data['gas','momentum_x']**2 +
+ data['gas','momentum_y']**2 +
+ data['gas','momentum_z']**2)**0.5
+ tr *= data['index','cell_volume'].in_units('cm**3')
+ return tr
+ self.add_field(('gas', 'momentum_magnitude'),
+ function=_momentum_magnitude,
+ units='g*cm/s')
+
+ def _velocity_magnitude(field, data):
+ tr = data['gas','momentum_magnitude']
+ tr /= data['gas','cell_mass']
+ return tr
+ self.add_field(('gas', 'velocity_magnitude'),
+ function=_velocity_magnitude,
+ units='cm/s')
+
+ def _metal_density(field, data):
+ tr = data['gas','metal_ia_density']
+ tr += data['gas','metal_ii_density']
+ return tr
+ self.add_field(('gas','metal_density'),
+ function=_metal_density,
+ units='g/cm**3')
+
+ def _metal_mass_fraction(field, data):
+ tr = data['gas','metal_density']
+ tr /= data['gas','density']
+ return tr
+ self.add_field(('gas', 'metal_mass_fraction'),
+ function=_metal_mass_fraction,
+ units='')
+
+ def _H_mass_fraction(field, data):
+ tr = (1. - data.ds.parameters['Y_p'] -
+ data['gas', 'metal_mass_fraction'])
+ return tr
+ self.add_field(('gas', 'H_mass_fraction'),
+ function=_H_mass_fraction,
+ units='')
+
+ def _metallicity(field, data):
+ tr = data['gas','metal_mass_fraction']
+ tr /= data['gas','H_mass_fraction']
+ return tr
+ self.add_field(('gas', 'metallicity'),
+ function=_metallicity,
+ units='')
diff -r 610e1c392d21d529b1fcb2ed88c98f50f67bcde0 -r fcc7f7abfff1f2d6c0598bc54b421121ab4d029b yt/frontends/art/io.py
--- a/yt/frontends/art/io.py
+++ b/yt/frontends/art/io.py
@@ -133,7 +133,7 @@
tr[field] = rp([ax])[0]/dd - off
if fname.startswith("particle_velocity_%s" % ax):
tr[field], = rp(['v'+ax])
- if fname == "particle_mass":
+ if fname.startswith("particle_mass"):
a = 0
data = np.zeros(npa, dtype='f8')
for ptb, size, m in zip(pbool, sizes, self.ws):
@@ -170,7 +170,7 @@
tr[field] = temp
del data
# We check again, after it's been filled
- if fname == "particle_mass":
+ if fname.startswith("particle_mass"):
# We now divide by NGrid in order to make this match up. Note that
# this means that even when requested in *code units*, we are
# giving them as modified by the ng value. This only works for
@@ -239,7 +239,7 @@
tr[field] = rp([ax])[0]/dd - off
if fname.startswith("particle_velocity_%s" % ax):
tr[field], = rp(['v'+ax])
- if fname == "particle_mass":
+ if fname.startswith("particle_mass"):
a = 0
data = np.zeros(npa, dtype='f8')
for ptb, size, m in zip(pbool, sizes, self.ws):
@@ -269,7 +269,7 @@
tr[field] = temp
del data
# We check again, after it's been filled
- if fname == "particle_mass":
+ if fname.startswith("particle_mass"):
# We now divide by NGrid in order to make this match up. Note that
# this means that even when requested in *code units*, we are
# giving them as modified by the ng value. This only works for
@@ -482,7 +482,8 @@
data = {}
with open(file, 'rb') as fh:
for dtype, variables in star_struct:
- found = field in variables or field == variables
+ found = (isinstance(variables, tuple) and field in variables) or \
+ field == variables
if found:
data[field] = read_vector(fh, dtype[1], dtype[0])
else:
diff -r 610e1c392d21d529b1fcb2ed88c98f50f67bcde0 -r fcc7f7abfff1f2d6c0598bc54b421121ab4d029b yt/frontends/art/tests/test_outputs.py
--- a/yt/frontends/art/tests/test_outputs.py
+++ b/yt/frontends/art/tests/test_outputs.py
@@ -46,6 +46,49 @@
dobj_name)
+ ad = ds.all_data()
+ # 'Ana' variable values output from the ART Fortran 'ANA' analysis code
+ AnaNStars = 6255
+ yield assert_equal, ad[('stars','particle_type')].size, AnaNStars
+ yield assert_equal, ad[('specie4', 'particle_type')].size, AnaNStars
+ AnaNDM = 2833405
+ yield assert_equal, ad[('darkmatter','particle_type')].size, AnaNDM
+ yield assert_equal, ad[('specie0', 'particle_type')].size + \
+ ad[('specie1', 'particle_type')].size + \
+ ad[('specie2', 'particle_type')].size + \
+ ad[('specie3', 'particle_type')].size, AnaNDM
+
+ AnaBoxSize = yt.units.yt_array.YTQuantity(7.1442196564,'Mpc')
+ AnaVolume = yt.units.yt_array.YTQuantity(364.640074656,'Mpc**3')
+ Volume = 1
+ for i in ds.domain_width.in_units('Mpc'):
+ yield assert_almost_equal, i, AnaBoxSize
+ Volume *= i
+ yield assert_almost_equal, Volume, AnaVolume
+
+ AnaNCells = 4087490
+ yield assert_equal, len(ad[('index','cell_volume')]), AnaNCells
+
+ AnaTotDMMass = yt.units.yt_array.YTQuantity(1.01191786811e+14,'Msun')
+ yield assert_almost_equal, ad[('darkmatter','particle_mass')].sum()\
+ .in_units('Msun'), AnaTotDMMass
+
+ AnaTotStarMass = yt.units.yt_array.YTQuantity(1776251.,'Msun')
+ yield assert_almost_equal, ad[('stars','particle_mass')].sum()\
+ .in_units('Msun'), AnaTotStarMass
+
+ AnaTotStarMassInitial = yt.units.yt_array.YTQuantity(2422854.,'Msun')
+ yield assert_almost_equal, ad[('stars','particle_mass_initial')].sum()\
+ .in_units('Msun'), AnaTotStarMass
+
+ AnaTotGasMass = yt.units.yt_array.YTQuantity(1.781994e+13,'Msun')
+ yield assert_almost_equal, ad[('gas','cell_mass')].sum()\
+ .in_units('Msun'), AnaTotGasMass
+
+ AnaTotTemp = yt.units.yt_array.YTQuantity(1.5019e11, 'K') #just leaves
+ yield assert_equal, ad[('gas','temperature')].sum(), AnaTotTemp
+
+
@requires_file(d9p)
def test_ARTDataset():
assert isinstance(data_dir_load(d9p), ARTDataset)
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