aboutsummaryrefslogtreecommitdiffstats
path: root/fg21sim
diff options
context:
space:
mode:
authorAaron LI <aly@aaronly.me>2017-12-30 20:21:48 +0800
committerAaron LI <aly@aaronly.me>2017-12-30 20:21:48 +0800
commitb831796a7482e6545c303d8a8fbb60719fd4b807 (patch)
treed5682bdab3f1c22db77d866a79e2b3dc7fc2e2d2 /fg21sim
parent0478a88558f75d3afc6ecfc3e1af232520cb2bc8 (diff)
downloadfg21sim-b831796a7482e6545c303d8a8fbb60719fd4b807.tar.bz2
clusters/halo: Estimate turbulence acceleration w.r.t. injection scale
The turbulence injection scale ~ halo size
Diffstat (limited to 'fg21sim')
-rw-r--r--fg21sim/extragalactic/clusters/halo.py30
-rw-r--r--fg21sim/extragalactic/clusters/helper.py23
-rw-r--r--fg21sim/extragalactic/clusters/main.py2
3 files changed, 39 insertions, 16 deletions
diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py
index 1d9c9aa..5df47cd 100644
--- a/fg21sim/extragalactic/clusters/halo.py
+++ b/fg21sim/extragalactic/clusters/halo.py
@@ -75,11 +75,11 @@ class RadioHalo:
Description
-----------
- 1. Calculate the merger crossing time (t_cross; ~1 Gyr);
- 2. Calculate the diffusion coefficient (Dpp) from the systematic
+ 1. Calculate the turbulence persistence time (tau_turb; ~<1 Gyr);
+ 2. Calculate the diffusion coefficient (D_pp) from the systematic
acceleration timescale (tau_acc; ~0.1 Gyr). The acceleration
- diffusion is assumed to have an action time ~ t_cross (i.e.,
- only during merger crossing), and then been disabled (i.e.,
+ diffusion is assumed to have an action time ~ tau_turb (i.e.,
+ only during turbulence persistence), and then is disabled (i.e.,
only radiation and ionization losses later);
3. Assume the electrons are constantly injected and has a power-law
energy spectrum, determine the injection rate by further assuming
@@ -192,16 +192,16 @@ class RadioHalo:
@property
@lru_cache()
- def time_crossing(self):
+ def time_turbulence(self):
"""
- The time duration of the sub-cluster crossing the main cluster,
- which is also used to approximate the merging time, during which
- the turbulence acceleration is regarded as effective.
+ The time duration the merger-induced turbulence persists, which
+ is used to approximate the effective turbulence acceleration
+ timescale.
Unit: [Gyr]
"""
- return helper.time_crossing(self.M_main, self.M_sub,
- z=self.z_merger)
+ return helper.time_turbulence(self.M_main, self.M_sub,
+ z=self.z_merger, configs=self.configs)
@property
def radius_virial_obs(self):
@@ -706,10 +706,10 @@ class RadioHalo:
NOTE
----
Considering that the turbulence acceleration is a 2nd-order Fermi
- process, it has only an effective acceleration time of several 1e8
- years. Therefore, the turbulence is assumed to only accelerate
- the electrons during the merging period, i.e., the acceleration
- timescale is set to be infinite after "t_merger + time_cross".
+ process, it has only an effective acceleration time ~<1 Gyr.
+ Therefore, only during the period that strong turbulence persists
+ in the ICM that the turbulence could effectively accelerate the
+ relativistic electrons.
WARNING
-------
@@ -745,7 +745,7 @@ class RadioHalo:
----------
Ref.[donnert2013],Eq.(15)
"""
- if (t < self.age_merger) or (t > self.age_merger+self.time_crossing):
+ if (t < self.age_merger) or (t > self.age_merger+self.time_turbulence):
# NO acceleration (see also the above NOTE and WARNING!)
tau_acc = 10 # [Gyr]
else:
diff --git a/fg21sim/extragalactic/clusters/helper.py b/fg21sim/extragalactic/clusters/helper.py
index cac6401..10c4f12 100644
--- a/fg21sim/extragalactic/clusters/helper.py
+++ b/fg21sim/extragalactic/clusters/helper.py
@@ -360,6 +360,29 @@ def time_crossing(M_main, M_sub, z=0.0):
return time
+def time_turbulence(M_main, M_sub, z=0.0, configs=CONFIGS):
+ """
+ The timescale that the compressive turbulence persists, which is
+ estimated as:
+ τ_turb ≅ 2*d / v_impact,
+ where d ≅ L ≅ R_vir / 3,
+ and L is also the turbulence injection scale.
+ During this timescale, the merger-induced turbulence is regarded
+ to accelerate the relativistic electrons effectively.
+
+ Unit: [Gyr]
+ """
+ # Turbulence injection scale factor
+ key = "extragalactic/halos/f_lturb"
+ f_lturb = configs.getn(key)
+ R_vir = radius_virial(M_main, z) # [kpc]
+ distance = 2*R_vir * f_lturb
+ vi = velocity_impact(M_main, M_sub, z) # [km/s]
+ uconv = AUC.kpc2km * AUC.s2Gyr # [s kpc/km] => [Gyr]
+ time = uconv * distance / vi # [Gyr]
+ return time
+
+
def draw_halo(radius, nr=2.0, felong=None, rotation=None):
"""
Draw the template image of one halo, which is used to simulate
diff --git a/fg21sim/extragalactic/clusters/main.py b/fg21sim/extragalactic/clusters/main.py
index 5bfbf30..a02cbb0 100644
--- a/fg21sim/extragalactic/clusters/main.py
+++ b/fg21sim/extragalactic/clusters/main.py
@@ -288,7 +288,7 @@ class GalaxyClusters:
("Rvir_main", halo.radius_virial_main), # [kpc] at z_merger
("Rvir_sub", halo.radius_virial_sub), # [kpc] at z_merger
("tback_merger", halo.tback_merger), # [Gyr]
- ("time_crossing", halo.time_crossing), # [Gyr]
+ ("time_turbulence", halo.time_turbulence), # [Gyr]
("Rhalo", halo.radius), # [kpc]
("Rhalo_angular", halo.angular_radius), # [arcsec]
("volume", halo.volume), # [kpc^3]