diff options
author | Aaron LI <aly@aaronly.me> | 2019-02-21 21:43:36 +0800 |
---|---|---|
committer | Aaron LI <aly@aaronly.me> | 2019-02-21 21:46:32 +0800 |
commit | 1e1f573e2f4910471a9f7b92e9ff12de48d4c0db (patch) | |
tree | b349ce26cfa22bf0d5e6950416a6fc308ca4fd8f | |
parent | 8e563e91d8b0dc239e124fb7e88d84c1c8506b67 (diff) | |
download | fg21sim-1e1f573e2f4910471a9f7b92e9ff12de48d4c0db.tar.bz2 |
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.
-rw-r--r-- | fg21sim/configs/config.spec | 5 | ||||
-rw-r--r-- | fg21sim/extragalactic/clusters/halo.py | 41 |
2 files changed, 46 insertions, 0 deletions
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") @@ -283,6 +288,42 @@ class RadioHalo1M: 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 * <v_turb^2> = 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): """ Calculate the turbulence velocity dispersion. |