From 0478a88558f75d3afc6ecfc3e1af232520cb2bc8 Mon Sep 17 00:00:00 2001
From: Aaron LI <aly@aaronly.me>
Date: Sat, 30 Dec 2017 20:18:50 +0800
Subject: cluster/halo: Estimate halo radius ~ 0.33*R_vir (main cluster)

---
 fg21sim/configs/20-extragalactic.conf.spec |  5 +++--
 fg21sim/extragalactic/clusters/halo.py     |  2 +-
 fg21sim/extragalactic/clusters/helper.py   | 23 ++++++++++++++++-------
 3 files changed, 20 insertions(+), 10 deletions(-)

(limited to 'fg21sim')

diff --git a/fg21sim/configs/20-extragalactic.conf.spec b/fg21sim/configs/20-extragalactic.conf.spec
index 69db5c8..7d52de4 100644
--- a/fg21sim/configs/20-extragalactic.conf.spec
+++ b/fg21sim/configs/20-extragalactic.conf.spec
@@ -149,8 +149,9 @@
   [[halos]]
   # The turbulence is generally injected at the cluster center during
   # a merger.  This option parameterize the turbulence injection scale
-  # to be a fraction of the virial radius of the (main) cluster.
-  f_lturb = float(default=0.5, min=0.1, max=1.0)
+  # to be a fraction of the virial radius of the (main) cluster, which
+  # is also used to determine the radio halo radius.
+  f_lturb = float(default=0.33, min=0.1, max=1.0)
 
   # The custom option to tune the turbulent acceleration timescale, which
   # controls the relativistic particle acceleration efficiencies.
diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py
index 0b8446a..1d9c9aa 100644
--- a/fg21sim/extragalactic/clusters/halo.py
+++ b/fg21sim/extragalactic/clusters/halo.py
@@ -238,7 +238,7 @@ class RadioHalo:
         Unit: [kpc]
         """
         r_halo = helper.radius_halo(self.M_main, self.M_sub,
-                                    self.z_merger)
+                                    self.z_merger, configs=self.configs)
         return r_halo
 
     @property
diff --git a/fg21sim/extragalactic/clusters/helper.py b/fg21sim/extragalactic/clusters/helper.py
index 2ce3e4a..cac6401 100644
--- a/fg21sim/extragalactic/clusters/helper.py
+++ b/fg21sim/extragalactic/clusters/helper.py
@@ -30,6 +30,10 @@ References
    Murgia et al. 2009, A&A, 499, 679
    http://adsabs.harvard.edu/abs/2009A%26A...499..679M
 
+.. [vazza2011]
+   Vazza et al. 2011, A&A, 529, A17
+   http://adsabs.harvard.edu/abs/2011A%26A...529A..17V
+
 .. [zandanel2014]
    Zandanel, Pfrommer & Prada 2014, MNRAS, 438, 124
    http://adsabs.harvard.edu/abs/2014MNRAS.438..124Z
@@ -81,16 +85,18 @@ def radius_virial(mass, z=0.0):
     return R_vir
 
 
-def radius_halo(M_main, M_sub, z=0.0):
+def radius_halo(M_main, M_sub, z=0.0, configs=CONFIGS):
     """
-    Calculate the (predicted) radius of (giant) radio halo for a cluster.
+    Calculate the (predicted) radius of (giant) radio halo.
 
     NOTE
     ----
-    It can be intuitively assumed that a merger will generate turbulences
-    within a region of size of the falling sub-cluster.  And this
-    estimation can agree with the currently observed radio halos, which
-    generally have a angular diameter size ~2-7 [arcmin].
+    The halo radius is estimated to be the same as the turbulence
+    injection scale, i.e.:
+        R_halo ≅ L ≅ R_vir / 3
+    where R_vir the virial radius of the main cluster.
+
+    Reference: [vazza2011],Sec.(3.6)
 
     Parameters
     ----------
@@ -107,7 +113,10 @@ def radius_halo(M_main, M_sub, z=0.0):
         Radius of the (simulated/predicted) giant radio halo
         Unit: [kpc]
     """
-    R_halo = radius_virial(mass=M_sub, z=z)  # [kpc]
+    # Turbulence injection scale factor
+    key = "extragalactic/halos/f_lturb"
+    f_lturb = configs.getn(key)
+    R_halo = f_lturb * radius_virial(mass=M_main, z=z)  # [kpc]
     return R_halo
 
 
-- 
cgit v1.2.2