The magnification factor ζ¶
The magnification factor ζ quantifies how much the cloud-integrated star formation rate (SFR) of a centrally-concentrated cloud exceeds that of a uniform-density (“top-hat”) cloud of the same total mass and outer radius. Parmentier & Pasquali (2020) introduced ζ as a compact way to fold the geometry of a molecular cloud into the dense-gas SFR-mass relation, extending earlier “single-mean-density” frameworks Tan et al., 2006Federrath & Klessen, 2012Burkhart, 2018.
This chapter gives the single integral definition of ζ, then derives and implements the three
computation modes that gravoturb exposes — each captures a different physical situation:
PP20 analytic ζ(p) — exact, closed-form, for a pure power-law profile.
Cored ζ — numerical, for a profile with a flat inner core (realistic molecular clouds).
Direct 3D ζ — parameter-free, measured directly from an arbitrary 3D density field.
Why ζ exists, and how it is defined¶
The local star formation rate per unit volume scales as , because the local free-fall time (the freefall-density factor). A cloud whose density field is not uniform therefore fragments faster in its high-density regions than its mean density would suggest — the cloud-integrated SFR is biased above the SFR a uniform cloud of the same mass would produce.
ζ is the ratio of these two SFRs, at fixed total mass and outer radius :
where is the cloud volume, is the volume-averaged density, and the top-hat reference is the SFR the same gas mass would produce if redistributed uniformly. By construction — a uniform cloud is its own top-hat reference. For ζ > 1 the cloud is “magnified”; centrally concentrated profiles always give ζ > 1, and the steeper the concentration, the larger ζ.
Mode 1 — PP20 analytic ζ(p) for a power-law profile¶
Consider a sphere of outer radius filled with a pure power-law profile
The upper bound is set by the convergence threshold of the SFR integrand — physically, is the singular isothermal sphere where the central density runs away. Five steps evaluate Equation analytically.
Step 1 — total mass.
Step 2 — mean density.
Step 3 — SFR integral.
The denominator in this step is the source of the divergence as .
Step 4 — top-hat reference.
Step 5 — combine. Dividing Step 3 by Step 4 collapses every and factor:
This is the canonical analytic form implemented in gravoturb.theory.dense_gas_sfr.magnification_factor.
Parmentier & Pasquali (2020) quote the same result in Eq. 6 as
where “2.6” is a numerical approximation to Equations
Equation and Equation therefore agree to 0.08% across the entire physical
domain. gravoturb uses the unrounded Equation form so that
anchor values are exact, and the exact constant is fixed by the physical top-hat lower limit
.
Spot values¶
These anchors are exact analytic values; tests/experimental/unit/test_pp20.py and AC3 lock them
(the AC suite prints them — see gravoturb/VALIDATION_SUMMARY.md). The ζ column is computed
directly with magnification_factor.
(canonical) | PP20 Eq. 6 (“2.6” rounded) | Comment | |
|---|---|---|---|
0 | 1 (exact) | 0.999 | Top-hat; reference value by construction |
1 | 1.0879 | SIS-like inner core | |
1.5 | 1.4132 | Exact analytic anchor | |
1.67 | 1.789 | 1.788 | Kainulainen et al. (2014) median observational for 16 nearby clouds |
1.9 | 4.441 | 4.437 | Approaching the singular isothermal limit |
1.95 | 8.282 | 8.276 | Deep in the near-singular regime |
The value is observational gold: Kainulainen et al. (2014) derived as the median radial slope inferred from the column-density PDFs of 16 nearby molecular clouds (Pipe, Lupus, Perseus, Aquila, Polaris, …). The corresponding is a useful sanity check for any PP20 implementation. ζ rises steeply toward (from at to at ) — the divergence the cored and direct-3D modes below regularise.
Implementation¶
The shipping function is exactly Equation — there is no clip and no P_MAX.
The analytic form is well-behaved over the entire physical window; the only singularity
is at (not at , despite earlier buggy docstrings — see the Historical note). Where
gradients near would destabilise an HMC chain, use the cored mode below, which stays
finite at all .
import jax.numpy as jnp
from jaxtyping import Array, Float
# Exact PP20 constant: 3^{3/2}/2 = 2.5980762... (PP20 Eq. 6 prints it rounded as 2.6).
_PP20_CONST = 3.0**1.5 / 2.0
def magnification_factor(p: Float[Array, ""]) -> Float[Array, ""]:
# zeta(p) = (3-p)^{3/2} / [ (3^{3/2}/2) (2-p) ]; valid 0 <= p < 2, diverges as p -> 2.
return (3.0 - p) ** 1.5 / (_PP20_CONST * (2.0 - p))The function is JIT-compatible, vectorisable via jax.vmap, and differentiable across the physical
domain. See the gravoturb.theory.dense_gas_sfr source for the full signature and
Cross-cutting physics tests for the regression suite that anchors every spot value
above.
Mode 2 — cored profiles: magnification_factor_with_core¶
The PP20 analytic ζ(p) assumes a pure power-law profile, which predicts infinite density at
. Real molecular clouds have flat inner cores — set by thermal pressure or magnetic
support — that transition to a power-law envelope outside some core radius . gravoturb’s
magnification_factor_with_core numerically integrates ζ for the cored profile
This profile is flat at (with ) and power-law at (with ), producing a finite central density without sacrificing the power-law outer slope that drives the gravitating-tail SFR. This matters for ζ in two ways:
At the pure power-law diverges as . The cored ζ stays finite because the flat inner core regularises the integral.
For inference, the cored form gives stable gradients at all — including where the pure form diverges — and exposes as a free parameter.
Substituting Equation into Equation, the result has no closed form for general
. gravoturb evaluates the integral numerically on a fixed (grad-safe) radial grid
and delegates the actual ratio to the direct estimator below — the constant volume factor
cancels in the ratio:
import jax.numpy as jnp
from jaxtyping import Array, Float
def magnification_factor_with_core(
p: Float[Array, ""],
r_c_over_R: Float[Array, ""],
n_nodes: int = 2048,
) -> Float[Array, ""]:
# Cored rho(r) = rho_c [1 + (r/r_c)^2]^{-p/2}, trapezoid over r/R in (0, 1].
x = jnp.linspace(1.0 / n_nodes, 1.0, n_nodes) # r/R in (0,1]
rho = (1.0 + (x / r_c_over_R) ** 2) ** (-p / 2.0) # rho / rho_c
w = x**2 # dV ~ r^2 dr (4*pi*R^3 cancels)
return zeta_from_field(rho, w)The output is differentiable in both and . As the profile approaches a pure
power law and ζ → the analytic magnification_factor; as (a core larger than the
cloud) it approaches a top-hat and ζ → 1.
Limiting behaviours¶
Limits of magnification_factor_with_core(p, r_c/R).
Limit | Behaviour | Recovers |
|---|---|---|
Pure power-law profile | Analytic from Mode 1 | |
Core comparable to cloud | approaching 1 (near-uniform); e.g. vs pure | |
const everywhere | ||
Singular isothermal at large | Large but finite ζ (core regularises) |
tests/experimental/unit/test_pp20.py and the AC4 direct-field check verify ζ convergence to the
analytic value at as .
Mode 3 — direct 3D ζ: zeta_from_field¶
The PP20 and cored modes both parameterise the cloud’s density profile. For inferences using
simulation snapshots or detailed observational density maps, that parameterisation throws away most
of the information in the data. zeta_from_field instead measures ζ directly from a sampled
density field and its volume weights:
This is exactly for cells of volume — the discrete form of Equation. The implementation is the shipping source verbatim:
import jax.numpy as jnp
from jaxtyping import Array, Float
def zeta_from_field(
rho: Float[Array, " n"], weights: Float[Array, " n"]
) -> Float[Array, ""]:
# zeta = sum(rho^{3/2} w) * sqrt(sum w) / (sum(rho w))^{3/2}. rho need not be normalized.
num = jnp.sum(rho**1.5 * weights) * jnp.sqrt(jnp.sum(weights))
den = jnp.sum(rho * weights) ** 1.5
return num / denrho is the flattened density field (any shape; need not be normalized) and weights the matching
per-cell volume element. For a uniform voxel grid the volume element cancels exactly between numerator
and denominator, so passing weights = ones_like(rho) gives the correct unitless ζ. This is the
estimator magnification_factor_with_core (Mode 2) delegates to, and the right tool for measuring ζ
from a 3D field with no parametric assumption.
Soft-mask weights for differentiable tail inference¶
A common use is to weight the field by a soft identification of the gravitating tail rather than its full volume. The natural “tail” definition — “everything above the transition density ” — is a hard step function, whose gradient is zero almost everywhere; inferring or any density-PDF parameter through it is impossible with autodiff. Replacing the step with a sigmoid in log-density,
gives a continuous, well-behaved gradient (the sigmoid derivative). Large approaches the hard threshold; small gives a smooth transition (a typical gives a transition width in ). This is the technical step that lets the inference layer infer and the PDF parameters from observed dense-gas structure:
import jax
import jax.numpy as jnp
from gravoturb.theory.density_pdf import sigma_s_squared, transition_density
from gravoturb.theory.dense_gas_sfr import zeta_from_field
# BM19 transition density is closed-form in (sigma_s, alpha)
sigma_s_sq = sigma_s_squared(10.0, 0.4)
s_t = transition_density(2.0, sigma_s_sq) # args: alpha, σ_s²
# soft tail weights via a sigmoid in log-density space
s = jnp.log(rho_grid.ravel() / jnp.mean(rho_grid))
collapse_weights = jax.nn.sigmoid(10.0 * (s - s_t))
# direct ζ over the soft-masked field
zeta_direct = zeta_from_field(rho_grid.ravel(), collapse_weights)In the full subsystem the density field and soft mask come from
gravoturb.realization.pipeline.build_turbulent_field (the AC6 cornerstone); the realized dense fraction is
gravoturb.realization.placement.f_tail_actual. The soft-mask reparameterisation of a discrete threshold is
the standard differentiable-programming technique; here it makes
analytic and HMC-compatible (see Differentiable inference — natal cloud parameters from cluster substructure).
Which ζ-mode when¶
Choosing among the three ζ computations.
Mode | Use when… | Cost / differentiability | Caveat |
|---|---|---|---|
PP20 analytic | You have a fitted power-law slope (most observational papers); idealised analysis; reproducing PP20 Eq. 6 | , analytic gradient in | Pure power-law only; diverges as |
Cored | Real cloud with a thermal/magnetic inner core; inference that may approach 2; a free parameter | trapezoid, grad-safe in and | Spherical, single core scale; stays finite at |
Direct 3D | You have a simulation snapshot or detailed map; substructure; itself a free parameter | sum, grad-safe through soft-mask weights | Assumes uniform voxels unless explicit |
For HMC-based inference of cloud parameters, all three are differentiable. The choice depends on the level of cloud parameterisation in the inference target: power-law fit → PP20; cored fit → cored; gridded field → direct 3D.
Historical note — the 2026-04-28 transcription fix¶
Implementation, validation & references¶
In code:
src/experimental/gravoturb/theory/dense_gas_sfr.py(magnification_factor,magnification_factor_with_core,zeta_from_field). This experimental subsystem is repo-only with no generated website API page; the module reference is the package source and itsVALIDATION_SUMMARY.md.Validated in: physics tests (the ζ spot-value regression suite) and gravoturbulent PP20; the AC3/AC4 acceptance checks lock the anchors.
Primary sources: ζ follows Parmentier & Pasquali (2020) directly; the integral definition Equation and the α↔p correspondence come from Tan et al. (2006), Federrath & Klessen (2012), and Kritsuk et al. (2011); the Kainulainen et al. (2014) observational anchor provides the check value; the cored profile Equation is a standard King (1966)-style generalisation, and the direct-3D soft-mask measurement is original to
gravoturb. Full notes in the bibliography. The Burkhart (2018)Burkhart & Mocz (2019) framework that consumes ζ is BM19 dense-gas SFR framework.
- Parmentier, G., & Pasquali, A. (2020). A new parameterization of the star formation rate–dense gas mass relation: Embracing gas density gradients. The Astrophysical Journal, 903, 56. 10.3847/1538-4357/abb8d3
- Tan, J. C., Krumholz, M. R., & McKee, C. F. (2006). Equilibrium star cluster formation. The Astrophysical Journal Letters, 641, L121–L124. 10.1086/504150
- Federrath, C., & Klessen, R. S. (2012). The star formation rate of turbulent magnetized clouds. The Astrophysical Journal, 761, 156. 10.1088/0004-637X/761/2/156
- Burkhart, B. (2018). The Star Formation Rate in the Gravoturbulent Interstellar Medium. The Astrophysical Journal, 863, 118. 10.3847/1538-4357/aad002
- Kainulainen, J., Federrath, C., & Henning, T. (2014). Unfolding the laws of star formation: The density distribution of molecular clouds. Science, 344, 183–185. 10.1126/science.1248724
- Kritsuk, A. G., Norman, M. L., & Wagner, R. (2011). On the density distribution in star-forming interstellar clouds. The Astrophysical Journal Letters, 727, L20. 10.1088/2041-8205/727/1/L20
- King, I. R. (1966). The structure of star clusters. III. Some simple dynamical models. The Astronomical Journal, 71, 64–75. 10.1086/109857
- Burkhart, B., & Mocz, P. (2019). The self-gravitating gas fraction and the critical density for star formation. The Astrophysical Journal, 879, 129. 10.3847/1538-4357/ab25ed