diff options
author | Aaron LI <aly@aaronly.me> | 2017-07-23 10:24:00 +0800 |
---|---|---|
committer | Aaron LI <aly@aaronly.me> | 2017-07-23 10:32:38 +0800 |
commit | 3bd9c730e20c9a70d17c1459ddf78ba71ee84f60 (patch) | |
tree | b74c651e157f4ae0074feb47de87eb006de0b5b1 | |
parent | bace1e88fcf2f906a1ae17c3c10004eedb176070 (diff) | |
download | fg21sim-3bd9c730e20c9a70d17c1459ddf78ba71ee84f60.tar.bz2 |
clusters/halo.py: Constrain tau_acc to avoid zero diffusion
Zero or negative diffusion coefficient leads to unstable or wrong
results due to numerical algorithm/scheme adopted to solve the
Fokker-Planck equation.
Also add a NOTE to the FokkerPlanckSolver class.
Signed-off-by: Aaron LI <aly@aaronly.me>
-rw-r--r-- | fg21sim/extragalactic/clusters/halo.py | 17 | ||||
-rw-r--r-- | fg21sim/extragalactic/clusters/solver.py | 7 |
2 files changed, 22 insertions, 2 deletions
diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index 8fdc78c..75789b6 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -243,6 +243,12 @@ class RadioHalo: """ Diffusion term/coefficient for the Fokker-Planck equation. + 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. + Parameters ---------- gamma : float @@ -322,7 +328,12 @@ class RadioHalo: 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 eta_turb. + has a dependence on ``eta_turb``. + + NOTE + ---- + A zero diffusion coefficient may lead to unstable/wrong results, + so constrain this acceleration timescale be finite. Returns ------- @@ -332,9 +343,11 @@ class RadioHalo: """ # The reference/typical acceleration timescale tau_ref = 0.1 # [Gyr] + # The maximum timescale to avoid unstable results + tau_max = 100.0 # [Gyr] if t > self.age_merger + self.time_crossing: - tau = np.inf + tau = tau_max else: tau = tau_ref / self.eta_turb return tau diff --git a/fg21sim/extragalactic/clusters/solver.py b/fg21sim/extragalactic/clusters/solver.py index 6c0e653..dea7f3f 100644 --- a/fg21sim/extragalactic/clusters/solver.py +++ b/fg21sim/extragalactic/clusters/solver.py @@ -102,6 +102,13 @@ class FokkerPlanckSolver: by extrapolating an power law to avoid unphysical accumulations. This fix is ignored if this parameter is not specified. + NOTE + ---- + The diffusion coefficients (i.e., calculated by ``f_diffusion()``) + should be *positive* (i.e., C(x) > 0), otherwise unstable or wrong + results may occur, due to the current numerical scheme/algorithm + adopted. + References ---------- [1] Park & Petrosian 1996, ApJS, 103, 255 |