Back to our work

Experiment

Utah Wind & Smoke

Where does it go once it’s in the air?

Wildfires, burn piles, refineries, power plants, and the new wave of data centers with their own gas generation. Emissions start in one place and end up somewhere else. We wanted to see how they move around the state, so we built a simulator of Utah’s wind on Utah’s real terrain, and put it online for anyone to use.

Launch the simulator

Free, no account. Works on desktop and phone.

3D terrain map of Utah with white flow lines tracing the live wind forecast across mountains and valleys.
terrain detail, from USGS elevation data
157 m
layers of atmosphere, ground to 5.6 km
16
of forecast wind, or any date since 2022
16 days
servers. It all runs in your browser
0

The question

Utah’s air doesn’t move in straight lines.

Emissions released anywhere in Utah are steered by ranges, canyons and valley floors. Smoke from one county can drain into the next. On winter nights a lid of warm air can sit over the valleys and hold everything beneath it in place for days, far from where it started.

A wind rose from one weather station cannot show that. We needed the actual terrain, the actual weather, and the physics that ties them together. The project started with a local question, where the exhaust from a large data center’s on-site gas plant in Iron County would end up, and grew into a tool for any source: put smoke anywhere in the state, choose a forecast day or a past date, and watch which towns it reaches and how many hours it takes to get there.

What it does

See the air move.

Thousands of flow lines trace the wind over every ridge and valley in the state. Drop smoke anywhere and the model carries it with real weather over real ground.

01

Real weather

Live mode blends the National Weather Service forecast with dozens of airport wind observations near the ground and NOAA HRRR winds aloft. Step forward through the forecast, about 7 days from NWS and out to 16 days with NOAA GFS, or replay any date since 2022 from archived model and airport winds. A manual mode lets you set the wind yourself.

3D map of Utah coloured by wind speed, from blue for calm to purple for strong, with flow lines over the terrain.

02

Who gets smoke, and when

Drop up to 16 colour-coded sources anywhere on the map, as a continuous plume or a single puff, and tune emission, source size, plume rise up to 4 km, and lifetime up to 72 hours. A live list shows which towns the smoke reaches at ground level and how many hours after release.

Controls panel showing the simulation settings and a list of towns where smoke reaches the ground, with arrival times.

03

Every control in one panel

Wind source, mixing height, day-time heating or night-time cooling, turbulence, and smoke settings sit beside the map. Hover anywhere for elevation, wind speed and direction, mixed-layer depth, and smoke at the ground and aloft. Switch between a flat 2D map and tilted 3D terrain, search for a city, and toggle roads, stations and forecast arrows.

The app with its controls panel open beside a 2D map of Utah.

The model

Terrain decides where the air goes.

The air follows the land

Elevation for all of Utah and its edges comes from USGS 3DEP data at about 157 m resolution. The atmosphere is a grid of 16 terrain-following layers, about 40 m thick near the ground, so air rises over ridges, sinks in their lee, and squeezes faster through gaps and canyons.

Mass is conserved

Every step, the wind field is corrected so air is never created or destroyed. That one rule is what makes flow speed up through a narrow pass, pile up against a range, and pour around a mountain instead of through it.

Inversions trap what is below them

The mixing height, the lid of warm air that caps the valley, comes from the forecast or is set by hand. Smoke released under the lid tends to stay under it, and ridges that poke through the lid act as walls.

Day and night behave differently

Daytime heating drives air up the slopes. At night the ground cools, and cold air drains downhill and pools in the valleys, carrying whatever it holds with it.

Proving the physics

Smoke doesn’t have to start in a valley to end up there.

Before trusting it with real questions, we checked the model against something every Wasatch Front resident knows: a winter inversion. In this constructed example, a warm lid sits about 450 m above the valley floor and a light breeze drifts up from the south. Smoke released at Tooele, Provo and Nephi cannot rise through the lid, so it follows the valleys, and by the end of the first day the Salt Lake Valley is filled wall to wall.

Map of the Wasatch Front with three small smoke sources: orange at Tooele, purple at Provo and teal at Nephi.
Release. Smoke starts at Tooele, Provo and Nephi under a shallow inversion.
Purple smoke flowing north from Utah Valley through the gap at Draper and Lehi into the Salt Lake Valley.
12 hours. Smoke pours through the Point of the Mountain into Salt Lake County.
The Salt Lake Valley filled with smoke from Sandy to North Salt Lake, bounded by the Oquirrh and Wasatch mountains.
24 hours. The Salt Lake Valley is full. Ground-level smoke downtown reads heavy.
3D view looking north up the Wasatch Front, with smoke filling the valleys from Nephi to Salt Lake City between mountain ranges.

Settings: Manual wind from 170° at 2 m/s, mixing height 1,750 m, night-time cooling 0.70, continuous plumes, 72 h lifetime. An illustration of a typical inversion, not a replay of a specific day.

How it was built

A weather model in a web page.

The whole thing is a static site. The heavy lifting happens on the visitor’s own graphics card, and the weather comes straight from public government feeds.

JavaScriptWebGL2GLSL shadersComputational fluid dynamicsPythonNumPyNWS APINOAA HRRR / GFSUSGS 3DEPPlaywright

01

A fluid solver on the graphics card

The simulation runs as WebGL2 shaders on the visitor’s GPU. Wind and smoke are moved with a second-order semi-Lagrangian scheme, a pressure-style projection keeps the flow mass-conserving, vertical mixing is solved implicitly so it stays stable at large time steps, and vorticity confinement restores the small eddies that coarse grids smear away. One second on screen is roughly one to two hours of simulated time.

02

Weather straight from the source

The browser calls the National Weather Service API, Open-Meteo’s NOAA HRRR and GFS feeds, and the Iowa Environmental Mesonet directly. A one-time Python job maps the grid to NWS forecast points and airport stations, so there is no backend, no API key, and nothing to keep running.

03

Terrain prepared once, offline

A Python build step downloads elevation tiles, stitches them into one grid covering Utah plus a margin, so terrain upwind of the border still shapes the wind coming in, and packs it into a compact binary file. It joins US Census place data so the map knows every town and its population.

04

Fast enough for a phone

Grid resolution can be set from about 2.2 km to 1.25 km cells to trade detail for speed. Thousands of animated flow lines trace the wind, and the layout switches to a bottom sheet on phones. Keyboard shortcuts cover the desktop.

Try it yourself.

Search for a town, choose Place smoke, and click where the emissions start. Then step through the forecast and watch which towns show up in the arrivals list. Needs a browser with WebGL2, which every current desktop and phone browser has.

Open utah-wind.cedarwebservice.com

Data and credits

  • Weather: National Weather Service API (forecast and station observations)
  • Winds aloft and history: NOAA HRRR and GFS via Open-Meteo
  • Past station winds: Iowa Environmental Mesonet
  • Elevation: USGS 3DEP, via AWS Terrain Tiles
  • Roads: Esri, HERE, Garmin, © OpenStreetMap contributors

Please note

Utah Wind & Smoke is a simplified illustration of airflow and smoke transport, not an official smoke or air-quality forecast, and it is not endorsed by NWS, NOAA or USGS. It tracks where emissions travel, not their chemistry or health effects. For health decisions, check the Utah Division of Air Quality and AirNow.

Have a question your data can’t answer yet?

Maps, models, live public data, and interactive tools that make a hard question easy to see. If you need one built, we would like to hear about it.

Start a conversation