[Yt-svn] yt-commit r1013 - trunk/yt/lagos

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Tue Dec 16 09:37:19 PST 2008


Author: mturk
Date: Tue Dec 16 09:37:19 2008
New Revision: 1013
URL: http://yt.spacepope.org/changeset/1013

Log:
Fixed some reshapings in the 'x', 'y', 'z' fields.  Refactored a bit of the
angular momentum stuff.  Added X,Y,Z fields of Specific Angular Momnetum, for
when vector fields are not wanted.



Modified:
   trunk/yt/lagos/UniversalFields.py

Modified: trunk/yt/lagos/UniversalFields.py
==============================================================================
--- trunk/yt/lagos/UniversalFields.py	(original)
+++ trunk/yt/lagos/UniversalFields.py	Tue Dec 16 09:37:19 2008
@@ -73,7 +73,7 @@
 def _coordX(field, data):
     dim = data.ActiveDimensions[0]
     return (na.ones(data.ActiveDimensions, dtype='float64')
-                   * na.arange(data.ActiveDimensions[0]).reshape(dim,1,1)
+                   * na.arange(data.ActiveDimensions[0])[:,None,None]
             +0.5) * data['dx'] + data.LeftEdge[0]
 add_field('x', function=_coordX, display_field=False,
           validators=[ValidateSpatial(0)])
@@ -81,7 +81,7 @@
 def _coordY(field, data):
     dim = data.ActiveDimensions[1]
     return (na.ones(data.ActiveDimensions, dtype='float64')
-                   * na.arange(data.ActiveDimensions[1]).reshape(1,dim,1)
+                   * na.arange(data.ActiveDimensions[1])[None,:,None]
             +0.5) * data['dy'] + data.LeftEdge[1]
 add_field('y', function=_coordY, display_field=False,
           validators=[ValidateSpatial(0)])
@@ -89,7 +89,7 @@
 def _coordZ(field, data):
     dim = data.ActiveDimensions[2]
     return (na.ones(data.ActiveDimensions, dtype='float64')
-                   * na.arange(data.ActiveDimensions[2]).reshape(1,1,dim)
+                   * na.arange(data.ActiveDimensions[2])[None,None,:]
             +0.5) * data['dz'] + data.LeftEdge[2]
 add_field('z', function=_coordZ, display_field=False,
           validators=[ValidateSpatial(0)])
@@ -432,20 +432,28 @@
 add_field("tempContours", function=_Contours, validators=[ValidateSpatial(0)],
           take_log=False, display_field=False)
 
-def _SpecificAngularMomentum(field, data):
-    """
-    Calculate the angular velocity.  Returns a vector for each cell.
-    """
+def obtain_velocities(data):
     if data.has_field_parameter("bulk_velocity"):
         bv = data.get_field_parameter("bulk_velocity")
     else: bv = na.zeros(3, dtype='float64')
     xv = data["x-velocity"] - bv[0]
     yv = data["y-velocity"] - bv[1]
     zv = data["z-velocity"] - bv[2]
+    return xv, yv, zv
+
+def obtain_rvec(data):
     center = data.get_field_parameter('center')
     coords = na.array([data['x'],data['y'],data['z']], dtype='float64')
     new_shape = tuple([3] + [1]*(len(coords.shape)-1))
     r_vec = coords - na.reshape(center,new_shape)
+    return r_vec # axis 0 is the x,y,z
+
+def _SpecificAngularMomentum(field, data):
+    """
+    Calculate the angular velocity.  Returns a vector for each cell.
+    """
+    r_vec = obtain_rvec(data)
+    xv, yv, zv = obtain_velocities(data)
     v_vec = na.array([xv,yv,zv], dtype='float64')
     return na.cross(r_vec, v_vec, axis=0)
 def _convertSpecificAngularMomentum(data):
@@ -456,6 +464,25 @@
           units=r"\rm{cm}^2/\rm{s}", validators=[ValidateParameter('center')])
 def _convertSpecificAngularMomentumKMSMPC(data):
     return data.convert("mpc")/1e5
+
+def _SpecificAngularMomentumX(field, data):
+    xv, yv, zv = obtain_velocities(data)
+    rv = obtain_rvec(data)
+    return yv*rv[2,:] - zv*rv[1,:]
+def _SpecificAngularMomentumY(field, data):
+    xv, yv, zv = obtain_velocities(data)
+    rv = obtain_rvec(data)
+    return -(xv*rv[2,:] - zv*rv[0,:])
+def _SpecificAngularMomentumZ(field, data):
+    xv, yv, zv = obtain_velocities(data)
+    rv = obtain_rvec(data)
+    return xv*rv[1,:] - yv*rv[0,:]
+for ax in 'XYZ':
+    n = "SpecificAngularMomentum%s" % ax
+    add_field(n, function=eval("_%s" % n),
+              convert_function=_convertSpecificAngularMomentum,
+              units=r"\rm{cm}^2/\rm{s}", validators=[ValidateParameter("center")])
+
 add_field("SpecificAngularMomentumKMSMPC",
           function=_SpecificAngularMomentum,
           convert_function=_convertSpecificAngularMomentumKMSMPC, vector_field=True,



More information about the yt-svn mailing list