Skip to content

Concepts

A one-page primer on the turbulence quantities pyturb uses. All are properties of an Atmosphere (atm.r0, atm.theta0, …) and free functions in pyturb/pyturb.profiles.

Cn²(h) — the turbulence profile

The refractive-index structure constant Cn² as a function of altitude h says how much turbulence sits at each height. A profile is this integrated into layers: a list of Layers, each carrying a fraction of the total Cn² dh, an altitude, a wind vector, and an outer scale. pyturb ships named profiles (paranal-median, keck, …) and builds custom ones from a continuous model with discretize_cn2 (moment-conserving by default).

r0 — the Fried parameter

r0 is the aperture over which the wavefront stays roughly flat (~1 rad² of phase variance). Smaller r0 = worse seeing. It is wavelength dependent, r0 ∝ λ^{6/5}, so it is always quoted at a reference wavelength (500 nm by default). The layers combine as r0^{-5/3} = Σ r0_i^{-5/3}.

seeing

The atmospheric PSF width, seeing ≈ 0.98 λ / r0 [rad]. pyturb converts between the two (r0_from_seeing, seeing_from_r0); Atmosphere takes either.

L0 — the outer scale

The largest turbulent scale (tens of metres). Finite L0 (von Kármán) caps the low-frequency power that pure Kolmogorov (L0=inf) would let diverge, which matters for tip/tilt and for the total wavefront variance 0.0863 (L0/r0)^{5/3}.

θ0 — the isoplanatic angle

The angle over which the wavefront stays correlated: correcting on-axis still helps a source within θ0. Set by the Cn²·h^{5/3} moment, θ0 = 0.314 r0 / h̄. Two directions separated by θ0 differ by ~1 rad² of wavefront error — see Validation.

τ0 — the coherence time

How long the wavefront stays correlated as the wind blows, τ0 = 0.314 r0 / v̄, set by the Cn²·v^{5/3} moment. The Greenwood frequency f_G = 0.134 / τ0 is the AO loop bandwidth you need to keep up.

OPD vs phase

pyturb's native output is optical path difference in metres, which is achromatic (a path length). Phase at a wavelength is φ = 2π·OPD/λ. This decouples the atmosphere from the sensing/science band; pass wavelength= to get phase. (For the small ~1–2% chromatic term from air dispersion, see dispersion="edlen" for dry air, or dispersion="ciddor" with a wet_fraction to add the water-vapour term that matters in the mid-IR and for interferometry — the "wet–dry" problem.)

Frozen flow (Taylor hypothesis)

Turbulence is assumed to blow across the pupil frozen in shape at the layer's wind velocity, so evolution in time is translation in space. pyturb offers two engines for this — a fast periodic spectral one and an unbounded extruder — plus optional boiling (tau_boil) for the residual non-frozen decorrelation.