HRRR Wind and Solar Generation Forecasts
A live wind generation forecast for the United States, driven by NOAA's High-Resolution Rapid Refresh (HRRR) model. Every six hours, when a new HRRR extended cycle becomes available, the pipeline samples 80-meter winds at every utility-scale wind turbine in the country, applies model-specific power curves to each, and aggregates to ISO and balancing-authority totals.
The three charts below show the same forecast at three scales: aggregated 48-hour ISO totals, a 14-day rolling comparison against actual generation, and a plant-by-plant interactive map.
48-Hour US Wind Generation Forecast
Wind power forecast aggregated by ISO and balancing authority, updated four times daily after each extended HRRR cycle. The dropdown lets you switch between regions or view the national total.
How it's built: The pipeline starts from the USGS Wind Turbine Database (~75,000 turbines with coordinates, hub heights, rotor diameters, and manufacturer/model strings). For each turbine, HRRR's 10-meter and 80-meter U and V wind components are sampled at the turbine's exact lat/lon. The 10m and 80m winds are used to fit a per-turbine, per-hour power-law shear exponent (alpha = ln(ws80/ws10) / ln(8)), which captures HRRR's resolved boundary-layer stability — high alpha (~0.3–0.5) on stable nights, low alpha (~0.10–0.15) during well-mixed afternoons. That fitted shear is then used to extrapolate to each turbine's hub height. Air density is computed from HRRR's surface temperature and pressure and used to apply an IEC 61400-12 density correction.
Power curves come from three tiers: a curated registry of OEM curves digitized from manufacturer datasheets (covers ~45% of US capacity, including the GE 2.x-127, GE 3.6-154, Vestas V100-V110, and Siemens SWT families), the windpowerlib oedb catalog (Vestas V126, Nordex N131, etc.), and 12 specific-power-binned NREL generic curves as a fallback. A 16% global loss factor (NREL ATB benchmark) accounts for wake, electrical, and availability losses across the fleet. The forecast represents potential deliverable generation; observed output is typically lower due to curtailment and outages not modeled here.
Plant-Level Forecast Map
Every utility-scale wind plant in the lower 48 (≥5 MW, ~700 plants) plotted on a map, colored by forecast capacity factor and sized by nameplate. The slider at the bottom steps through the 48-hour forecast horizon; press play to animate.
How to use it: Hover any plant for its name, current MW output, capacity factor, balancing authority, and turbine count. Click a plant to see its full 48-hour time series in the panel below the map, including gross and net MW, hub-height wind speed, and air density. Scroll or pinch to zoom; drag to pan.
How it's built: Each forecast cycle aggregates the per-turbine output to the plant level (weighted-mean wind speed and density per plant, summed MW). The map data is built into a self-contained HTML file with all per-plant time series embedded as JSON, so the click handler works without server round-trips. Useful for spotting regional ramps, identifying which plants drive ISO totals, and seeing how a weather pattern plays across the fleet.
HRRR Solar Generation Forecast
48-hour solar power forecast for the six largest US generation regions, derived from NOAA's HRRR (High-Resolution Rapid Refresh) numerical weather prediction model. Shows total MW output per region for each forecast hour. Updated four times daily at the 00, 06, 12, and 18Z HRRR extended cycles.
What you're looking at: Six panels, one per region. The amber line is forecast solar generation; the dashed gray line is total installed nameplate AC capacity. Solar output follows a strong diurnal cycle — zero overnight, peaks at local midday. Cloudy days produce visible dips even at peak hours.
How it's built: The pipeline starts from the USGS US Large-Scale Photovoltaic Database (~6,500 utility-scale plants ≥1 MW with coordinates, capacity, tracking type, and tilt/azimuth). For each plant, HRRR's downward shortwave radiation (DSWRF), beam (VBDSF) and diffuse (VDDSF) components, and 2-meter air temperature are sampled at the plant's location. Sun position is computed from latitude/longitude/UTC time. For single-axis tracking plants (73% of the US fleet by capacity), pvlib computes the tracker rotation angle that points the panels toward the sun, including backtracking when the sun is low. Plane-of-array irradiance is calculated using HRRR's actual beam/diffuse split (no empirical decomposition). Cell temperature is computed from air temperature plus heating from absorbed irradiance, then a temperature derate is applied to DC power output. Finally, AC power is computed with inverter efficiency and clipping at the AC nameplate.
Plant-Level Solar Forecast Map
Every utility-scale solar plant in the lower 48 (≥5 MW, ~6,200 plants) plotted on a map, colored by forecast capacity factor and sized by nameplate AC capacity. The slider at the bottom steps through the 48-hour forecast horizon; press play to animate.
How to use it: Hover any plant for its name, current MW output, capacity factor, state, and tracking type. Click a plant to see its full 48-hour time series in the panel below the map. Scroll or pinch to zoom; drag to pan. The animation shows the diurnal dawn-to-dusk sweep across the country.
How it's built: Each forecast cycle computes per-plant AC power using the same physics chain as the regional chart above — sun position, tracker geometry, plane-of-array irradiance, temperature derate, and inverter clipping. The map embeds all per-plant time series as JSON, so clicks render the time-series chart instantly with no server round-trip. Useful for spotting how cloud cover patterns affect individual plants, comparing tracking vs fixed-tilt design choices, and watching the sun sweep across the continent.
About this project
This forecasting pipeline was designed and built collaboratively with Anthropic's Claude. The methodology choices, edge-case handling, and engineering decisions came out of long working sessions debugging real verification data, tracking down obscure USWTDB quirks (offshore plants without state codes, newly-built wind farms missing EIA IDs, multi-phase repowers sharing single plant codes), and iterating on the physics — curve assignment hierarchies, density correction, hub-height shear, BA-mapping fallbacks.
Claude wrote most of the Python; I provided the meteorological judgment, the operational priorities, and the verification feedback. The result is a working production pipeline that runs four times daily, archives its own performance, and surfaces its own limitations rather than hiding them.
The full source is on GitHub.