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.

Rotation & anisotropy validation

San Diego State University

Two kinematic structures layered on the isotropic ICs: streaming rotation (an additive velocity transform) and Osipkov-Merritt radial anisotropy (a velocity-DF shape). Test file: tests/validation/test_rotation_anisotropy_physics.py (see the test dashboard for the live per-suite count); figures: scripts/validate_rotation_anisotropy.py. Theory at Anisotropy and rotation.

What is verified

Each row maps to assertions in test_rotation_anisotropy_physics.py. Measured values are regenerated by scripts/validate_rotation_anisotropy.py. Rotation is an additive transform, so the added field vrot=vaftervbeforev_{\rm rot}=v_{\rm after}-v_{\rm before} is validated exactly (no isotropic-scatter noise).

Property

Tolerance (as tested)

Measured

Anchor

Solid-body vϕ(R)=ΩRv_\phi(R)=\Omega R

slope =Ω=\Omega to 10-6

0.300000 (resid 3×10143\times10^{-14})

vrot=Ω×rv_{\rm rot}=\Omega\times r

Angular-momentum budget Lz=ΩmR2L_z=\Omega\sum m R^2

10-6 rel

exact

rigid rotation

Rotation is purely azimuthal (vRv_R unchanged)

10-9 abs

unchanged

Ω×rR^\Omega\times r \perp \hat R

Differential vϕ(R)=vpeakRRpe1R/Rpv_\phi(R)=v_{\rm peak}\frac{R}{R_p}e^{1-R/R_p}

10-6 abs

max dev <106<10^{-6}

phenomenological curve

OM anisotropy β(r)=r2/(r2+ra2)\beta(r)=r^2/(r^2+r_a^2) — Plummer

<0.04<0.04 per bin

max dev 0.024

Merritt (1985) stretch

OM anisotropy β(r)\beta(r) — EFF

<0.05<0.05 per bin

max dev 0.016

same stretch

ra=Noner_a=\mathrm{None} is isotropic

β<0.04|\beta|<0.04

β0\beta\approx0

no stretch

Differentiability (Ω,vpeak,ra\Omega, v_{\rm peak}, r_a)

AD == central-FD

rel err 3×1093\times10^{-9}, 7×1097\times10^{-9}, 8×1068\times10^{-6}

pure transforms + fixed-key stretch

Figures

Generated by scripts/validate_rotation_anisotropy.py (PASS/FAIL per panel).

Osipkov-Merritt anisotropy. Both Plummer (circles) and EFF (squares) sampled
\beta(r)=1-\sigma_t^2/2\sigma_r^2 land exactly on the OM target
r^2/(r^2+r_a^2) (max dev 0.024, 0.016), reaching \beta=0.5 at r=r_a. The
direction-stretch realizes OM exactly — unlike the self-consistent
Michie-King \beta, which is suppressed below this curve.

Figure 1:Osipkov-Merritt anisotropy. Both Plummer (circles) and EFF (squares) sampled β(r)=1σt2/2σr2\beta(r)=1-\sigma_t^2/2\sigma_r^2 land exactly on the OM target r2/(r2+ra2)r^2/(r^2+r_a^2) (max dev 0.024, 0.016), reaching β=0.5\beta=0.5 at r=rar=r_a. The direction-stretch realizes OM exactly — unlike the self-consistent Michie-King β\beta, which is suppressed below this curve.

Face-on velocity field. (a) The isotropic IC has random in-plane velocity
directions (no net rotation). (b) After solid-body rotation \Omega=0.3 the
streaming field v_{\rm rot}=\Omega\times r is coherent circulation (arrows
colored by v_\phi, all co-rotating).

Figure 2:Face-on velocity field. (a) The isotropic IC has random in-plane velocity directions (no net rotation). (b) After solid-body rotation Ω=0.3\Omega=0.3 the streaming field vrot=Ω×rv_{\rm rot}=\Omega\times r is coherent circulation (arrows colored by vϕv_\phi, all co-rotating).

Solid-body rotation. The added streaming v_\phi(R) is linear in cylindrical
R with fitted slope =\Omega=0.300000 (residual 3\times10^{-14}); the injected
angular momentum equals \Omega\sum m R^2 exactly.

Figure 3:Solid-body rotation. The added streaming vϕ(R)v_\phi(R) is linear in cylindrical RR with fitted slope =Ω=0.300000=\Omega=0.300000 (residual 3×10143\times10^{-14}); the injected angular momentum equals ΩmR2\Omega\sum m R^2 exactly.

Differential rotation. The added v_\phi(R)=v_{\rm peak}(R/R_p)e^{1-R/R_p}
peaks at R_{\rm peak} and decays inward and outward (a phenomenological curve,
not from a specific paper). Per-particle match to <10^{-6}.

Figure 4:Differential rotation. The added vϕ(R)=vpeak(R/Rp)e1R/Rpv_\phi(R)=v_{\rm peak}(R/R_p)e^{1-R/R_p} peaks at RpeakR_{\rm peak} and decays inward and outward (a phenomenological curve, not from a specific paper). Per-particle match to <106<10^{-6}.

Differentiability

Gradient validation (autodiff vs central finite difference). (a)
\partial T_{\rm rot}/\partial\Omega, (b) \partial T_{\rm rot}/\partial v_{\rm peak},
(c) \partial\langle v_r^2\rangle/\partial r_a: autodiff and finite difference agree
to max rel err 3\times10^{-9}, 7\times10^{-9}, 8\times10^{-6}. The rotation
amplitudes and the anisotropy radius are all differentiable for inference.

Figure 5:Gradient validation (autodiff vs central finite difference). (a) Trot/Ω\partial T_{\rm rot}/\partial\Omega, (b) Trot/vpeak\partial T_{\rm rot}/\partial v_{\rm peak}, (c) vr2/ra\partial\langle v_r^2\rangle/\partial r_a: autodiff and finite difference agree to max rel err 3×1093\times10^{-9}, 7×1097\times10^{-9}, 8×1068\times10^{-6}. The rotation amplitudes and the anisotropy radius are all differentiable for inference.

How to run

pytest tests/validation/test_rotation_anisotropy_physics.py -q   # ~7 s
python scripts/validate_rotation_anisotropy.py                   # 5 figures + PASS/FAIL

What this suite does not test

References

Rotation: Binney & Tremaine (2008), Galactic Dynamics (2nd ed.) Sec 4.8; Lynden-Bell (1960), MNRAS 120, 204. Anisotropy: Merritt (1985) (the stretched-isotropic Osipkov-Merritt split, Eq. 15). Theory at Anisotropy and rotation.

References
  1. Merritt, D. (1985). Spherical stellar systems with spheroidal velocity distributions. The Astronomical Journal, 90, 1027–1037. 10.1086/113810