aboutsummaryrefslogtreecommitdiffstats
path: root/fg21sim/extragalactic/clusters/solver.py
diff options
context:
space:
mode:
authorAaron LI <aly@aaronly.me>2017-07-23 10:33:05 +0800
committerAaron LI <aly@aaronly.me>2017-07-23 10:33:05 +0800
commit7d1b88a07bee258ca3d93cbfc23d7b37f011065b (patch)
tree5d791a82d483de1b8867f0ad54f2cfa77ff3d1fe /fg21sim/extragalactic/clusters/solver.py
parent3bd9c730e20c9a70d17c1459ddf78ba71ee84f60 (diff)
downloadfg21sim-7d1b88a07bee258ca3d93cbfc23d7b37f011065b.tar.bz2
clusters: Accept 1D numpy array and calculate values for all gamma's
Signed-off-by: Aaron LI <aly@aaronly.me>
Diffstat (limited to 'fg21sim/extragalactic/clusters/solver.py')
-rw-r--r--fg21sim/extragalactic/clusters/solver.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/fg21sim/extragalactic/clusters/solver.py b/fg21sim/extragalactic/clusters/solver.py
index dea7f3f..d7660b0 100644
--- a/fg21sim/extragalactic/clusters/solver.py
+++ b/fg21sim/extragalactic/clusters/solver.py
@@ -104,6 +104,13 @@ class FokkerPlanckSolver:
NOTE
----
+ All above functions should accept two parameters: ``(x, t)``,
+ where ``x`` is an 1D float `~numpy.ndarray` representing the adopted
+ logarithmic grid points along the spatial/energy axis, ``t`` is the
+ time of each solving step.
+
+ 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
@@ -281,9 +288,9 @@ class FokkerPlanckSolver:
dx_phalf = self.dx_phalf
dx_mhalf = self.dx_mhalf
dt = self.tstep
- B = np.array([self.f_advection(x_, tc) for x_ in x])
- C = np.array([self.f_diffusion(x_, tc) for x_ in x])
- Q = np.array([self.f_injection(x_, tc) for x_ in x])
+ B = self.f_advection(x, tc)
+ C = self.f_diffusion(x, tc)
+ Q = self.f_injection(x, tc)
#
B_phalf = self.X_phalf(B)
B_mhalf = self.X_mhalf(B)
@@ -307,7 +314,7 @@ class FokkerPlanckSolver:
b[-1] = 1 + (dt/dx[-1]) * (C_mhalf[-1]/dx_mhalf[-1])*Wplus_mhalf[-1]
# Escape from the system
if self.f_escape is not None:
- T = np.array([self.f_escape(x_, tc) for x_ in x])
+ T = self.f_escape(x, tc)
b += dt / T
# Right-hand side
r = dt * Q + uc