Earth
Wind builds dunes
Blow wind over a strip of desert sand in the evening light. The shear on the bed peaks a little upwind of every crest, the sand flux takes a saturation length to catch up with it, the flow separates behind each crest and the slip face avalanches at the angle of repose - so a small ripple on a flat sheet grows at exactly the rate the linear theory gives, and two dunes walk downwind at about the Bagnold speed q/H, blowing the sheet between them down to the rock. Calm the wind below the threshold and nothing moves; wet the sand to raise it; let the wind reverse for part of the year and the dunes stop marching; put a stone wall across the wind. The periodic strip keeps every grain.

What happens
A periodic strip of sand 256 m long in 512 cells. The bed shear is tau0 (1 + F^-1[(A|k| + iBk) h^]) with A = 3.2 and B = 0.3 over the envelope of the bed, each separation bubble filled to its 14° shadow line and the shear zero inside it. The saturated flux grows with the excess shear above the threshold (a tenth of sqrt(rho_s g d/rho), raised by moisture), the flux relaxes to it over 0.5 m exactly cell by cell and closed around the period, and never takes more than a cell holds above the rock. The bed follows Exner’s balance; slopes above 34° avalanche. Explicit steps of a thousandth of a year; one second is a year at time scale 1.
Try this
Grow dunes from a rippled sheet and compare the growth with the linear theory; watch two dunes walk; calm the wind below the threshold; wet the sand; let the wind reverse; put up the fence.
The model and its limits
A one-dimensional strip, a linear shear kernel with a geometric shadow line, a single grain size, no vegetation or crust. Rates are those of this idealized dune field.
Equations used in the module
Equations τ = τ0·(1 + IFFT[(A|k| + iBk)·FFT h]), τ = 0 in the separation bubble q_s = Q·(τ/τ0 − r)/(1 − r), r = (u*_t/u*)² l_s·dq/dx = q_s − q, ∂h/∂t = −∂q/∂x, slopes ≤ 34° σ(k) = Q·k²·(B − A·k·l_s)/((1 + (k·l_s)²)·(1 − r)), c ≈ q_crest/H


