Multi-component cluster engines — model cards¶
Machine-generated from the provenance registry (ADR-0034): every model’s sources (with public DOI/arXiv/ADS pointers), governing equations, parameter meanings, code entry points, and the validation tests that pin them. The hand-authored theory pages hold the derivations; these cards are the citable single source of truth.
Engine A — multimass lowered-isothermal (LIMEPY family)¶
✅ verified · 4 equations · 4 sources · API: MultiComponentCluster
DF-first multi-component equilibrium: every mass component shares one dimensionless potential, each riding it at its own velocity-scale ratio w_j (mass segregation via the equipartition ansatz w_j = mu_j^-delta), with the Gieles & Zocchi (2015) continuous truncation parameter g (Woolley 0 / King 1 / Wilson 2). Equilibrium by construction.
| Use it for | Not for |
|---|---|
| ✓ relaxed multi-mass globular clusters with primordial/partial mass segregation | ✗ prescribed observed density shapes (use Engine B) |
| ✓ physically motivated equilibrium family (DF-defined; unscaled Q = 0.5) | ✗ full energy equipartition (the model SATURATES: sigma(m) flattens below m_eq — that is the physics, not a bug) |
| ✓ GC 1G/2G, halo+core, binaries-vs-singles component splits via direct w_j |
Parameters¶
| Name | Meaning | Units | Typical range | Code |
|---|---|---|---|---|
W0 | dimensionless central potential of the shared well | dimensionless | 3–12 | MultiComponentCluster.from_components(W0=...) |
g | continuous truncation parameter (0 Woolley, 1 King, 2 Wilson) | dimensionless | 0–2.5 | from_components(g=...) |
alpha_j | central density fractions (sum to 1) | dimensionless | — | from_components(alpha_j=...) |
w_j | velocity-scale ratios s_j/s (the single free Engine-A scale per component); mass segregation sets w_j = mu_j^-delta | dimensionless | 0.5–2 | from_components(w_j=...) / from_mass_segregation(delta=...) |
ra_hat_j | optional per-component anisotropy radii (OM/Michie term) | r_c units | inf = isotropic | from_components(ra_hat_j=...) |
Equations¶
Symbols: : continuous truncation parameter [dimensionless]; : truncation energy (the escape edge) [pc^2 / Myr^2]. Assumes: g = 0 Woolley, g = 1 King, g = 2 Wilson; equals GZ15 Eq. 1 up to the constant e^{E_cut/sigma^2}. Derivation: theory page.
Symbols: : central density fractions [dimensionless]; : component density E_gamma(g+3/2, rescale_j psi), the GZ15 lowered exponential [dimensionless]. Assumes: one shared potential; component j rides it at depth W_j = rescale_j psi = w_j^-2 psi. Derivation: theory page.
Symbols: : equipartition exponent (1/2 = traditional partial equipartition; 0 = single-mass oracle) [dimensionless]; : central-density-weighted mean mass (GZ15 Eq. 26) [Msun]. Assumes: mass segregation as a genuine equilibrium property, not a positional reshuffle. Derivation: theory page.
Symbols: : equipartition crossover mass — DERIVED from the DF (Bianchini A2-A3 matching), not fitted [Msun]; : central dimensionless potential W_0 [dimensionless]. Assumes: more concentrated clusters (larger W_0) equipartition down to lighter stars; validated fit-free via the exact mu -> 0 identity (autodiff eta(m)). Derivation: theory page.
Sources¶
Gieles & Zocchi (2015) — the LIMEPY family: DF, E_gamma(g+3/2) density integral, multimass scalings (Eq. 8, p. 578 (density integral — CORRECT in the main text, re-verified 2026-07-11); Eqs. 24-26 (multimass s_j = s mu_j^-delta, mean mass); Appendix B (fractional-calculus derivation))
Gieles & Zocchi (2018) — corrections to the phi->0 limits (Eqs. 20-21) and the sigma_S^2 Eq. 41 typo — the LIMEPY code was always correct (MNRAS 474, 3997 — whole erratum, PDF-verified 2026-07-11)
Peuten et al. (2017) — the multimass anisotropy scaling r_hat_a,j = r_hat_a mu_j^eta (Eqs. 3-5)
Bianchini et al. (2016) — the sigma(m) closed form (their Eq. A1, with the paper’s missing 1/2 power restored — see the per-paper typo note) and the m_eq crossover (Eq. A1; Eq. 3; Appendix A (A2-A3 matching))
Code & validation¶
code:
MultiComponentCluster(src/progenax/cluster/multicomponent.py)validation:
tests/validation/test_multimass_equilibrium_physics.py::test_global_virial_is_half_across_deltavalidation:
tests/validation/test_multimass_equilibrium_physics.py::test_delta0_is_single_mass_and_segregation_growsvalidation:
tests/validation/test_multimass_equilibrium_physics.py::test_anisotropic_sampled_cluster_is_equilibrium_and_correctly_anisotropic
Engine B — density-defined shared-Ψ Eddington equilibria¶
✅ verified · 3 equations · 3 sources · API: build_engine_b_state
Density-first multi-component equilibrium: prescribe each component’s density shape (Plummer/EFF/King mixes with mass fractions), build the shared potential in ONE quadrature pass (no ODE), and derive each component’s ergodic (or Osipkov-Merritt) DF by Eddington inversion in that shared Psi — with a realizability gate (f_j >= 0 or refuse).
| Use it for | Not for |
|---|---|
| ✓ observationally prescribed shapes (e.g. Plummer halo + EFF core) needing THE equilibrium DF | ✗ component mixes whose Eddington DF is negative (unrealizable — the gate raises, by design) |
| ✓ per-component OM anisotropy with independent r_a,j | ✗ DF-defined families with a physical truncation parameter (use Engine A) |
| ✓ differentiable builds (quadrature only — no ODE solve) |
Parameters¶
| Name | Meaning | Units | Typical range | Code |
|---|---|---|---|---|
profiles | prescribed per-component density shapes (PlummerProfile / EFFProfile / KingProfile) | — | — | MultiComponentCluster.from_density_profiles(profiles=[...]) |
mass_fractions | M_j / M_total amplitudes (must sum to 1) | dimensionless | — | from_density_profiles(mass_fractions=...) |
r_a_j | optional per-component OM anisotropy radii (None/inf = isotropic) | pc | large enough that f_j(Q) >= 0 | from_density_profiles(r_a_j=...) |
r_t | cluster truncation radius — DERIVED from component extents (max finite extent, else the f_enc mass radius); explicit override cannot cut a King edge | pc | derived | from_density_profiles(r_t=...) |
Equations¶
Symbols: : sum of mass-fraction-normalized prescribed component densities [Msun / pc^3]. Assumes: one cumulative-trapezoid pass on the sqrt-stretched grid (audit S2); dPsi/dr = -GM/r^2 analytic. Derivation: theory page.
Symbols: : per-component OM anisotropy radius [pc]. Assumes: yields f_j(Q), Q = E - J^2/2r_a,j^2, with beta_j(r) = r^2/(r^2 + r_a,j^2). Derivation: theory page.
Symbols: : dimensionless radius r/r_c of the King component [dimensionless]. Assumes: dW/dr from King’s own integrated Poisson identity of the CLOSED-FORM density — in Abel-type inversions, never differentiate interpolated data (the jnp.gradient staircase drove a single King component to f_min = -0.679). Derivation: theory page.
Sources¶
Binney & Tremaine (2008) — the Eddington inversion with the truncation boundary term (textbook form; Eddington 1916 original) (Section 4.3)
Merritt (1985) — the OM augmented-density device rho_Q = (1 + r^2/r_a^2) rho (Eqs. 45-46 context (per-paper note))
King (1966) — the King-component density branch and the Poisson identity used for dW/dr (never differentiate interpolated data) (Eq. 16 (integrated to the dpsi/dxi identity))
Code & validation¶
code:
build_engine_b_state(src/progenax/cluster/eddington_engine.py)code:
shared_potential(src/progenax/profiles/density_poisson.py)code:
eddington_invert(src/progenax/kinematics/eddington.py)validation:
tests/validation/test_engine_b_physics.py::test_king_density_engine_b_matches_engine_avalidation:
tests/validation/test_engine_b_physics.py::test_plummer_halo_eff_core_equilibriumvalidation:
tests/validation/test_engine_b_physics.py::test_df_density_fidelity_interior
- 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
- Gieles, M., & Zocchi, A. (2018). Erratum: A family of lowered isothermal models. Monthly Notices of the Royal Astronomical Society, 474, 3997. 10.1093/mnras/stx3144
- Peuten, M., Zocchi, A., Gieles, M., Gualandris, A., & Hénault-Brunet, V. (2017). Testing lowered isothermal models with direct N-body simulations of globular clusters – II. Multimass models. Monthly Notices of the Royal Astronomical Society, 470, 2736–2761. 10.1093/mnras/stx1311
- Bianchini, P., van de Ven, G., Norris, M. A., Schinnerer, E., & Varri, A. L. (2016). A novel look at energy equipartition in globular clusters. Monthly Notices of the Royal Astronomical Society, 458, 3644–3654. 10.1093/mnras/stw552
- Binney, J., & Tremaine, S. (2008). Galactic Dynamics (2nd ed.). Princeton University Press. 10.1515/9781400828722
- Merritt, D. (1985). Spherical stellar systems with spheroidal velocity distributions. The Astronomical Journal, 90, 1027–1037. 10.1086/113810
- King, I. R. (1966). The structure of star clusters. III. Some simple dynamical models. The Astronomical Journal, 71, 64–75. 10.1086/109857