Thermal Electrons¶
Introduction¶
In a relativistic collisionless shock, most downstream electrons are thermalized into a Maxwell-Juttner distribution while only a small fraction \(\xi_e\) are accelerated into a non-thermal power-law tail. The thermal population produces synchrotron emission with a characteristic spectral bump at a frequency
where \(\Theta = k_B T_e / m_e c^2\) is the dimensionless electron temperature and \(B\) is the post-shock magnetic field. This thermal synchrotron component is particularly important for trans-relativistic shocks (\(\beta\Gamma \sim 0.1\text{--}10\)), where the post-shock electrons are hot enough to radiate efficiently but the non-thermal tail may be weak.
Relevant astrophysical sources include:
- FBOTs (AT2018cow, CSS161010)
- Jetted TDEs (AT2022cmc)
- Neutron star mergers (GW170817-like)
The implementation follows Margalit & Quataert (2021; MQ21) with extensions from Ferguson & Margalit (2025; FM25).
Physics Implementation¶
Electron Temperature¶
The post-shock dimensionless electron temperature is derived from shock jump conditions (MQ21 eqs. 2-3):
where \(\varepsilon_T\) is the thermal efficiency parameter controlling what fraction of the shock energy goes into heating electrons.
Emissivity and Absorption¶
Thermal component: Uses the Mahadevan et al. (1996) fitting function \(I'(x)\) for the thermal synchrotron emissivity (MQ21 eq. 13), where \(x = \nu / \nu_\Theta\) is the dimensionless frequency.
Power-law component: Non-thermal emissivity and absorption follow MQ21 eqs. 14-17, with low-frequency corrections that prevent unphysical divergences below \(\gamma_m\).
Total emission: The combined emissivity is \(j_\nu = j_\nu^\mathrm{th} + j_\nu^\mathrm{pl}\), with SSA applied to the total optical depth \(\tau = (\alpha_\nu^\mathrm{th} + \alpha_\nu^\mathrm{pl}) \Delta r\).
Fast-cooling corrections: Both thermal and non-thermal populations include synchrotron cooling corrections (MQ21 eq. 18), which suppress emission from electrons above the cooling Lorentz factor \(\gamma_c\).
Key Parameters¶
| Parameter | Symbol | Description | Default |
|---|---|---|---|
eps_T |
\(\varepsilon_T\) | Thermal efficiency (fraction of shock energy heating electrons) | 1.0 |
eps_e |
\(\varepsilon_e\) | Non-thermal electron energy fraction | (required) |
delta |
\(\delta\) | Power-law fraction = \(\varepsilon_e / \varepsilon_T\) | auto |
eps_b |
\(\varepsilon_B\) | Magnetic energy fraction | (required) |
p |
\(p\) | Electron spectral index | (required) |
The parameter \(\delta = \varepsilon_e / \varepsilon_T\) controls the relative strength of the non-thermal power-law tail vs the thermal bump. When \(\delta \ll 1\), thermal emission dominates near the peak frequency.
Usage¶
Basic: Thermal vs Non-Thermal SED¶
Select the sync_thermal model and provide eps_T in the parameter dictionary:
import numpy as np
from blastwave import Jet, TopHat, ForwardJetRes
P = dict(Eiso=1e52, lf=10.0, theta_c=0.3,
n0=1.0, A=0.0, eps_e=0.01, eps_b=0.1, p=3.0,
theta_v=0.0, d=44.0, z=0.01,
eps_T=0.5) # <-- thermal efficiency
jet = Jet(TopHat(0.3, 1e52, lf0=10.0), 0.0, 1.0,
tmin=10.0, tmax=1e9, grid=ForwardJetRes(0.3, 129),
spread=True, eps_e=0.01, eps_b=0.1, p_fwd=3.0)
t = 100 * 86400 # 100 days
# Non-thermal only (standard synchrotron + SSA)
flux_nt = jet.FluxDensity(t, 3e9, P, model="sync_ssa_smooth")
# Thermal + non-thermal
flux_th = jet.FluxDensity(t, 3e9, P, model="sync_thermal")
SED Comparison¶
The left panel below shows the SED at 100 days for a mildly relativistic jet (\(\Gamma_0 = 10\), \(n_0 = 1\) cm⁻³). The thermal component adds a pronounced bump around 1-10 GHz. The right panel demonstrates sensitivity to \(\varepsilon_T\): higher thermal efficiency shifts the bump to higher frequencies and increases its amplitude.
Light Curves¶
Radio light curves with and without thermal electrons, and a comparison between thin-shell and full-volume emission models:
At radio frequencies the thermal component enhances the early-time flux before the non-thermal power-law component dominates at late times. The full-volume (FM25) model predicts somewhat different flux levels due to accounting for emission from the entire post-shock region rather than just the shock surface.
Full-Volume Extension (Ferguson & Margalit 2025)¶
Thin-Shell vs Full-Volume¶
By default, the sync_thermal model evaluates emission at the shock surface (thin-shell approximation). The FM25 full-volume extension instead integrates over the post-shock region using Rankine-Hugoniot conditions and a self-similar coordinate \(\xi_\mathrm{shell}\):
where \(k\) is the circumburst density power-law index (\(k=0\) for ISM, \(k=2\) for stellar wind).
This extension is important for trans-relativistic shocks where a significant fraction of emission comes from deep within the post-shock region, not just the shock surface.
Enabling Full-Volume¶
P = dict(Eiso=1e52, lf=10.0, theta_c=0.3,
n0=1.0, A=0.0, eps_e=0.01, eps_b=0.1, p=3.0,
theta_v=0.0, d=44.0, z=0.01,
eps_T=0.5,
full_volume=1.0, # <-- enable FM25 full-volume
k=0.0) # <-- CSM density index (0=ISM, 2=wind)
flux_fv = jet.FluxDensity(t, 3e9, P, model="sync_thermal")
Comparison with FM25 Reference Code¶
To validate the implementation, we compare blastwave's sync_thermal (full-volume mode) against the FM25 reference code (thermalsyn_v2.py:Fnu_of_nu) from Ferguson & Margalit (2025, arXiv:2509.16313).
Setup: A spherical blast wave with \(E_\mathrm{iso} = 10^{52}\) erg and \(\Gamma_0 = 10\) in ISM (\(n_0 = 1\) cm⁻³). We extract the fluid state at the time when \(\beta\Gamma_\mathrm{fluid} \approx 1\) and pass the corresponding shock velocity to FM25.
Both codes produce the same characteristic spectral features: SSA turnover at low frequencies, thermal bump around GHz, and power-law decline at high frequencies. The normalization offset between the two is expected: blastwave performs a full hydrodynamic simulation with EATS integration over the entire shock surface, while FM25 uses an analytic single-zone model with a volume-filling factor \(f = 3/16\). The spectral shape agreement confirms that the underlying MQ21 thermal physics (emissivity, absorption, cooling) is correctly implemented.
When Thermal Emission Matters¶
Thermal synchrotron emission is most important when:
-
Trans-relativistic regime (\(\beta\Gamma \sim 0.1\text{--}1\)): The post-shock temperature is high enough for significant thermal radiation, but the shock is not ultrarelativistic (where the non-thermal tail dominates).
-
Low \(\varepsilon_e\) / high \(\varepsilon_T\): When only a small fraction of electrons are accelerated (\(\delta = \varepsilon_e / \varepsilon_T \ll 1\)), the thermal population carries most of the electron energy.
-
Dense media: Higher upstream density increases both the post-shock magnetic field and electron density, amplifying the thermal emission.
-
Radio/mm frequencies: The thermal bump typically appears at GHz frequencies, making it most observable in radio and millimeter bands.
Script: examples/showcase_thermal.py