The 3D version of this sim shows a side-on cross-section (height vs. downwind distance); its crosswind axis is a fixed, purely cosmetic jitter with no physics attached to it. This 2D version is a genuinely different computation and a genuinely different representation: a top-down isopach map (downwind distance × crosswind offset), the same view volcanologists actually draw in the field. It reuses the real gravity-drag fall physics and wind shear, but adds real crosswind physics that the 3D scene never modelled:
Same as 3D: terminal velocity from gravity/drag balance,
v_t = sqrt(4 ρp g d / (3 Cd ρa)), Cd(Re) intermediate drag law,
ρa(y) = ρ0 e^(−y/8500m) exponential atmosphere,
wind(y) = U·(0.35 + 0.65·sqrt(y/H)) altitude shear profile.
New in this 2D map: turbulent crosswind diffusion.
Each clast's lateral position is a Wiener process:
Δy = randn() · sqrt(2·K·Δt), K = 40 m²/s eddy diffusivity
which makes the ensemble's crosswind spread grow as the
classic Gaussian-plume law: σ_y(t) = sqrt(2·K·t)
— independent of the time-step used, and verified numerically
against a Monte-Carlo random walk (see verification script).
Because fine ash stays airborne far longer than coarse lapilli (its terminal velocity is far smaller), it accumulates far more diffusion time — its plume half-width σ_y is verified to grow with time-of-flight, so the deposit fan is narrow close to the vent (coarse, short flight) and fans out wide far downwind (fine, long flight): exactly the wedge-shaped isopach/isopleth pattern seen in real tephra fall maps, but here it emerges from the particle physics rather than being drawn in. Both axes are square-root compressed so a map spanning meters near the vent and hundreds of kilometres downwind fits on one screen without hiding the near-vent detail.