This is a top-down view of an advancing dust wall, not a well-mixed cloud. The domain is split into cells along the wind direction, and each cell carries its own dust concentration that advects downwind cell-by-cell every step — so the storm has to physically travel across the map before it reaches the viewer, exactly like a real haboob gust front.
Lift-off is not a single on/off switch: three grain-size classes (fine dust, medium sand, coarse sand) each have their own Bagnold threshold friction velocity u*t = A·√((ρₛ−ρₐ)/ρₐ·g·d) — fine grains dislodge first at low wind, coarse grains only join once the wind is much stronger, which is why the storm visibly changes texture and color as it intensifies.
- Friction velocity comes from the log wind profile, u* = κU / ln(z/z₀), same as a real anemometer-to-surface-stress conversion.
- Each active grain class injects mass into its home cell at a rate following Bagnold's cube law, Q ∝ u*³, weighted by how far u* is past that class's own threshold.
- Cells exchange mass by simple downwind advection (a moving-window shift scaled by wind speed) plus a settling loss term — so the wall's leading edge sharpens with stronger wind and decays behind a lull.
Once the front reaches the viewer's cell, its concentration feeds the same Koschmieder relation, V = 3.9/b_ext, used for real fog and haze forecasting, converting extinction directly into the visibility distance shown in the readout.