[Yt-svn] yt-commit r876 - trunk/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Tue Nov 4 13:56:56 PST 2008
Author: mturk
Date: Tue Nov 4 13:56:56 2008
New Revision: 876
URL: http://yt.spacepope.org/changeset/876
Log:
Added particle angular momentum fields.
There's a better way to do this with the split between the two, but I am not
going to for now. Maybe once we get Orion stuff rolled in.
Modified:
trunk/yt/lagos/DerivedFields.py
Modified: trunk/yt/lagos/DerivedFields.py
==============================================================================
--- trunk/yt/lagos/DerivedFields.py (original)
+++ trunk/yt/lagos/DerivedFields.py Tue Nov 4 13:56:56 2008
@@ -748,6 +748,43 @@
add_field("AngularMomentumMSUNKMSMPC",
units=r"M_{\odot}\rm{km}\rm{Mpc}/\rm{s}")
+def _ParticleSpecificAngularMomentum(field, data):
+ """
+ Calculate the angular of a particle velocity. Returns a vector for each
+ particle.
+ """
+ if data.has_field_parameter("bulk_velocity"):
+ bv = data.get_field_parameter("bulk_velocity")
+ else: bv = na.zeros(3, dtype='float64')
+ xv = data["particle_velocity_x"] - bv[0]
+ yv = data["particle_velocity_y"] - bv[1]
+ zv = data["particle_velocity_z"] - bv[2]
+ center = data.get_field_parameter('center')
+ coords = na.array([data['particle_position_x'],
+ data['particle_position_y'],
+ data['particle_position_z']], dtype='float64')
+ new_shape = tuple([3] + [1]*(len(coords.shape)-1))
+ r_vec = coords - na.reshape(center,new_shape)
+ v_vec = na.array([xv,yv,zv], dtype='float64')
+ return na.cross(r_vec, v_vec, axis=0)
+add_field("ParticleSpecificAngularMomentum",
+ convert_function=_convertSpecificAngularMomentum, vector_field=True,
+ units=r"\rm{cm}^2/\rm{s}", validators=[ValidateParameter('center')])
+def _convertSpecificAngularMomentumKMSMPC(data):
+ return data.convert("mpc")/1e5
+add_field("ParticleSpecificAngularMomentumKMSMPC",
+ function=_ParticleSpecificAngularMomentum,
+ convert_function=_convertSpecificAngularMomentumKMSMPC, vector_field=True,
+ units=r"\rm{km}\rm{Mpc}/\rm{s}", validators=[ValidateParameter('center')])
+def _ParticleAngularMomentum(field, data):
+ return data["ParticleMass"] * data["ParticleSpecificAngularMomentum"]
+add_field("ParticleAngularMomentum", units=r"\rm{g}\/\rm{cm}^2/\rm{s}")
+def _ParticleAngularMomentumMSUNKMSMPC(field, data):
+ return data["ParticleMass"] * data["ParticleSpecificAngularMomentumKMSMPC"]
+add_field("ParticleAngularMomentumMSUNKMSMPC",
+ units=r"M_{\odot}\rm{km}\rm{Mpc}/\rm{s}")
+
+
def _ParticleRadius(field, data):
center = data.get_field_parameter("center")
radius = na.sqrt((data["particle_position_x"] - center[0])**2.0 +
More information about the yt-svn
mailing list