Skip to content

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

\[ \nu_\Theta \propto \Theta^2 B \]

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):

\[ \Theta_0 = \varepsilon_T \frac{9 \mu m_p}{32 \mu_e m_e} \beta^2 \]
\[ \Theta = \frac{5\Theta_0 - 6 + \sqrt{25\Theta_0^2 + 180\Theta_0 + 36}}{30} \]

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.

2026-03-05T23:04:13.066839 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/

Light Curves

Radio light curves with and without thermal electrons, and a comparison between thin-shell and full-volume emission models:

2026-03-05T23:04:14.367795 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/

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}\):

\[ \xi_\mathrm{shell} = \left(1 - \frac{3}{4(3-k)\Gamma^2}\right)^{1/3} \]

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.

2026-03-05T23:04:16.038589 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/

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:

  1. 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).

  2. 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.

  3. Dense media: Higher upstream density increases both the post-shock magnetic field and electron density, amplifying the thermal emission.

  4. 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