From 46c36b299dbe29d2872ae1ae6d98f1bde320bad0 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Sun, 31 Dec 2017 16:34:55 +0800 Subject: clusters/halo: calc turbulence velocity dispersion based on merger Also update the description of option "extragalactic/halos/eta_turb" and change its default value to 0.1 --- fg21sim/configs/20-extragalactic.conf.spec | 12 +++------- fg21sim/extragalactic/clusters/halo.py | 38 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/fg21sim/configs/20-extragalactic.conf.spec b/fg21sim/configs/20-extragalactic.conf.spec index 44fb1ca..52f66da 100644 --- a/fg21sim/configs/20-extragalactic.conf.spec +++ b/fg21sim/configs/20-extragalactic.conf.spec @@ -167,17 +167,11 @@ # used to determine the radio halo size. f_lturb = float(default=0.33, min=0.1, max=1.0) - # The fraction of cluster thermal energy originating from turbulent - # dissipation, which describes the turbulence intensity in the ICM, - # and determines its Mach number. - # NOTE: Currently, this parameter only determines the turbulence Mach - # number, which affects only the turbulent acceleration efficiency, - # which is also controlled by the above ``f_acc`` parameter. - # So we can just *fix* this parameter to its default value. - eta_turb = float(default=0.2, min=0.1, max=1.0) - # Ratio of the total energy injected into cosmic-ray electrons during # the cluster life to its total thermal energy. + # The fraction of merger energy transferred into the turbulence. + eta_turb = float(default=0.1, min=0.1, max=0.5) + eta_e = float(default=0.001, min=0.001, max=0.1) # Electron injection, which is assumed to have a constant injection diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index 03e891c..47f8078 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -813,6 +813,44 @@ class RadioHalo: mass = rate * (t - t_merger) + self.M_main return mass + def _velocity_turb(self, t): + """ + Calculate the turbulence velocity dispersion (i.e., turbulence + Mach number). + + NOTE + ---- + During the merger, a fraction of the merger kinetic energy is + transferred into the turbulence within the assumed regions + (radius <= L, the injection scale). Then estimate the turbulence + velocity dispersion from its energy. + + Merger energy: + E_m ≅ 0.5 * f_gas * M_sub * v^2 + ≅ 0.5 * f_gas * M_sub * (G*M_main / R_vir) + Turbulence energy: + E_turb ≅ η_turb * E_m + ≅ 0.5 * M_turb * + = 0.5 * f_gas * M_main( + = 0.5 * f_gas * f_mass(L/R_vir) * M_main * + => Velocity dispersion: + ≅ (η_turb/f_mass) * (G*M_sub/R_vir) + + Returns + ------- + v_turb : float + The turbulence velocity dispersion + Unit: [km/s] + """ + mass = self.M_main + self.M_sub + z = COSMO.redshift(t) + R_vir = helper.radius_virial(mass=mass, z=z) * AUC.kpc2cm # [cm] + v2 = np.sqrt(AC.G * self.M_sub*AUC.Msun2g / R_vir) # [cm/s] + v2 *= AUC.cm2km # [km/s] + fmass = helper.fmass_nfw(self.f_lturb) + v_turb = v2 * np.sqrt(self.eta_turb / fmass) + return v_turb + def _magnetic_field(self, t): """ Calculate the mean magnetic field strength of the main cluster mass -- cgit v1.2.2