diff options
Diffstat (limited to 'fg21sim')
| -rw-r--r-- | fg21sim/configs/20-extragalactic.conf.spec | 5 | ||||
| -rw-r--r-- | fg21sim/extragalactic/clusters/halo.py | 77 | ||||
| -rw-r--r-- | fg21sim/extragalactic/clusters/main.py | 2 | 
3 files changed, 56 insertions, 28 deletions
| diff --git a/fg21sim/configs/20-extragalactic.conf.spec b/fg21sim/configs/20-extragalactic.conf.spec index ee58c8d..c3e27bc 100644 --- a/fg21sim/configs/20-extragalactic.conf.spec +++ b/fg21sim/configs/20-extragalactic.conf.spec @@ -73,8 +73,9 @@    # Giant radio halos for clusters with recent major mergers    [[halos]] -  # Intensity of the turbulence acceleration. -  beta_turb = float(default=1.0, min=0.2, max=3.0) +  # Roughly the fraction of turbulence energy transformed to accelerate +  # the electrons, describing the efficiency of turbulence acceleration. +  eta_turb = float(default=0.3, 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. 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") @@ -207,6 +207,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):          """          The constant electron injection rate assumed. @@ -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] | 
