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
is validated exactly (no isotropic-scatter noise).
Property | Tolerance (as tested) | Measured | Anchor |
|---|---|---|---|
Solid-body | slope to 10-6 | 0.300000 (resid ) | |
Angular-momentum budget | 10-6 rel | exact | rigid rotation |
Rotation is purely azimuthal ( unchanged) | 10-9 abs | unchanged | |
Differential | 10-6 abs | max dev | phenomenological curve |
OM anisotropy — Plummer | per bin | max dev 0.024 | Merritt (1985) stretch |
OM anisotropy — EFF | per bin | max dev 0.016 | same stretch |
is isotropic | no stretch | ||
Differentiability () | AD central-FD | rel err , , | pure transforms + fixed-key stretch |
Figures¶
Generated by scripts/validate_rotation_anisotropy.py (PASS/FAIL per panel).

Figure 1:Osipkov-Merritt anisotropy. Both Plummer (circles) and EFF (squares) sampled land exactly on the OM target (max dev 0.024, 0.016), reaching at . The direction-stretch realizes OM exactly — unlike the self-consistent Michie-King , which is suppressed below this curve.

Figure 2:Face-on velocity field. (a) The isotropic IC has random in-plane velocity directions (no net rotation). (b) After solid-body rotation the streaming field is coherent circulation (arrows colored by , all co-rotating).

Figure 3:Solid-body rotation. The added streaming is linear in cylindrical with fitted slope (residual ); the injected angular momentum equals exactly.

Figure 4:Differential rotation. The added peaks at and decays inward and outward (a phenomenological curve, not from a specific paper). Per-particle match to .
Differentiability¶

Figure 5:Gradient validation (autodiff vs central finite difference). (a) , (b) , (c) : autodiff and finite difference agree to max rel err , , . 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/FAILWhat this suite does not test¶
Self-consistent rotating equilibria — the rotation here is a streaming transform added to a non-rotating equilibrium, not a self-consistent rotating DF (that is part of the lowered-model-family roadmap).
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.
- Merritt, D. (1985). Spherical stellar systems with spheroidal velocity distributions. The Astronomical Journal, 90, 1027–1037. 10.1086/113810