Is anybody here an expert on the way enzo_anyl calculates spin parameter? I was hoping to convince myself that: a) I understand how it does it in enzo_anyl b) That is being replicated in DerivedQuantities.py I have gone back and forth on this with Brian and Britton, but that was almost a year ago. I think it needs another look. Here is how yt works right now: am = data["SpecificAngularMomentum"]*data["CellMassMsun"] j_mag = am.sum(axis=1) m_enc = data["CellMassMsun"].sum() + data["ParticleMassMsun"].sum() e_term_pre = na.sum(data["CellMassMsun"]*data["VelocityMagnitude"]**2.0) weight=data["CellMassMsun"].sum() so we get the sum of Lx, Ly, Lz, the total mass, the total kinetic energy in the baryons, and the total *baryon* mass. then during the combination step: W = weight.sum() M = m_enc.sum() J = na.sqrt(((j_mag.sum(axis=0))**2.0).sum())/W E = na.sqrt(e_term_pre.sum()/W) G = 6.67e-8 # cm^3 g^-1 s^-2 spin = J * E / (M*1.989e33*G) What this does it combine all the weights from the individual grid or processors to get the total baryon mass in the entire region, the entire *enclosed mass* (which includes the particles), and then the magnitude of the angular momentum vector for all the enclosed baryons, which gets divided by the enclosed *baryon mass* to get the average specific angular momentum for the region. E is then the total kinetic energy divided by the total enclosed mass, which gives a characteristic baryon velocity. Finally, we take the average specific angular momentum, multiply that by the characteristic velocity, and divide by the total enclosed (baryon+particle) mass. Does this make sense? Should the characteristic velocity and angular momentum include the particles? Or does this not matter? -Matt
Okay, after some tests, it turns out that I think I was doing this all
correctly. So I apologize for the noise.
On my current run, enzo_anyl gives:
spin gas: 0.0251921
for the same radius, yt gives: 0.0251090534601
This is not a huge deal, I think. I'm not sure *why* it doesn't give
the same result past four decimal places, but I am not sure that it is
a meaningful difference.
I will put in the DM spin parameter later today...
-Matt
On Sat, Jan 24, 2009 at 9:20 AM, Matthew Turk
Is anybody here an expert on the way enzo_anyl calculates spin parameter? I was hoping to convince myself that:
a) I understand how it does it in enzo_anyl b) That is being replicated in DerivedQuantities.py
I have gone back and forth on this with Brian and Britton, but that was almost a year ago. I think it needs another look. Here is how yt works right now:
am = data["SpecificAngularMomentum"]*data["CellMassMsun"] j_mag = am.sum(axis=1) m_enc = data["CellMassMsun"].sum() + data["ParticleMassMsun"].sum() e_term_pre = na.sum(data["CellMassMsun"]*data["VelocityMagnitude"]**2.0) weight=data["CellMassMsun"].sum()
so we get the sum of Lx, Ly, Lz, the total mass, the total kinetic energy in the baryons, and the total *baryon* mass.
then during the combination step:
W = weight.sum() M = m_enc.sum() J = na.sqrt(((j_mag.sum(axis=0))**2.0).sum())/W E = na.sqrt(e_term_pre.sum()/W) G = 6.67e-8 # cm^3 g^-1 s^-2 spin = J * E / (M*1.989e33*G)
What this does it combine all the weights from the individual grid or processors to get the total baryon mass in the entire region, the entire *enclosed mass* (which includes the particles), and then the magnitude of the angular momentum vector for all the enclosed baryons, which gets divided by the enclosed *baryon mass* to get the average specific angular momentum for the region. E is then the total kinetic energy divided by the total enclosed mass, which gives a characteristic baryon velocity. Finally, we take the average specific angular momentum, multiply that by the characteristic velocity, and divide by the total enclosed (baryon+particle) mass.
Does this make sense? Should the characteristic velocity and angular momentum include the particles? Or does this not matter?
-Matt
Done with particle spin parameter. Caught some other bugs -- particle
velocities not getting turned to CGS, mainly.
As a note, I think that all particle fields using velocities should
carefully choose between using bulk_velocity and
particle_bulk_velocity or something similarly named. That's another
new quantity that should be added. Furthermore, I believe the minor
differences between spin parameters in YT and in enzo_anyl is due to
using actual enclosed mass versus rho_vir * 4/3 pi r_vir^3.
This raises a new point, though -- perhaps it'd be nice if we had a
routine to set up bulk_velocity and whatnot. It'd be good if we did
this so that you could specify the sub-radius for a smaller
bulk_velocity calculation.
-Matt
On Sat, Jan 24, 2009 at 10:41 AM, Matthew Turk
Okay, after some tests, it turns out that I think I was doing this all correctly. So I apologize for the noise.
On my current run, enzo_anyl gives:
spin gas: 0.0251921 for the same radius, yt gives: 0.0251090534601
This is not a huge deal, I think. I'm not sure *why* it doesn't give the same result past four decimal places, but I am not sure that it is a meaningful difference.
I will put in the DM spin parameter later today...
-Matt
On Sat, Jan 24, 2009 at 9:20 AM, Matthew Turk
wrote: Is anybody here an expert on the way enzo_anyl calculates spin parameter? I was hoping to convince myself that:
a) I understand how it does it in enzo_anyl b) That is being replicated in DerivedQuantities.py
I have gone back and forth on this with Brian and Britton, but that was almost a year ago. I think it needs another look. Here is how yt works right now:
am = data["SpecificAngularMomentum"]*data["CellMassMsun"] j_mag = am.sum(axis=1) m_enc = data["CellMassMsun"].sum() + data["ParticleMassMsun"].sum() e_term_pre = na.sum(data["CellMassMsun"]*data["VelocityMagnitude"]**2.0) weight=data["CellMassMsun"].sum()
so we get the sum of Lx, Ly, Lz, the total mass, the total kinetic energy in the baryons, and the total *baryon* mass.
then during the combination step:
W = weight.sum() M = m_enc.sum() J = na.sqrt(((j_mag.sum(axis=0))**2.0).sum())/W E = na.sqrt(e_term_pre.sum()/W) G = 6.67e-8 # cm^3 g^-1 s^-2 spin = J * E / (M*1.989e33*G)
What this does it combine all the weights from the individual grid or processors to get the total baryon mass in the entire region, the entire *enclosed mass* (which includes the particles), and then the magnitude of the angular momentum vector for all the enclosed baryons, which gets divided by the enclosed *baryon mass* to get the average specific angular momentum for the region. E is then the total kinetic energy divided by the total enclosed mass, which gives a characteristic baryon velocity. Finally, we take the average specific angular momentum, multiply that by the characteristic velocity, and divide by the total enclosed (baryon+particle) mass.
Does this make sense? Should the characteristic velocity and angular momentum include the particles? Or does this not matter?
-Matt
participants (1)
-
Matthew Turk