This simulator couples Bagnold's saltation threshold to the Werner (1995) cellular dune model. A threshold friction velocity u*t is computed from grain diameter, particle and air density, and gravity (u*t = A·√((ρp−ρa)·g·d/ρa)), then scaled up by soil moisture. Once wind speed u* exceeds it, the transport rate Q = C·(u*³ − u*t³) sets how many sand slabs are lifted per step; each slab hops downwind, lands with a probability that depends on whether it hits sand or bare ground, and the bed avalanches wherever it steepens past the 34° angle of repose. Sand is only ever moved from one cell to another, never created — the total is invariant to machine precision.
A cross-section of a sand bed under a steady wind. Slabs are entrained from exposed cells, carried a hop length ℓ downwind (ℓ grows with u*² as Bagnold's saltation trajectory does), and deposited more readily on sand (p = 0.6) than on bare ground (p = 0.4). That single asymmetry is the dune-forming feedback: sand patches capture more sand, grow, cast a 15° lee shadow where deposition is certain, and steepen into slip faces held at the angle of repose. Real dunes emerge from a perfectly flat bed.
Drag Wind speed u* to change the friction velocity (it sets both the flux Q and the hop length), pick a Grain size to change the threshold u*t, raise Soil moisture to make grains cohere and resist erosion, and use Sand supply to move between isolated dunes on a starved, partly bare bed and continuous transverse ridges on a saturated one. Watch the Max lee slope readout: it saturates at 34° and never exceeds it.
Because Q depends on the cube of wind speed above threshold, even a small increase in u* once past u*t causes a disproportionately large jump in sand transport — which is exactly why deserts can look calm for days and then erupt into a full-blown sandstorm within minutes.
It is a classic aeolian transport formula stating that sand only moves once wind friction velocity u* exceeds a threshold u*t, and above that threshold the transport rate Q grows with the cube of the excess velocity (Q = C·(u*³ − u*t³)). This simulator uses that equation to decide when sand is entrained and how many slabs are in flight per step.
The threshold formula u*t = A·√((ρp−ρa)·g·d/ρa) scales with the square root of grain diameter d, so coarse 1.0 mm grains need noticeably stronger wind than fine 0.1 mm grains before saltation begins — heavier particles require more aerodynamic lift and drag to become airborne.
Moisture is applied as a multiplier on the threshold: u*t is scaled by (1 + moisture × 3), so even modest moisture percentages sharply raise the wind speed required before any transport occurs, mimicking how cohesive wet sand resists wind erosion in reality.
Saltation is shown as grains bouncing ballistically across the surface under gravity once wind exceeds the threshold; the "Mode" readout switches to Creep when u* is only just above u*t (below 1.5× threshold), representing coarser or barely-mobile grains rolling along the surface rather than leaping into the air.
It runs Werner's (1995) cellular dune algorithm. A slab of sand is picked up from a random unshadowed cell, transported a hop length downwind, and deposited with probability 0.6 if the landing cell already has sand but only 0.4 if it is bare — so sand accumulates where sand already is. Cells lying in the 15° lee shadow of an upwind crest trap every slab that reaches them, which builds the slip face, and any slope steeper than the 34° angle of repose avalanches back down. Because every event transfers a slab from one cell to another, the total amount of sand is exactly conserved.
Yes, to machine precision. Erosion, transport, deposition and avalanching are all implemented as transfers between two cells on a periodic transect, so the summed bed height is invariant; over 10,000 steps the relative drift stays at the level of floating-point round-off. The "Deflation depth" readout reports the actual deepest lowering of the bed below its initial level, rather than an independent accumulator that could disagree with the surface you see.
Because dry sand cannot hold a slope steeper than its angle of repose, about 34°. After every deposition the model checks each pair of neighbouring cells and, if the height difference implies a steeper slope, moves sand from the higher cell to the lower one until the slope is exactly at repose. That is why the slip faces you see all share one angle, exactly as real barchan and transverse dunes do.