From d27d0118baff3287d298e4c035cc984e284cd9bf Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Mon, 14 Aug 2017 21:43:29 +0800 Subject: clusters/halo.py: Rewrite electron acceleration coefficient calc * Adopt the electron acceleration coefficient formula from [cassano2005] * Rename method "_tau_acceleration()" to "_chi_acceleration()", and rewrite * Add property "kT_merger" * Also save "kT_merger" and "chi" into halos data Signed-off-by: Aaron LI --- fg21sim/extragalactic/clusters/halo.py | 77 ++++++++++++++++++++++------------ fg21sim/extragalactic/clusters/main.py | 2 + 2 files changed, 53 insertions(+), 26 deletions(-) (limited to 'fg21sim/extragalactic') diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index d5c5cf1..2bd8d59 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -116,7 +116,7 @@ class RadioHalo: def _set_configs(self): comp = "extragalactic/halos" - self.beta_turb = self.configs.getn(comp+"/beta_turb") + self.eta_turb = self.configs.getn(comp+"/eta_turb") self.eta_e = self.configs.getn(comp+"/eta_e") self.gamma_min = self.configs.getn(comp+"/gamma_min") self.gamma_max = self.configs.getn(comp+"/gamma_max") @@ -206,6 +206,18 @@ class RadioHalo: """ return helper.magnetic_field(self.M_obs) + @property + def kT_merger(self): + """ + The cluster ICM mean temperature at z_merger when the merger + begins. + + Unit: [keV] + """ + mass = self.M_main + self.M_sub + kT = helper.mass_to_kT(mass, z=self.z_merger) + return kT + @property def injection_rate(self): """ @@ -428,8 +440,8 @@ class RadioHalo: NOTE ---- The diffusion coefficients cannot be zero or negative, which - may cause unstable or wrong results. So constrain ``tau_acc`` - be a sufficient large but finite number. + may cause unstable or wrong results. So constrain ``chi_acc`` + be a small positive number (e.g., 0.01 [Gyr^-1]). Parameters ---------- @@ -449,8 +461,8 @@ class RadioHalo: ---------- Ref.[donnert2013],Eq.(15) """ - tau_acc = self._tau_acceleration(t) # [Gyr] - diffusion = gamma**2 / (4 * tau_acc) + chi_acc = self._chi_acceleration(t) # [Gyr^-1] + diffusion = gamma**2 * chi_acc / 4 return diffusion def fp_advection(self, gamma, t): @@ -500,39 +512,52 @@ class RadioHalo: mass = rate * (t - t_merger) + self.M_main return mass - def _tau_acceleration(self, t): + def _chi_acceleration(self, t=None): """ - Calculate the systematic acceleration timescale at the - given (cosmic) time. + Calculate the electron acceleration coefficient due to turbulent + waves at the given (cosmic) time. - NOTE - ---- - A reference value of the acceleration time due to TTD - (transit-time damping) resonance is ~0.1 Gyr (Ref.[brunetti2011], - Eq.(27) below); the formula derived by [cassano2005] (Eq.(40)) - has a dependence on ``beta_turb``. + Considering that the turbulence acceleration lies a 2nd-order + Fermi process, it has only a effective acceleration time of + several 1e8 years. Therefore, the turbulence is assumed to + only accelerate the electrons during the merging period, i.e., + this coefficient "chi" is zero after "t_merger + time_cross". NOTE ---- A zero diffusion coefficient may lead to unstable/wrong results, - so constrain this acceleration timescale be finite. + so constrain this acceleration coefficient to be a small positive + but non-zero number. + + Parameters + ---------- + t : float, optional + The (cosmic) time/age. + If not given, then assumed to be within the merging process. + Unit: [Gyr] Returns ------- - tau : float - The acceleration timescale. - Unit: [Gyr] + chi : float + The electron acceleration coefficient. + Unit: [Gyr^-1] + + References + ---------- + Ref.[cassano2005],Eq.(40,B12) """ - # The reference/typical acceleration timescale - tau_ref = 0.1 # [Gyr] - # The maximum timescale to avoid unstable results - tau_max = 100.0 # [Gyr] + # The minimum acceleration coefficient to avoid unstable results + chi_min = 0.01 # [Gyr^-1] - if t > self.age_merger + self.time_crossing: - tau = tau_max + if (t is None) or (t < self.age_merger + self.time_crossing): + mass = self.M_main + self.M_sub + term1 = (mass / 2e15) ** 1.5 + term2 = (self.kT_merger / 7) ** (-0.5) + term3 = 500 / self.radius + chi = 6.3 * self.eta_turb * term1 * term2 * term3 else: - tau = tau_ref / self.beta_turb - return tau + chi = chi_min + return chi def _loss_ion(self, gamma, t): """ diff --git a/fg21sim/extragalactic/clusters/main.py b/fg21sim/extragalactic/clusters/main.py index 4990505..b94c223 100644 --- a/fg21sim/extragalactic/clusters/main.py +++ b/fg21sim/extragalactic/clusters/main.py @@ -271,7 +271,9 @@ class GalaxyClusters: ("angular_radius", halo.angular_radius), # [arcsec] ("volume", halo.volume), # [kpc^3] ("B", halo.magnetic_field), # [uG] + ("kT_merger", halo.kT_merger), # [keV] ICM kT at z_merger ("Ke", halo.injection_rate), # [cm^-3 Gyr^-1] + ("chi", halo._chi_acceleration()), # [Gyr^-1] ("n_e", n_e), # [cm^-3] ("frequency", self.frequencies), # [MHz] ("emissivity", emissivity), # [erg/s/cm^3/Hz] -- cgit v1.2.2