aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron LI <aly@aaronly.me>2018-11-08 18:19:54 +0800
committerAaron LI <aly@aaronly.me>2018-11-08 18:19:54 +0800
commitaf5e91235e53c60feb7245baf55660606ddf8d77 (patch)
tree08c43171d0e7dcd1c6e2ba219b8bc47409738f32
parent1f21e9e5a4ad8290bf53187ffe978e74ad94e50d (diff)
downloadfg21sim-af5e91235e53c60feb7245baf55660606ddf8d77.tar.bz2
clusters/halo: Adopt new method for _velocity_turb()
Adopt a new method to calculate the turbulence velocity dispersion. First, the kinetic energy released by the merger is estimated as the work done by the in-falling sub-cluster crossing the main cluster. Second, a fraction of the kinetic energy is assumed to be transferred into the turbulence. The turbulence mass is calculated as the gas mass enclosed within the turbulence region. Finally, the turbulence velocity dispersion is derived.
-rw-r--r--fg21sim/extragalactic/clusters/halo.py39
1 files changed, 24 insertions, 15 deletions
diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py
index 81a185c..6b1d4a8 100644
--- a/fg21sim/extragalactic/clusters/halo.py
+++ b/fg21sim/extragalactic/clusters/halo.py
@@ -679,7 +679,7 @@ class RadioHalo:
return helper.magnetic_field(mass=mass, z=z, configs=self.configs)
@lru_cache()
- def _gas_density_profile_f(self, t):
+ def _rho_gas_f(self, t):
"""
The gas density profile of the merged cluster.
@@ -697,8 +697,7 @@ class RadioHalo:
@lru_cache()
def _velocity_turb(self, t):
"""
- Calculate the turbulence velocity dispersion (i.e., turbulence Mach
- number).
+ Calculate the turbulence velocity dispersion.
NOTE
----
@@ -707,15 +706,19 @@ class RadioHalo:
Then estimate the turbulence velocity dispersion from its energy.
Merger energy:
- E_merger ≅ 0.5 * f_gas * M_sub * v_vir^2
- v_vir = sqrt(G*M_main / R_vir)
+ E_merger ≅ <ρ_gas> * v_i^2 * V_turb
+ V_turb = ᴨ * r_s^2 * R_vir
Turbulence energy:
- E_turb ≅ η_turb * E_merger
- ≅ 0.5 * M_turb * <v_turb^2>
+ E_turb ≅ η_turb * E_merger ≅ 0.5 * M_turb * <v_turb^2>
=> Velocity dispersion:
- <v_turb^2> ≅ v_vir^2 * η_turb*f_gas * (M_sub/M_turb)
+ <v_turb^2> ≅ 2*η_turb * <ρ_gas> * v_i^2 * V_turb / M_turb
+ M_turb = int_0^R_turb[ ρ_gas(r)*4ᴨ*r^2 ]dr
where:
- M_turb = int_0^R_turb ρ_gas(r)*4ᴨ*r^2 dr
+ <ρ_gas>: mean gas density of the main cluster
+ R_vir: virial radius of the main cluster
+ R_turb: radius of turbulence region
+ v_i: impact velocity
+ r_s: stripping radius of the in-falling sub-cluster
Returns
-------
@@ -724,17 +727,23 @@ class RadioHalo:
Unit: [km/s]
"""
z = COSMO.redshift(t)
- rho_gas_f = self._gas_density_profile_f(t)
+ rho_gas_f = self._rho_gas_f(t)
R_turb = self.radius_turbulence(t) # [kpc]
M_turb = 4*np.pi * integrate.quad(lambda r: rho_gas_f(r) * r**2,
a=0, b=R_turb)[0] # [Msun]
+
M_main = self.mass_main(t)
M_sub = self.mass_sub(t)
- R_vir = helper.radius_virial(M_main+M_sub, z) # [kpc]
- R_vir *= AUC.kpc2cm # [cm]
- v2_vir = (AC.G * M_main*AUC.Msun2g / R_vir) * AUC.cm2km**2
- v2_turb = v2_vir * self.eta_turb*COSMO.baryon_fraction * (M_sub/M_turb)
- return np.sqrt(v2_turb)
+ v_i = helper.velocity_impact(M_main, M_sub, z) # [km/s]
+ rho_main = helper.density_number_thermal(M_main, z) # [cm^-3]
+ rho_main *= AC.mu*AC.u * AUC.g2Msun * AUC.kpc2cm**3 # [Msun/kpc^3]
+ R_vir = helper.radius_virial(M_main, z) # [kpc]
+ r_s = self.radius_stripping(t) # [kpc]
+
+ V_turb = np.pi * r_s**2 * R_vir # [kpc^3]
+ E_turb = self.eta_turb * rho_main * v_i**2 * V_turb
+ v2_turb = 2 * E_turb / M_turb # [km^2/s^2]
+ return np.sqrt(v2_turb) # [km/s]
def _is_turb_active(self, t):
"""