[Yt-svn] yt: Adding angular momentum component fields for particles. spi...
hg at spacepope.org
hg at spacepope.org
Sat Feb 19 09:39:28 PST 2011
hg Repository: yt
details: yt/rev/e7a157d48788
changeset: 3750:e7a157d48788
user: John Wise <jwise at astro.princeton.edu>
date:
Sat Feb 19 12:37:21 2011 -0500
description:
Adding angular momentum component fields for particles. spin derived
quantities now use the AM component fields, so they work in parallel.
diffstat:
yt/data_objects/derived_quantities.py | 20 ++++++++----
yt/data_objects/universal_fields.py | 54 +++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+), 7 deletions(-)
diffs (115 lines):
diff -r 8d6cef145d37 -r e7a157d48788 yt/data_objects/derived_quantities.py
--- a/yt/data_objects/derived_quantities.py Fri Feb 18 14:41:21 2011 -0700
+++ b/yt/data_objects/derived_quantities.py Sat Feb 19 12:37:21 2011 -0500
@@ -215,8 +215,10 @@
"""
This function returns the mass-weighted average angular momentum vector.
"""
- am = data["SpecificAngularMomentum"]*data["CellMassMsun"]
- j_mag = am.sum(axis=1)
+ amx = data["SpecificAngularMomentumX"]*data["CellMassMsun"]
+ amy = data["SpecificAngularMomentumY"]*data["CellMassMsun"]
+ amz = data["SpecificAngularMomentumZ"]*data["CellMassMsun"]
+ j_mag = [amx.sum(), amy.sum(), amz.sum()]
return [j_mag]
def _combAngularMomentumVector(data, j_mag):
if len(j_mag.shape) < 2: j_mag = na.expand_dims(j_mag, 0)
@@ -232,8 +234,10 @@
the particles in calculating enclosed mass.
"""
m_enc = data["CellMassMsun"].sum() + data["ParticleMassMsun"].sum()
- am = data["SpecificAngularMomentum"]*data["CellMassMsun"]
- j_mag = am.sum(axis=1)
+ amx = data["SpecificAngularMomentumX"]*data["CellMassMsun"]
+ amy = data["SpecificAngularMomentumY"]*data["CellMassMsun"]
+ amz = data["SpecificAngularMomentumZ"]*data["CellMassMsun"]
+ j_mag = na.array([amx.sum(), amy.sum(), amz.sum()])
e_term_pre = na.sum(data["CellMassMsun"]*data["VelocityMagnitude"]**2.0)
weight=data["CellMassMsun"].sum()
return j_mag, m_enc, e_term_pre, weight
@@ -256,9 +260,11 @@
the particles in calculating enclosed mass.
"""
m_enc = data["CellMassMsun"].sum() + data["ParticleMassMsun"].sum()
- am = data["ParticleSpecificAngularMomentum"]*data["ParticleMassMsun"]
- if am.size == 0: return (na.zeros((3,), dtype='float64'), m_enc, 0, 0)
- j_mag = am.sum(axis=1)
+ amx = data["ParticleSpecificAngularMomentumX"]*data["ParticleMassMsun"]
+ if amx.size == 0: return (na.zeros((3,), dtype='float64'), m_enc, 0, 0)
+ amy = data["ParticleSpecificAngularMomentumY"]*data["ParticleMassMsun"]
+ amz = data["ParticleSpecificAngularMomentumZ"]*data["ParticleMassMsun"]
+ j_mag = na.array([amx.sum(), amy.sum(), amz.sum()])
e_term_pre = na.sum(data["ParticleMassMsun"]
*data["ParticleVelocityMagnitude"]**2.0)
weight=data["ParticleMassMsun"].sum()
diff -r 8d6cef145d37 -r e7a157d48788 yt/data_objects/universal_fields.py
--- a/yt/data_objects/universal_fields.py Fri Feb 18 14:41:21 2011 -0700
+++ b/yt/data_objects/universal_fields.py Sat Feb 19 12:37:21 2011 -0500
@@ -608,6 +608,43 @@
function=_ParticleSpecificAngularMomentum, particle_type=True,
convert_function=_convertSpecificAngularMomentumKMSMPC, vector_field=True,
units=r"\rm{km}\rm{Mpc}/\rm{s}", validators=[ValidateParameter('center')])
+
+def _ParticleSpecificAngularMomentumX(field, data):
+ if data.has_field_parameter("bulk_velocity"):
+ bv = data.get_field_parameter("bulk_velocity")
+ else: bv = na.zeros(3, dtype='float64')
+ center = data.get_field_parameter('center')
+ y = data["particle_position_y"] - center[1]
+ z = data["particle_position_z"] - center[2]
+ yv = data["particle_velocity_y"] - bv[1]
+ zv = data["particle_velocity_z"] - bv[2]
+ return yv*z - zv*y
+def _ParticleSpecificAngularMomentumY(field, data):
+ if data.has_field_parameter("bulk_velocity"):
+ bv = data.get_field_parameter("bulk_velocity")
+ else: bv = na.zeros(3, dtype='float64')
+ center = data.get_field_parameter('center')
+ x = data["particle_position_x"] - center[0]
+ z = data["particle_position_z"] - center[2]
+ xv = data["particle_velocity_x"] - bv[0]
+ zv = data["particle_velocity_z"] - bv[2]
+ return -(xv*z - zv*x)
+def _ParticleSpecificAngularMomentumZ(field, data):
+ if data.has_field_parameter("bulk_velocity"):
+ bv = data.get_field_parameter("bulk_velocity")
+ else: bv = na.zeros(3, dtype='float64')
+ center = data.get_field_parameter('center')
+ x = data["particle_position_x"] - center[0]
+ y = data["particle_position_y"] - center[1]
+ xv = data["particle_velocity_x"] - bv[0]
+ yv = data["particle_velocity_y"] - bv[1]
+ return xv*y - yv*x
+for ax in 'XYZ':
+ n = "ParticleSpecificAngularMomentum%s" % ax
+ add_field(n, function=eval("_%s" % n), particle_type=True,
+ convert_function=_convertSpecificAngularMomentum,
+ units=r"\rm{cm}^2/\rm{s}", validators=[ValidateParameter("center")])
+
def _ParticleAngularMomentum(field, data):
return data["ParticleMass"] * data["ParticleSpecificAngularMomentum"]
add_field("ParticleAngularMomentum",
@@ -620,6 +657,23 @@
units=r"M_{\odot}\rm{km}\rm{Mpc}/\rm{s}",
particle_type=True, validators=[ValidateParameter('center')])
+def _ParticleAngularMomentumX(field, data):
+ return data["CellMass"] * data["ParticleSpecificAngularMomentumX"]
+add_field("ParticleAngularMomentumX", function=_ParticleAngularMomentumX,
+ units=r"\rm{g}\/\rm{cm}^2/\rm{s}", particle_type=True,
+ validators=[ValidateParameter('center')])
+def _ParticleAngularMomentumY(field, data):
+ return data["CellMass"] * data["ParticleSpecificAngularMomentumY"]
+add_field("ParticleAngularMomentumY", function=_ParticleAngularMomentumY,
+ units=r"\rm{g}\/\rm{cm}^2/\rm{s}", particle_type=True,
+ validators=[ValidateParameter('center')])
+def _ParticleAngularMomentumZ(field, data):
+ return data["CellMass"] * data["ParticleSpecificAngularMomentumZ"]
+add_field("ParticleAngularMomentumZ", function=_ParticleAngularMomentumZ,
+ units=r"\rm{g}\/\rm{cm}^2/\rm{s}", particle_type=True,
+ validators=[ValidateParameter('center')])
+
+
def _ParticleRadius(field, data):
center = data.get_field_parameter("center")
DW = data.pf.domain_right_edge - data.pf.domain_left_edge
More information about the yt-svn
mailing list