aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron LI <aly@aaronly.me>2019-02-21 21:43:36 +0800
committerAaron LI <aly@aaronly.me>2019-02-21 21:46:32 +0800
commit1e1f573e2f4910471a9f7b92e9ff12de48d4c0db (patch)
treeb349ce26cfa22bf0d5e6950416a6fc308ca4fd8f
parent8e563e91d8b0dc239e124fb7e88d84c1c8506b67 (diff)
downloadfg21sim-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.spec5
-rw-r--r--fg21sim/extragalactic/clusters/halo.py41
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.