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.

The magnification factor ζ — three ways to compute it

San Diego State University

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:

Why ζ exists, and how it is defined

The local star formation rate per unit volume scales as ρ˙ρ/tff(ρ)ρ3/2\dot\rho_\star \propto \rho / t_{\mathrm{ff}}(\rho) \propto \rho^{3/2}, because the local free-fall time tffρ1/2t_{\mathrm{ff}} \propto \rho^{-1/2} (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 MM and outer radius RR:

ζ    SFRclumpSFRTH  =  VRρ3/2dVMρ  =  ρ1/2massρ1/2\zeta \;\equiv\; \frac{\mathrm{SFR}_{\mathrm{clump}}}{\mathrm{SFR}_{\mathrm{TH}}} \;=\; \frac{\int_{V_R} \rho^{3/2}\,\mathrm{d}V}{M\,\sqrt{\langle\rho\rangle}} \;=\; \frac{\langle\rho^{1/2}\rangle_{\mathrm{mass}}}{\langle\rho\rangle^{1/2}}

where VRV_R is the cloud volume, ρ=M/VR\langle\rho\rangle = M/V_R is the volume-averaged density, and the top-hat reference SFRTHM/tff(ρ)Mρ\mathrm{SFR}_{\mathrm{TH}} \propto M / t_{\mathrm{ff}}(\langle\rho\rangle) \propto M \sqrt{\langle\rho\rangle} is the SFR the same gas mass would produce if redistributed uniformly. By construction ζ(ρ=const)=1\zeta(\rho = \mathrm{const}) = 1 — 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 RR filled with a pure power-law profile

ρ(r)  =  ρR(rR)p,0p<2.\rho(r) \;=\; \rho_R \left(\frac{r}{R}\right)^{-p}, \qquad 0 \le p < 2.

The upper bound p<2p < 2 is set by the convergence threshold of the SFR integrand r23p/2dr\int r^{2-3p/2}\,\mathrm{d}r — physically, p=2p = 2 is the singular isothermal sphere where the central density runs away. Five steps evaluate Equation analytically.

Step 1 — total mass.

M  =  4πρRRp0Rr2pdr  =  4πρRR33p(p<3).M \;=\; 4\pi\,\rho_R\, R^{p} \int_0^R r^{2-p}\,\mathrm{d}r \;=\; \frac{4\pi\,\rho_R\, R^3}{3-p} \qquad (p < 3).

Step 2 — mean density.

ρ  =  M(4/3)πR3  =  3ρR3p.\langle\rho\rangle \;=\; \frac{M}{(4/3)\pi R^3} \;=\; \frac{3\,\rho_R}{3-p}.

Step 3 — SFR integral.

ρ3/2dV  =  4πρR3/2R3p/20Rr23p/2dr  =  8πρR3/2R33(2p).\int \rho^{3/2}\,\mathrm{d}V \;=\; 4\pi\,\rho_R^{3/2}\, R^{3p/2} \int_0^R r^{2-3p/2}\,\mathrm{d}r \;=\; \frac{8\pi\,\rho_R^{3/2}\, R^3}{3\,(2-p)}.

The denominator (2p)(2-p) in this step is the source of the ζ\zeta \to \infty divergence as p2p \to 2.

Step 4 — top-hat reference.

Mρ1/2  =  4π3ρR3/2R3(3p)3/2.M\,\langle\rho\rangle^{1/2} \;=\; \frac{4\pi\sqrt{3}\,\rho_R^{3/2}\, R^3}{(3-p)^{3/2}}.

Step 5 — combine. Dividing Step 3 by Step 4 collapses every ρR\rho_R and RR factor:

  ζ(p)  =  2(3p)3/233/2(2p)  =  (3p)3/2(33/2/2)(2p)  \boxed{\;\zeta(p) \;=\; \frac{2\,(3-p)^{3/2}}{3^{3/2}\,(2-p)} \;=\; \frac{(3-p)^{3/2}}{(3^{3/2}/2)\,(2-p)}\;}

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

ζ(p)  =  (3p)3/22.6(2p),\zeta(p) \;=\; \frac{(3-p)^{3/2}}{2.6\,(2-p)},

where “2.6” is a numerical approximation to 33/2/2=2.5983^{3/2}/2 = 2.598\ldots Equations Equation and Equation therefore agree to 0.08% across the entire physical 0p<20 \le p < 2 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 ζ(0)=1\zeta(0) = 1.

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.

pp

ζ(p)\zeta(p) (canonical)

PP20 Eq. 6 (“2.6” rounded)

Comment

0

1 (exact)

0.999

Top-hat; reference value by construction

1

223/2/33/21.08872 \cdot 2^{3/2}/3^{3/2} \approx 1.0887

1.0879

SIS-like inner core

1.5

21.4142\sqrt{2} \approx 1.4142

1.4132

Exact analytic anchor

1.67

1.789

1.788

Kainulainen et al. (2014) median observational pp 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 p=1.67p = 1.67 value is observational gold: Kainulainen et al. (2014) derived p5/3p \approx 5/3 as the median radial slope inferred from the column-density PDFs of 16 nearby molecular clouds (Pipe, Lupus, Perseus, Aquila, Polaris, …). The corresponding ζ1.79\zeta \approx 1.79 is a useful sanity check for any PP20 implementation. ζ rises steeply toward p=2p = 2 (from 4.44\approx 4.44 at p=1.9p = 1.9 to 8.28\approx 8.28 at p=1.95p = 1.95) — the divergence the cored and direct-3D modes below regularise.

Implementation

The shipping function is exactly Equationthere is no clip and no P_MAX. The analytic form is well-behaved over the entire physical 0p<20 \le p < 2 window; the only singularity is at p=2p = 2 (not at p=1.3p = 1.3, despite earlier buggy docstrings — see the Historical note). Where gradients near p2p \to 2 would destabilise an HMC chain, use the cored mode below, which stays finite at all pp.

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 r=0r = 0. 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 rcr_c. gravoturb’s magnification_factor_with_core numerically integrates ζ for the cored profile

ρ(r)  =  ρc[1+(r/rc)2]p/2\rho(r) \;=\; \frac{\rho_c}{\bigl[\,1 + (r/r_c)^2\,\bigr]^{p/2}}

This profile is flat at rrcr \ll r_c (with ρρc\rho \to \rho_c) and power-law at rrcr \gg r_c (with ρrp\rho \propto r^{-p}), producing a finite central density without sacrificing the power-law outer slope that drives the gravitating-tail SFR. This matters for ζ in two ways:

  1. At p2p \to 2 the pure power-law ζ\zeta diverges as 1/(2p)1/(2-p). The cored ζ stays finite because the flat inner core regularises the ρ3/2dV\int \rho^{3/2}\,\mathrm{d}V integral.

  2. For inference, the cored form gives stable gradients at all pp — including p2p \to 2 where the pure form diverges — and exposes rc/Rr_c/R as a free parameter.

Substituting Equation into Equation, the result has no closed form for general (p,rc/R)(p, r_c/R). gravoturb evaluates the integral numerically on a fixed (grad-safe) radial grid and delegates the actual ratio to the direct estimator below — the constant 4πR34\pi R^3 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 pp and rc/Rr_c/R. As rc/R0r_c/R \to 0 the profile approaches a pure power law and ζ → the analytic magnification_factor; as rc/Rr_c/R \to \infty (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

rc/R0r_c/R \to 0

Pure power-law profile

Analytic ζ(p)\zeta(p) from Mode 1

rc/R1r_c/R \to 1

Core comparable to cloud

ζ\zeta approaching 1 (near-uniform); e.g. ζ(1.5,0.1)1.19\zeta(1.5, 0.1) \approx 1.19 vs pure 21.41\sqrt 2 \approx 1.41

p0p \to 0

ρ\rho \to const everywhere

ζ=1\zeta = 1

p2p \to 2

Singular isothermal at large rr

Large but finite ζ (core regularises)

tests/experimental/unit/test_pp20.py and the AC4 direct-field check verify ζ convergence to the analytic value at p{0.5,1.0,1.5}p \in \{0.5, 1.0, 1.5\} as rc/R0r_c/R \to 0.

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:

ζFDF  =  iρi3/2wi(iwi)1/2(iρiwi)3/2\zeta_{\mathrm{FDF}} \;=\; \frac{\sum_{i} \rho_i^{3/2}\,w_i \,\bigl(\sum_i w_i\bigr)^{1/2}} {\bigl(\sum_i \rho_i\,w_i\bigr)^{3/2}}

This is exactly ρ1/2mass/ρ1/2\langle\rho^{1/2}\rangle_{\mathrm{mass}}/\langle\rho\rangle^{1/2} for cells of volume wiw_i — 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 / den

rho 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 ρt\rho_t” — is a hard step function, whose gradient is zero almost everywhere; inferring ρt\rho_t or any density-PDF parameter through it is impossible with autodiff. Replacing the step with a sigmoid in log-density,

w(x)  =  11+exp[κ(s(x)st)],s=ln(ρ/ρ),w(\mathbf{x}) \;=\; \frac{1}{1 + \exp\bigl[-\kappa\,(s(\mathbf{x}) - s_t)\bigr]}, \qquad s = \ln(\rho/\langle\rho\rangle),

gives a continuous, well-behaved gradient w/s\partial w/\partial s (the sigmoid derivative). Large κ\kappa approaches the hard threshold; small κ\kappa gives a smooth transition (a typical κ10\kappa \sim 10 gives a transition width 0.1\sim 0.1 in ss). This is the technical step that lets the inference layer infer sts_t 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 ζ/st\partial\zeta/\partial s_t 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 magnification_factor(p)

You have a fitted power-law slope pp (most observational papers); idealised analysis; reproducing PP20 Eq. 6

O(1)\mathcal{O}(1), analytic gradient in pp

Pure power-law only; diverges as p2p \to 2

Cored magnification_factor_with_core(p, r_c/R)

Real cloud with a thermal/magnetic inner core; pp inference that may approach 2; rc/Rr_c/R a free parameter

O(nnodes)\mathcal{O}(n_{\mathrm{nodes}}) trapezoid, grad-safe in pp and rc/Rr_c/R

Spherical, single core scale; stays finite at p2p \to 2

Direct 3D zeta_from_field(rho, w)

You have a simulation snapshot or detailed map; substructure; sts_t itself a free parameter

O(Ncells)\mathcal{O}(N_{\mathrm{cells}}) sum, grad-safe through soft-mask weights

Assumes uniform voxels unless explicit w given; needs a non-empty field

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

References
  1. 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
  2. Tan, J. C., Krumholz, M. R., & McKee, C. F. (2006). Equilibrium star cluster formation. The Astrophysical Journal Letters, 641, L121–L124. 10.1086/504150
  3. 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
  4. Burkhart, B. (2018). The Star Formation Rate in the Gravoturbulent Interstellar Medium. The Astrophysical Journal, 863, 118. 10.3847/1538-4357/aad002
  5. 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
  6. 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
  7. King, I. R. (1966). The structure of star clusters. III. Some simple dynamical models. The Astronomical Journal, 71, 64–75. 10.1086/109857
  8. 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