From 1e1f573e2f4910471a9f7b92e9ff12de48d4c0db Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Thu, 21 Feb 2019 21:43:36 +0800 Subject: clusters/halo: Add velocity_turb_base() method This method calculates the velocity dispersion of the base turbulence, i.e., the turbulence existing in a relaxed system without the merger injection. Add new configuration option 'extragalactic/halos/x_turb' to parameterize the energy fraction of the base turbulence w.r.t. the ICM thernal energy. --- fg21sim/configs/config.spec | 5 +++++ fg21sim/extragalactic/clusters/halo.py | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/fg21sim/configs/config.spec b/fg21sim/configs/config.spec index 0ab5843..9a466d1 100644 --- a/fg21sim/configs/config.spec +++ b/fg21sim/configs/config.spec @@ -384,6 +384,11 @@ stream = option("stderr", "stdout", "", default="stderr") # to derive the radio halo radius. f_radius = float(default=1, min=0.1, max=10) + # The base energy fraction of the turbulence to the ICM thermal energy + # (for a relaxed system). + # x_turb ~< 5% [Vazza et al. 2011, A&A, 529, A17] + x_turb = float(default=0, min=0, max=0.5) + # The fraction of merger energy transferred into the turbulence. eta_turb = float(default=0.1, min=0, max=1) diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index 5eda8da..214aefe 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -57,6 +57,10 @@ References .. [sarazin1999] Sarazin 1999, ApJ, 520, 529 http://adsabs.harvard.edu/abs/1999ApJ...520..529S + +.. [vazza2011] + Vazza et al. 2011, A&A, 529, A17 + http://adsabs.harvard.edu/abs/2011A%26A...529A..17V """ import logging @@ -155,6 +159,7 @@ class RadioHalo1M: self.configs = configs self.f_acc = configs.getn(sec+"/f_acc") self.f_radius = configs.getn(sec+"/f_radius") + self.x_turb = configs.getn(sec+"/x_turb") self.eta_turb = configs.getn(sec+"/eta_turb") self.eta_e = configs.getn(sec+"/eta_e") self.x_cr = configs.getn(sec+"/x_cr") @@ -282,6 +287,42 @@ class RadioHalo1M: uconv = AUC.kpc2km * AUC.s2Gyr # [kpc]/[km/s] => [Gyr] return uconv * d / v_i # [Gyr] + @lru_cache() + def velocity_turb_base(self, t): + """ + Calculate the velocity dispersion of the base turbulence. + + Without injection by mergers, the ICM can has some turbulence, + which can amount ~< 5% of the thermal energy in relaxed systems + (Ref.[vazza2011]). + + ε_turb = (1/2) * ρ_gas * = x_turb * ε_th + ε_th = (3/2) * n_th * kT + ρ_gas = μ * m_u * n_th + c_s^2 = γ_gas * kT / (μ * m_u) + => + v_turb = c_s * sqrt(3 * x_turb / γ_gas) + + Parameters + ---------- + t_merger : float + The beginning or ending time of the merger. + Unit: [Gyr] + + Returns + ------- + v_turb : float + The velocity dispersion of the base turbulence. + Unit: [km/s] + """ + self._validate_time(t) + + if np.isclose(self.x_turb, 0): + return 0 + + c_s = helper.speed_sound(self.kT(t)) # [km/s] + return c_s * np.sqrt(3*self.x_turb / AC.gamma) + @lru_cache() def velocity_turb(self, t_merger): """ -- cgit v1.2.2