The method
Every mapping app shows you a wind arrow. None of them tell you how it was calculated, how far off it usually is, or when to ignore it. Here is all three.
A national weather model divides the country into cells about a mile and a half across. Inside one cell it reports a single wind. Your drainage does not exist to it.
That matters most at exactly the wrong time. Overnight, cold air sinks and drains downhill regardless of what the regional wind is doing. After sunrise the slope warms and the flow reverses and runs uphill. A hunter who plans an approach on the regional number and walks in at first light has been told something that is true of the county and false of the hillside.
The full derivation, including the equations, is in docs/design/15-thermals.md. Three constants are fitted against real observations rather than chosen — the surface’s response time, the flow’s strength, and the lag between the balance tipping and wind you can feel; everything else is geometry.
We measured this against real mountain weather stations rather than estimating it. Every figure below is reproducible from scripts in the repository.
When the flow reverses
| Our model (the flip you can feel) | ±75 min median error |
| Assuming it flips at sunrise | 306 min |
| Held-out stations (not used to fit) | 71 min |
53 observed reversals at 17 stations across Colorado, Wyoming and Montana, on clear days; the stations report hourly, which alone contributes ±30 minutes. Still more than an hour of honest uncertainty — which is why the app shows a window rather than a time.
Full disclosure: a constant offset from sunrise, fitted to the same data, ties our model on clear days (64 vs 65 min). The physics earns its keep where that shortcut has no mechanism — cloudy mornings, when weak heating pushes the flip later — and that case is not yet validated, because measuring it needs cloudy-day data we are still collecting.
A correction we shipped in August 2026
Earlier versions predicted the instant the slope’s thermal balance crossed zero and presented that as “the flip.” But a zero crossing is zero metres per second — invisible on your face. What you feel, and what stations measure, is the new flow actually establishing, and that runs about 2.5 hours behind the crossing. The app was calling the flip early by roughly that much, with full confidence. It now predicts the felt flip, and the error bars above are measured against exactly that event.
How strong the slope flow is
| Our model (daytime upslope) | 2.82 m/s median vector error |
| Assuming no slope flow at all | 2.98 m/s |
860 clear-day station-hours at 34 stations, comparing observations against the national model to isolate the slope component; the coefficient is fitted on the 343 daytime hours where the direction model is validated. A sunny 20° slope works out to roughly 3 mph of thermal — a modest, real push, not a gale.
An earlier version published a much larger win here (1.10 vs 2.46 m/s). That fit had a statistical flaw — it compared magnitudes, which cannot cancel noise — and overstated the flow’s strength about threefold. The numbers above are from the corrected fit, and the arrows in the app shrank to match.
Which way it blows — and the part we got wrong
| Within 90° | Median error | |
|---|---|---|
| Uphill flow (daytime) | 72% | 54° |
| Drainage (night) | 51% | 88° |
Night-time drainage direction is no better than a coin flip, and that is the opposite of what we expected. Cold air follows the drainage — steered by the shape of the valley — rather than the face you happen to be standing on. Steeper stations scored worse, which is what that explanation predicts.
So the app no longer states a drainage direction as fact. It tells you the slope is draining and roughly how hard, and says plainly that the compass direction is unreliable. The scent cone widens to match. We would rather lose the feature than have you trust it on a stalk.
Known and unmodelled. If you are in one of these situations, trust your face and your wind checker over this app.
A model you can check is worth more than one you have to believe. If we told you only the parts that work, you would eventually find a case where it failed and stop trusting all of it — which is the correct response to a tool that hid its limits.
The data is public — NOAA forecasts, NOAA weather stations, USGS elevation. The code and the calibration scripts that produced every number above are AGPL and go public with our source at launch; from that day, nothing here depends on taking our word for it. Until then, this page carries the numbers and the corrections we have had to make to them — dated, with what was wrong — which is the standard we intend to be held to.
Weather data courtesy of NOAA/National Weather Service. Elevation from USGS 3DEP. Our derived products are modified from those sources and are not endorsed by either agency. Back to the map →