Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Plummer velocity distribution functions

San Diego State University

The isotropic equilibrium DF for the Plummer profile is one of the oldest closed-form distribution functions in stellar dynamics. It falls out of Plummer (1911)’s original analysis as a direct consequence of the smooth (1+r2/a2)5/2(1 + r^2/a^2)^{-5/2} density profile, and provides the canonical example of how the Eddington inversion machinery turns a 3D density profile into a 6D phase-space DF for spherical isotropic systems.

This chapter derives f(E)(E)7/2f(E) \propto (-E)^{7/2} from the Plummer density profile, lists the closed-form moments, walks through progenax’s sampling implementation, and connects to the anisotropy and rotation extensions in Anisotropy and rotation.

Eddington inversion in one paragraph

For a spherical, isotropic system, the DF depends only on the binding energy EE=12v2+Ψ(r)\mathcal{E} \equiv -E = -\tfrac{1}{2}v^2 + \Psi(r), where ΨΦ\Psi \equiv -\Phi is the relative potential (positive for a bound system, Ψ0\Psi \to 0 at infinity). The Eddington formula

f(E)  =  18π2[0Ed2ρdΨ2dΨEΨ+1E(dρdΨ) ⁣Ψ=0]f(\mathcal{E}) \;=\; \frac{1}{\sqrt{8}\,\pi^2} \biggl[\,\int_0^{\mathcal{E}} \frac{\mathrm{d}^2\rho}{\mathrm{d}\Psi^2}\,\frac{\mathrm{d}\Psi}{\sqrt{\mathcal{E} - \Psi}} + \frac{1}{\sqrt{\mathcal{E}}}\,\biggl(\frac{\mathrm{d}\rho}{\mathrm{d}\Psi}\biggr)_{\!\Psi=0}\,\biggr]

↗ model card

inverts the spatial-density profile ρ(Ψ)\rho(\Psi) — the density expressed as a function of the relative potential — into the DF f(E)f(\mathcal{E}). (An earlier revision of this page wrote the integration variable as Φ\Phi; the integral runs over the positive relative potential, so Ψ\Psi is the honest symbol.) The boundary term vanishes for systems with ρ0\rho \to 0 as Ψ0\Psi \to 0 (i.e. cluster density vanishing at infinity, which Plummer satisfies). For Plummer the full inversion gives a closed-form DF in E\mathcal{E} alone.

The Plummer DF

Substituting Plummer’s

ρ(Ψ)  =  3M4πa3(ΨaGM) ⁣5\rho(\Psi) \;=\; \frac{3 M}{4\pi a^3}\,\biggl(\frac{\Psi\,a}{GM}\biggr)^{\!5}

into (1). The boundary term vanishes (ρΨ50\rho \propto \Psi^5 \to 0 as Ψ0\Psi \to 0), and the second derivative is a pure power: d2ρ/dΨ2=3M4πa3(a/GM)520Ψ3\mathrm{d}^2\rho/\mathrm{d}\Psi^2 = \tfrac{3M}{4\pi a^3}\, (a/GM)^5\, 20\,\Psi^3. The Abel integral is then a Beta function,

0EΨ3dΨEΨ  =  B ⁣(4,12)E7/2  =  3235E7/2,\int_0^{\mathcal{E}} \frac{\Psi^3\,\mathrm{d}\Psi}{\sqrt{\mathcal{E}-\Psi}} \;=\; B\!\left(4, \tfrac12\right)\mathcal{E}^{7/2} \;=\; \frac{32}{35}\,\mathcal{E}^{7/2},

and collecting constants (18π234π203235=2427π3\tfrac{1}{\sqrt8 \pi^2} \cdot \tfrac{3}{4\pi} \cdot 20 \cdot \tfrac{32}{35} = \tfrac{24\sqrt2}{7\pi^3}) yields

    f(E)  =  2427π3a2G5M4E7/2,E>0    \boxed{\;\;f(\mathcal{E}) \;=\; \frac{24\sqrt{2}}{7\pi^3}\,\frac{a^2}{G^5\,M^4}\,\mathcal{E}^{7/2},\qquad \mathcal{E} > 0\;\;}

↗ model card

with E=E=GM/r2+a212v2\mathcal{E} = -E = GM/\sqrt{r^2 + a^2} - \tfrac{1}{2}v^2. The E7/2\mathcal{E}^{7/2} exponent is the signature of the Plummer profile — it follows directly from ρΦ5\rho \propto \Phi^5 and the Abel-integral 12\frac{1}{2}-power kernel of (1). progenax’s sampler uses this exact form, with no truncation or smoothing.

The inversion, step by step: the density as a function of the relative
potential, its second derivative (the Abel-kernel ingredient), and the
resulting DF — with the output of the numerical inverter
(eddington_invert, the same code Engine B uses) as dots on the closed-form
law. Max relative deviation 3.4\times10^{-4} with these grid inputs
(1.06\times10^{-4} with analytic derivative inputs — the validation suite’s
strongest truth test). Regenerate: python -m laboratory.icviz --only eddington-triptych.

Figure 1:The inversion, step by step: the density as a function of the relative potential, its second derivative (the Abel-kernel ingredient), and the resulting DF — with the output of the numerical inverter (eddington_invert, the same code Engine B uses) as dots on the closed-form law. Max relative deviation 3.4×1043.4\times10^{-4} with these grid inputs (1.06×1041.06\times10^{-4} with analytic derivative inputs — the validation suite’s strongest truth test). Regenerate: python -m laboratory.icviz --only eddington-triptych.

Closed-form moments

The first three velocity moments of the Plummer DF are

v2(r)  =  GM2r2+a2σr2(r)=vr2  =  GM6r2+a2σt2(r)=vt2  =  σr2(r)(isotropic)\begin{aligned} \langle v^2\rangle(r) &\;=\; \frac{GM}{2\,\sqrt{r^2 + a^2}} \\ \sigma_r^2(r) = \langle v_r^2\rangle &\;=\; \frac{GM}{6\,\sqrt{r^2 + a^2}} \\ \sigma_t^2(r) = \langle v_t^2\rangle &\;=\; \sigma_r^2(r) \quad\text{(isotropic)} \end{aligned}

with v2=σr2+2σt2=3σr2\langle v^2 \rangle = \sigma_r^2 + 2\sigma_t^2 = 3\sigma_r^2. The ratio v2/Φ(r)=12\langle v^2 \rangle / |\Phi(r)| = \tfrac{1}{2} at all radii — this is the local statement of the virial theorem and the proximate reason a Plummer cluster sampled from (4) lands at Qvir=0.5Q_{\mathrm{vir}} = 0.5 at the DF level — realised as 0.5 up to the finite-NN Monte-Carlo fluctuation, with no rescale (What is an initial condition?).

Both dispersion oracles, measured. Left: sampled \sigma_r(r)
(N = 2\times10^5, seed 11) threading the closed form, residuals inside the
Poisson band. Right: project_dispersion against the source-verified
 Eq. 43 oracle — residuals \lesssim 10^{-5} (the
outer-radius rise is the documented master-interpolation floor).
Regenerate: python -m laboratory.icviz --only plummer-dispersion-oracles.

Figure 2:Both dispersion oracles, measured. Left: sampled σr(r)\sigma_r(r) (N=2×105N = 2\times10^5, seed 11) threading the closed form, residuals inside the Poisson band. Right: project_dispersion against the source-verified Dejonghe (1987) Eq. 43 oracle — residuals 105\lesssim 10^{-5} (the outer-radius rise is the documented master-interpolation floor). Regenerate: python -m laboratory.icviz --only plummer-dispersion-oracles.

The central velocity dispersion is

σ02  =  σr2(0)  =  GM6a\sigma_0^2 \;=\; \sigma_r^2(0) \;=\; \frac{GM}{6\,a}

which (combined with (3)) gives a one-line conversion between cluster mass, scale radius, and central velocity dispersion — useful for sanity-checking observational fits.

Sampling: speed and rejection

progenax samples velocities from (4) via inverse-CDF on the speed distribution at each particle’s position. At fixed rr, the DF integrated over angles gives

f(vr)    v2E(r,v)7/2,E(r,v)=GMr2+a212v2f(v \mid r) \;\propto\; v^2\,\mathcal{E}(r, v)^{7/2},\qquad \mathcal{E}(r, v) = \frac{GM}{\sqrt{r^2+a^2}} - \tfrac{1}{2}v^2

↗ model card

with v[0,vesc(r)]v \in [0, v_{\mathrm{esc}}(r)]. The distribution is bounded, unimodal, and smooth, so progenax uses a fixed-iteration inverse-CDF lookup table rather than rejection sampling. The lookup table is constructed once per call (vectorised over rr) and inverted via jnp.interp, so the cost per particle is dominated by the single bisection step — no Python loop, no rejection retries, fully JIT-compatible.

Implementation in progenax

from progenax.kinematics import PlummerVelocityDF
from jaxstro.units import STELLAR
import jax, jax.numpy as jnp

df = PlummerVelocityDF(r_h=1.0)        # Half-mass radius in pc
masses = jnp.ones(1000)
key = jax.random.PRNGKey(42)
key_pos, key_vel = jax.random.split(key)   # never reuse a key

# Positions from the matched profile (any sampled positions work)
from progenax.profiles import PlummerProfile
positions = PlummerProfile(r_h=1.0).sample_positions(masses, key_pos)

# Sample velocities consistent with f(E) ∝ E^(7/2)
velocities = df.sample_velocities(positions, masses, key_vel, G=STELLAR.G)

# The DF is an exact equilibrium, so Q_vir -> 0.5 with no rescale
# (finite-N: 0.5 +/- ~5e-3 at N=1e4, the Monte-Carlo fluctuation)

PlummerVelocityDF is an Equinox module. Its single Python parameter is r_h; everything else (the central potential depth, the inverse-CDF lookup table) is derived analytically from rhr_h inside the class. Differentiability flows through rhΦ0f(E)vr_h \to \Phi_0 \to f(\mathcal{E}) \to \mathbf{v}.

Sanity checks

The Plummer DF satisfies four checks that progenax’s validation suite (Plummer equilibrium) verifies on every release:

Property

Tolerance

Source of truth

Total kinetic energy / V|V|

0.5±5 ⁣× ⁣1030.5 \pm 5\!\times\!10^{-3}

Virial theorem (statistical from finite N=104N = 10^4)

Mean radial dispersion at rhr_h

1% of analytic value

(5)

Anisotropy parameter β(r)\beta(r)

β<0.02|\beta| < 0.02

Isotropy by construction

Bound fraction

>99.9%> 99.9\%

All particles have E>0\mathcal{E} > 0 for v<vesc\mathbf{v} < v_{\mathrm{esc}}

The first row implements the full Jeans-equation check: Plummer positions sampled from PlummerProfile plus velocities from PlummerVelocityDF produce Qvir=0.5Q_{\mathrm{vir}} = 0.5 to 0.5%, with the residual being the finite-NN fluctuation of the Monte Carlo energy estimate. No virial rescaling is needed — equilibrium is exact at the DF level.

Check yourself

1. The 7/2 exponent by power counting

Without integrating: ρΨn\rho \propto \Psi^n feeds the Abel kernel 0EΨn2(EΨ)1/2dΨEn3/2\int_0^{\mathcal{E}} \Psi^{n-2}\,(\mathcal{E}-\Psi)^{-1/2}\mathrm{d}\Psi \propto \mathcal{E}^{\,n - 3/2}. Plummer has n=5n = 5; check that Dejonghe’s qq-family (which generalizes ρΨ5q(1+r2)q/2\rho \propto \Psi^{5-q}(1+r^2)^{-q/2}) recovers the same 7/27/2 at q=0q = 0.

2. The central projected dispersion

Evaluate project_dispersion at R0R \to 0 and compare with σlos2(0)=3π64GM/a\sigma_{\rm los}^2(0) = \tfrac{3\pi}{64}\,GM/a. With M=400M = 400, rh=1r_h = 1 (so a0.766a \approx 0.766 pc, STELLAR units) you should get σlos(0)0.59\sigma_{\rm los}(0) \approx 0.59 pc/Myr — and it should agree with the left panel’s central σr\sigma_r times 3πa/(64)6\sqrt{3\pi a/(64) \cdot 6}… work out that ratio (0.94\approx 0.94) before running.

Anisotropy and rotation extensions

The Plummer DF above is isotropic (β=0\beta = 0) and non-rotating. progenax extends it with two compositions:

Both extensions are documented in detail at Anisotropy and rotation. They compose freely with each other and with non-Plummer profiles (e.g. King + Osipkov-Merritt is a common combination for old globular clusters with observed radial anisotropy).

Domain of validity and limitations

  1. Single-mass equilibrium only. The Eddington DF assumes one stellar mass species. Multi-mass equilibrium DFs require simultaneous treatment of all mass groups — the multi-mass generalisation is formalized by Gieles & Zocchi (2015), which progenax plans to implement natively as its own differentiable generalization (see The differentiable lowered-model family (Engine A)).

  2. Spherical and isotropic by default. Anisotropy and rotation extensions exist (above) but are layered on top of the isotropic DF; they do not change the underlying f(E)f(\mathcal{E}).

  3. Untruncated. The DF extends to rr \to \infty. For tidally truncated Plummer-like systems use King profile instead, or apply post-sampling truncation via apply_tidal_truncation (Tidal physics).

Implementation, validation & references

References
  1. Plummer, H. C. (1911). On the problem of distribution in globular star clusters. Monthly Notices of the Royal Astronomical Society, 71, 460–470. 10.1093/mnras/71.5.460
  2. Dejonghe, H. (1987). A completely analytical family of anisotropic Plummer models. Monthly Notices of the Royal Astronomical Society, 224, 13–39. 10.1093/mnras/224.1.13
  3. Gieles, M., & Zocchi, A. (2015). A family of lowered isothermal models. Monthly Notices of the Royal Astronomical Society, 454, 576–592. 10.1093/mnras/stv1848
  4. Aarseth, S. J., Henon, M., & Wielen, R. (1974). A comparison of numerical methods for the study of star cluster dynamics. Astronomy and Astrophysics, 37, 183–187.