diff options
-rw-r--r-- | fg21sim/configs/20-extragalactic.conf.spec | 16 | ||||
-rw-r--r-- | fg21sim/extragalactic/clusters/halo.py | 86 |
2 files changed, 53 insertions, 49 deletions
diff --git a/fg21sim/configs/20-extragalactic.conf.spec b/fg21sim/configs/20-extragalactic.conf.spec index 52f66da..2924cf6 100644 --- a/fg21sim/configs/20-extragalactic.conf.spec +++ b/fg21sim/configs/20-extragalactic.conf.spec @@ -167,13 +167,25 @@ # used to determine the radio halo size. f_lturb = float(default=0.33, 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. + # An efficiency factor describing the effectiveness of plasma + # instabilities (e.g., due to spatial or temporal intermittency). + zeta_ins = float(default=0.1, min=0.1, max=1.0) + # The fraction of merger energy transferred into the turbulence. eta_turb = float(default=0.1, min=0.1, max=0.5) + # The fraction of the thermal energy injected into the cosmic-ray + # electrons during the cluster life time. eta_e = float(default=0.001, min=0.001, max=0.1) + # The ratio of cosmic ray (including protons and electrons) energy + # density (i.e., pressure) to the thermal energy density. + # NOTE: Fermi-LAT has placed an upper limit of ~1.25%-1.4% + # (Ackermann et al. 2014, ApJ, 787, 18) + # NOTE: The energy ratio of cosmic-ray electrons to protons K_ep ~0.01 + # for our Galaxy (Pinzke et al. 2017, MNRAS, 465, 4800) + x_cr = float(default=0.01, min=0.001, max=0.1) + # Electron injection, which is assumed to have a constant injection # rate and a power-law spectrum. injection_index = float(default=2.3, min=2.1, max=3.0) diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index 47f8078..6605763 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -42,8 +42,12 @@ References http://adsabs.harvard.edu/abs/1999astro.ph..5116H .. [miniati2015] - Miniati & Beresnyak 2015, Nature, 523, 59 - http://adsabs.harvard.edu/abs/2015Natur.523...59M + Miniati 2015, ApJ, 800, 60 + http://adsabs.harvard.edu/abs/2015ApJ...800...60M + +.. [pinzke2017] + Pinzke, Oh & Pfrommer 2017, MNRAS, 465, 4800 + http://adsabs.harvard.edu/abs/2017MNRAS.465.4800P .. [sarazin1999] Sarazin 1999, ApJ, 520, 529 @@ -141,10 +145,12 @@ class RadioHalo: def _set_configs(self): comp = "extragalactic/halos" - self.f_lturb = self.configs.getn(comp+"/f_lturb") self.f_acc = self.configs.getn(comp+"/f_acc") + self.f_lturb = self.configs.getn(comp+"/f_lturb") + self.zeta_ins = self.configs.getn(comp+"/zeta_ins") self.eta_turb = self.configs.getn(comp+"/eta_turb") self.eta_e = self.configs.getn(comp+"/eta_e") + self.x_cr = self.configs.getn(comp+"/x_cr") self.gamma_min = self.configs.getn(comp+"/gamma_min") self.gamma_max = self.configs.getn(comp+"/gamma_max") self.gamma_np = self.configs.getn(comp+"/gamma_np") @@ -303,58 +309,44 @@ class RadioHalo: @property @lru_cache() - def Mach_turbulence(self): - """ - The Mach number of the merger-induced turbulence. - - The turbulence Mach number: - Mach_turb = sqrt(<δv>^2) / c_s - ≅ sqrt(sqrt(3)/α) * sqrt(η_turb/0.37) - where: - c_s is the sound speed, - α is a parameter ranges about 1.5-3, and we take it as: - α = 3^(3/2) / 2 ≅ 2.6 - η_turb describes the fraction of thermal energy originating from - turbulent dissipation, ~0.2-0.4. - - Reference: Ref.[miniati2015],Eq.(1) - """ - alpha = 3**1.5 / 2 - mach = np.sqrt(3**0.5 * self.eta_turb / alpha / 0.37) - return mach - - @property - @lru_cache() def tau_acceleration(self): """ Calculate the electron acceleration timescale due to turbulent - waves at the given (cosmic) time, which describes the turbulent - acceleration efficiency. + waves, which describes the turbulent acceleration efficiency. + The turbulent acceleration timescale has order of ~0.1 Gyr. + + Here we consider the turbulence cascade mode through scattering + in the high-β ICM mediated by plasma instabilities (firehose, + mirror) rather than Coulomb scattering. Therefore, the fast modes + damp by TTD (transit time damping) on relativistic rather than + thermal particles, and the diffusion coefficient is given by: + D_pp = (2*p^2 * ζ / η_e) * k_L * <v_turb^2>^2 / c_s^3 + where: + ζ: efficiency factor for the effectiveness of plasma instabilities + η_e: relative energy density of cosmic rays (injected relativistic + electrons??) + k_L = 2π/L: turbulence injection scale + v_turb: turbulence velocity dispersion + c_s: sound speed + Thus the acceleration timescale is: + τ_acc = p^2 / (4*D_pp) + = (η_e * c_s^3 * L) / (16π * ζ * <v_turb^2>^2) Unit: [Gyr] - NOTE - ---- - Generally, the turbulent acceleration timescale is about 0.1 Gyr. - It is shown that this acceleration timescale depends weakly on - cluster mass and redshift, therefore, its value is derived at the - beginning of the merger and assumed to be constant during the - merging period. - - Reference: Ref.[brunetti2016],Eq.(8,9) + Reference + --------- + * Ref.[pinzke2017],Eq.(37) + * Ref.[miniati2015],Eq.(29) """ - # Turbulence injection scale: assumed to be correlated with the - # radius of the in-falling sub cluster. - Rvir_sub = helper.radius_virial(mass=self.M_sub, z=self.z_merger) - L0 = self.f_lturb * Rvir_sub # [kpc] - + R_vir = helper.radius_virial(mass=self.M_main, z=self.z_merger) + L = self.f_lturb * R_vir # [kpc] cs = helper.speed_sound(self.kT_main) # [km/s] - x = cs*AUC.km2cm / AC.c - fx = x * (x**4/4 + x*x - (1+2*x*x) * np.log(x) - 5/4) - - term1 = self.f_acc * 2.5 / fx / (self.Mach_turbulence/0.5)**4 - term2 = (L0/300) / (cs/1500) - tau = term1 * term2 / 1000 # [Gyr] + v_turb = self._velocity_turb(t=self.age_merger) # [km/s] + tau = (self.x_cr * cs**3 * L / + (16*np.pi * self.zeta_ins * v_turb**4)) # [s kpc/km] + tau *= AUC.s2Gyr * AUC.kpc2km # [Gyr] + tau *= self.f_acc # custom tune parameter return tau @property |