[yt-svn] commit/yt: 6 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Mon Apr 14 06:13:01 PDT 2014
6 new commits in yt:
https://bitbucket.org/yt_analysis/yt/commits/90058e8d2f93/
Changeset: 90058e8d2f93
Branch: yt-3.0
User: brittonsmith
Date: 2014-04-03 18:48:11
Summary: Fixing name of HD field.
Affected #: 1 file
diff -r 0abde8f94135e48c58a9a963d9d877024834495b -r 90058e8d2f935892fb3cca89f14a680872a8a6d3 yt/frontends/enzo/fields.py
--- a/yt/frontends/enzo/fields.py
+++ b/yt/frontends/enzo/fields.py
@@ -42,7 +42,7 @@
'HM' : 'H_m1',
'DI' : 'D',
'DII' : 'D_p1',
- 'HD' : 'HD',
+ 'HDI' : 'HD',
'Electron': 'El'
}
https://bitbucket.org/yt_analysis/yt/commits/fb799883b009/
Changeset: fb799883b009
Branch: yt-3.0
User: brittonsmith
Date: 2014-04-03 18:48:35
Summary: Adding interpolated field function.
Affected #: 1 file
diff -r 90058e8d2f935892fb3cca89f14a680872a8a6d3 -r fb799883b009207324987a9362ab45de6c0f578b yt/fields/interpolated_fields.py
--- /dev/null
+++ b/yt/fields/interpolated_fields.py
@@ -0,0 +1,49 @@
+"""
+Fields from interpolating data tables.
+
+
+
+"""
+
+#-----------------------------------------------------------------------------
+# Copyright (c) 2014, yt Development Team.
+#
+# Distributed under the terms of the Modified BSD License.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#-----------------------------------------------------------------------------
+
+import numpy as np
+
+from yt.fields.local_fields import add_field
+
+from yt.utilities.linear_interpolators import \
+ UnilinearFieldInterpolator, \
+ BilinearFieldInterpolator, \
+ TrilinearFieldInterpolator
+
+_int_class = {1: UnilinearFieldInterpolator,
+ 2: BilinearFieldInterpolator,
+ 3: TrilinearFieldInterpolator}
+
+def add_interpolated_field(name, units, table_data, axes_data, axes_fields,
+ ftype="gas", particle_type=False, validators=None,
+ truncate=True):
+
+ if len(table_data.shape) not in _int_class:
+ raise RuntimeError("Interpolated field can only be created from 1d, 2d, or 3d data.")
+
+ if len(axes_fields) != len(axes_data) or len(axes_fields) != len(table_data.shape):
+ raise RuntimeError("Data dimension mismatch: data is %d, %d axes data provided, and %d axes fields provided." %
+ (len(table_data.shape), len(axes_data), len(axes_fields)))
+
+ int_class = _int_class[len(table_data.shape)]
+ my_interpolator = int_class(table_data, axes_data, axes_fields, truncate=truncate)
+
+ def _interpolated_field(field, data):
+ return my_interpolator(data)
+ add_field((ftype, name),
+ function=_interpolated_field,
+ units=units,
+ validators=validators, particle_type=particle_type)
+
https://bitbucket.org/yt_analysis/yt/commits/eb390c816c49/
Changeset: eb390c816c49
Branch: yt-3.0
User: brittonsmith
Date: 2014-04-07 12:32:08
Summary: Adding nuclei density fields and fixing a bug in the number density field function.
Affected #: 3 files
diff -r fb799883b009207324987a9362ab45de6c0f578b -r eb390c816c49aaf14d6c53fc91eb4846c5e6abe0 yt/fields/field_info_container.py
--- a/yt/fields/field_info_container.py
+++ b/yt/fields/field_info_container.py
@@ -61,6 +61,7 @@
self.field_list = field_list
self.slice_info = slice_info
self.field_aliases = {}
+ self.species_names = []
self.setup_fluid_aliases()
def setup_fluid_fields(self):
diff -r fb799883b009207324987a9362ab45de6c0f578b -r eb390c816c49aaf14d6c53fc91eb4846c5e6abe0 yt/fields/species_fields.py
--- a/yt/fields/species_fields.py
+++ b/yt/fields/species_fields.py
@@ -14,6 +14,7 @@
#-----------------------------------------------------------------------------
import numpy as np
+import re
from yt.utilities.physical_constants import \
mh, \
@@ -50,7 +51,7 @@
weight *= amu_cgs
def _number_density(field, data):
return data[ftype, "%s_density" % species] \
- / amu_cgs
+ / weight
return _number_density
def _create_density_func(ftype, species):
@@ -102,3 +103,42 @@
function = _create_number_density_func(ftype, species),
particle_type = particle_type,
units = "cm**-3")
+
+def add_nuclei_density_fields(registry, ftype,
+ particle_type = False):
+ elements = _get_all_elements(registry.species_names)
+ for element in elements:
+ registry.add_field((ftype, "%s_nuclei_density" % element),
+ function = _nuclei_density,
+ particle_type = particle_type,
+ units = "cm**-3")
+
+def _nuclei_density(field, data):
+ element = field.name[1][:field.name[1].find("_")]
+ field_data = np.zeros_like(data["gas", "%s_number_density" %
+ data.pf.field_info.species_names[0]])
+ for species in data.pf.field_info.species_names:
+ nucleus = species
+ if "_" in species:
+ nucleus = species[:species.find("_")]
+ num = _get_element_multiple(nucleus, element)
+ field_data += num * data["gas", "%s_number_density" % species]
+ return field_data
+
+def _get_all_elements(species_list):
+ elements = []
+ for species in species_list:
+ for item in re.findall('[A-Z][a-z]?|[0-9]+', species):
+ if not item.isdigit() and item not in elements \
+ and item != "El":
+ elements.append(item)
+ return elements
+
+def _get_element_multiple(compound, element):
+ my_split = re.findall('[A-Z][a-z]?|[0-9]+', compound)
+ if element not in my_split:
+ return 0
+ loc = my_split.index(element)
+ if loc == len(my_split) - 1 or not my_split[loc + 1].isdigit():
+ return 1
+ return int(my_split[loc + 1])
diff -r fb799883b009207324987a9362ab45de6c0f578b -r eb390c816c49aaf14d6c53fc91eb4846c5e6abe0 yt/frontends/enzo/fields.py
--- a/yt/frontends/enzo/fields.py
+++ b/yt/frontends/enzo/fields.py
@@ -21,6 +21,7 @@
from yt.units.yt_array import \
YTArray
from yt.fields.species_fields import \
+ add_nuclei_density_fields, \
add_species_field_by_density
from yt.utilities.physical_constants import \
mh, me, mp, \
@@ -135,7 +136,8 @@
units = "g/cm**3")
for sp in species_names:
self.add_species_field(sp)
-
+ self.species_names.append(known_species_names[sp])
+ add_nuclei_density_fields(self, "gas")
def setup_fluid_fields(self):
# Now we conditionally load a few other things.
https://bitbucket.org/yt_analysis/yt/commits/3a0519fd3b26/
Changeset: 3a0519fd3b26
Branch: yt-3.0
User: brittonsmith
Date: 2014-04-07 13:01:56
Summary: Adding default H and He nuclei density fields with primordial abundances.
Affected #: 2 files
diff -r eb390c816c49aaf14d6c53fc91eb4846c5e6abe0 -r 3a0519fd3b26a2c87e7409fe6e864c62b0b364bc yt/fields/species_fields.py
--- a/yt/fields/species_fields.py
+++ b/yt/fields/species_fields.py
@@ -20,10 +20,16 @@
mh, \
mass_sun_cgs, \
amu_cgs
+from yt.utilities.physical_ratios import \
+ primordial_H_mass_fraction
from yt.funcs import *
from yt.utilities.chemical_formulas import \
ChemicalFormula
+_primordial_mass_fraction = \
+ {"H": primordial_H_mass_fraction,
+ "He" : (1 - primordial_H_mass_fraction)}
+
# See YTEP-0003 for details, but we want to ensure these fields are all
# populated:
#
@@ -112,7 +118,18 @@
function = _nuclei_density,
particle_type = particle_type,
units = "cm**-3")
+ if len(elements) == 0:
+ for element in ["H", "He"]:
+ registry.add_field((ftype, "%s_nuclei_density" % element),
+ function = _default_nuclei_density,
+ particle_type = particle_type,
+ units = "cm**-3")
+def _default_nuclei_density(field, data):
+ element = field.name[1][:field.name[1].find("_")]
+ return data["gas", "density"] * _primordial_mass_fraction[element] / \
+ ChemicalFormula(element).weight / amu_cgs
+
def _nuclei_density(field, data):
element = field.name[1][:field.name[1].find("_")]
field_data = np.zeros_like(data["gas", "%s_number_density" %
diff -r eb390c816c49aaf14d6c53fc91eb4846c5e6abe0 -r 3a0519fd3b26a2c87e7409fe6e864c62b0b364bc yt/utilities/physical_ratios.py
--- a/yt/utilities/physical_ratios.py
+++ b/yt/utilities/physical_ratios.py
@@ -80,6 +80,7 @@
jansky_cgs = 1.0e-23
# Cosmological constants
rho_crit_g_cm3_h2 = 1.8788e-29
+primordial_H_mass_fraction = 0.76
# Misc. Approximations
mass_mean_atomic_cosmology = 1.22
https://bitbucket.org/yt_analysis/yt/commits/4d3c17aa87a3/
Changeset: 4d3c17aa87a3
Branch: yt-3.0
User: brittonsmith
Date: 2014-04-07 13:23:57
Summary: Adding number density and fixing bug in Enzo electron density field.
Affected #: 2 files
diff -r 3a0519fd3b26a2c87e7409fe6e864c62b0b364bc -r 4d3c17aa87a33c242509f79a0fa4f4f0eb69c51a yt/fields/fluid_fields.py
--- a/yt/fields/fluid_fields.py
+++ b/yt/fields/fluid_fields.py
@@ -162,12 +162,22 @@
registry.add_field((ftype, "metal_mass"),
function=_metal_mass,
units="g")
+
+ def _number_density(field, data):
+ field_data = np.zeros_like(data["gas", "%s_number_density" % \
+ data.pf.field_info.species_names[0]])
+ for species in data.pf.field_info.species_names:
+ field_data += data["gas", "%s_number_density" % species]
+ return field_data
+ registry.add_field((ftype, "number_density"),
+ function = _number_density,
+ units="cm**-3")
def _mean_molecular_weight(field, data):
return (data[ftype, "density"] / (mh * data[ftype, "number_density"]))
registry.add_field((ftype, "mean_molecular_weight"),
function=_mean_molecular_weight,
- units=r"")
+ units="")
setup_gradient_fields(registry, (ftype, "pressure"), "dyne/cm**2",
slice_info)
diff -r 3a0519fd3b26a2c87e7409fe6e864c62b0b364bc -r 4d3c17aa87a33c242509f79a0fa4f4f0eb69c51a yt/frontends/enzo/fields.py
--- a/yt/frontends/enzo/fields.py
+++ b/yt/frontends/enzo/fields.py
@@ -120,8 +120,10 @@
take_log=True,
units="code_mass/code_length**3")
yt_name = known_species_names[species]
- self.alias(("gas", "%s_density" % yt_name),
- ("enzo", "%s_Density" % species))
+ # don't alias electron density since mass is wrong
+ if species != "Electron":
+ self.alias(("gas", "%s_density" % yt_name),
+ ("enzo", "%s_Density" % species))
add_species_field_by_density(self, "gas", yt_name)
def setup_species_fields(self):
https://bitbucket.org/yt_analysis/yt/commits/6f790e40d53b/
Changeset: 6f790e40d53b
Branch: yt-3.0
User: MatthewTurk
Date: 2014-04-14 15:12:46
Summary: Merged in brittonsmith/yt/yt-3.0 (pull request #803)
Adding nuclei density, number density, and interpolated fields
Affected #: 6 files
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/fields/field_info_container.py
--- a/yt/fields/field_info_container.py
+++ b/yt/fields/field_info_container.py
@@ -61,6 +61,7 @@
self.field_list = field_list
self.slice_info = slice_info
self.field_aliases = {}
+ self.species_names = []
self.setup_fluid_aliases()
def setup_fluid_fields(self):
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/fields/fluid_fields.py
--- a/yt/fields/fluid_fields.py
+++ b/yt/fields/fluid_fields.py
@@ -162,12 +162,22 @@
registry.add_field((ftype, "metal_mass"),
function=_metal_mass,
units="g")
+
+ def _number_density(field, data):
+ field_data = np.zeros_like(data["gas", "%s_number_density" % \
+ data.pf.field_info.species_names[0]])
+ for species in data.pf.field_info.species_names:
+ field_data += data["gas", "%s_number_density" % species]
+ return field_data
+ registry.add_field((ftype, "number_density"),
+ function = _number_density,
+ units="cm**-3")
def _mean_molecular_weight(field, data):
return (data[ftype, "density"] / (mh * data[ftype, "number_density"]))
registry.add_field((ftype, "mean_molecular_weight"),
function=_mean_molecular_weight,
- units=r"")
+ units="")
setup_gradient_fields(registry, (ftype, "pressure"), "dyne/cm**2",
slice_info)
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/fields/interpolated_fields.py
--- /dev/null
+++ b/yt/fields/interpolated_fields.py
@@ -0,0 +1,49 @@
+"""
+Fields from interpolating data tables.
+
+
+
+"""
+
+#-----------------------------------------------------------------------------
+# Copyright (c) 2014, yt Development Team.
+#
+# Distributed under the terms of the Modified BSD License.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#-----------------------------------------------------------------------------
+
+import numpy as np
+
+from yt.fields.local_fields import add_field
+
+from yt.utilities.linear_interpolators import \
+ UnilinearFieldInterpolator, \
+ BilinearFieldInterpolator, \
+ TrilinearFieldInterpolator
+
+_int_class = {1: UnilinearFieldInterpolator,
+ 2: BilinearFieldInterpolator,
+ 3: TrilinearFieldInterpolator}
+
+def add_interpolated_field(name, units, table_data, axes_data, axes_fields,
+ ftype="gas", particle_type=False, validators=None,
+ truncate=True):
+
+ if len(table_data.shape) not in _int_class:
+ raise RuntimeError("Interpolated field can only be created from 1d, 2d, or 3d data.")
+
+ if len(axes_fields) != len(axes_data) or len(axes_fields) != len(table_data.shape):
+ raise RuntimeError("Data dimension mismatch: data is %d, %d axes data provided, and %d axes fields provided." %
+ (len(table_data.shape), len(axes_data), len(axes_fields)))
+
+ int_class = _int_class[len(table_data.shape)]
+ my_interpolator = int_class(table_data, axes_data, axes_fields, truncate=truncate)
+
+ def _interpolated_field(field, data):
+ return my_interpolator(data)
+ add_field((ftype, name),
+ function=_interpolated_field,
+ units=units,
+ validators=validators, particle_type=particle_type)
+
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/fields/species_fields.py
--- a/yt/fields/species_fields.py
+++ b/yt/fields/species_fields.py
@@ -14,15 +14,22 @@
#-----------------------------------------------------------------------------
import numpy as np
+import re
from yt.utilities.physical_constants import \
mh, \
mass_sun_cgs, \
amu_cgs
+from yt.utilities.physical_ratios import \
+ primordial_H_mass_fraction
from yt.funcs import *
from yt.utilities.chemical_formulas import \
ChemicalFormula
+_primordial_mass_fraction = \
+ {"H": primordial_H_mass_fraction,
+ "He" : (1 - primordial_H_mass_fraction)}
+
# See YTEP-0003 for details, but we want to ensure these fields are all
# populated:
#
@@ -50,7 +57,7 @@
weight *= amu_cgs
def _number_density(field, data):
return data[ftype, "%s_density" % species] \
- / amu_cgs
+ / weight
return _number_density
def _create_density_func(ftype, species):
@@ -102,3 +109,53 @@
function = _create_number_density_func(ftype, species),
particle_type = particle_type,
units = "cm**-3")
+
+def add_nuclei_density_fields(registry, ftype,
+ particle_type = False):
+ elements = _get_all_elements(registry.species_names)
+ for element in elements:
+ registry.add_field((ftype, "%s_nuclei_density" % element),
+ function = _nuclei_density,
+ particle_type = particle_type,
+ units = "cm**-3")
+ if len(elements) == 0:
+ for element in ["H", "He"]:
+ registry.add_field((ftype, "%s_nuclei_density" % element),
+ function = _default_nuclei_density,
+ particle_type = particle_type,
+ units = "cm**-3")
+
+def _default_nuclei_density(field, data):
+ element = field.name[1][:field.name[1].find("_")]
+ return data["gas", "density"] * _primordial_mass_fraction[element] / \
+ ChemicalFormula(element).weight / amu_cgs
+
+def _nuclei_density(field, data):
+ element = field.name[1][:field.name[1].find("_")]
+ field_data = np.zeros_like(data["gas", "%s_number_density" %
+ data.pf.field_info.species_names[0]])
+ for species in data.pf.field_info.species_names:
+ nucleus = species
+ if "_" in species:
+ nucleus = species[:species.find("_")]
+ num = _get_element_multiple(nucleus, element)
+ field_data += num * data["gas", "%s_number_density" % species]
+ return field_data
+
+def _get_all_elements(species_list):
+ elements = []
+ for species in species_list:
+ for item in re.findall('[A-Z][a-z]?|[0-9]+', species):
+ if not item.isdigit() and item not in elements \
+ and item != "El":
+ elements.append(item)
+ return elements
+
+def _get_element_multiple(compound, element):
+ my_split = re.findall('[A-Z][a-z]?|[0-9]+', compound)
+ if element not in my_split:
+ return 0
+ loc = my_split.index(element)
+ if loc == len(my_split) - 1 or not my_split[loc + 1].isdigit():
+ return 1
+ return int(my_split[loc + 1])
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/frontends/enzo/fields.py
--- a/yt/frontends/enzo/fields.py
+++ b/yt/frontends/enzo/fields.py
@@ -21,6 +21,7 @@
from yt.units.yt_array import \
YTArray
from yt.fields.species_fields import \
+ add_nuclei_density_fields, \
add_species_field_by_density
from yt.utilities.physical_constants import \
mh, me, mp, \
@@ -42,7 +43,7 @@
'HM' : 'H_m1',
'DI' : 'D',
'DII' : 'D_p1',
- 'HD' : 'HD',
+ 'HDI' : 'HD',
'Electron': 'El'
}
@@ -119,8 +120,10 @@
take_log=True,
units="code_mass/code_length**3")
yt_name = known_species_names[species]
- self.alias(("gas", "%s_density" % yt_name),
- ("enzo", "%s_Density" % species))
+ # don't alias electron density since mass is wrong
+ if species != "Electron":
+ self.alias(("gas", "%s_density" % yt_name),
+ ("enzo", "%s_Density" % species))
add_species_field_by_density(self, "gas", yt_name)
def setup_species_fields(self):
@@ -135,7 +138,8 @@
units = "g/cm**3")
for sp in species_names:
self.add_species_field(sp)
-
+ self.species_names.append(known_species_names[sp])
+ add_nuclei_density_fields(self, "gas")
def setup_fluid_fields(self):
# Now we conditionally load a few other things.
diff -r 87fe2e111e03663c6da6948be519c390ebd831d8 -r 6f790e40d53b5c3274215f9e2f4f09fa1157b82c yt/utilities/physical_ratios.py
--- a/yt/utilities/physical_ratios.py
+++ b/yt/utilities/physical_ratios.py
@@ -94,6 +94,7 @@
jansky_cgs = 1.0e-23
# Cosmological constants
rho_crit_g_cm3_h2 = 1.8788e-29
+primordial_H_mass_fraction = 0.76
# Misc. Approximations
mass_mean_atomic_cosmology = 1.22
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