Version history and release notes
v0.4.0 — 17 October 2026¶
The feature release. More than 80 WRF 4.7.1 physics options run on the GPU (microphysics, cumulus, boundary layer, surface layer, land and radiation), together with analysis, spectral, surface and observation nudging, digital filter initialization, two-way nesting, lake, urban and ocean models, wind farms, passive tracers and stochastic physics. New tools set up a forecast for your own region from open GFS data, compute weather and application products, verify against stations, run ensembles, export to NetCDF, Zarr or GRIB2, choose physics for a region and cycle land and snow state.
66 configurations passed 24-hour comparisons with the original CPU-WRF (Goddard radiation: six hours), and the default physics passed on five real cases. These comparisons also found and fixed many errors in how WRF schemes were called. An NVIDIA Ampere or newer GPU is required. The large microphysics lookup tables are not yet uploaded to the GitHub release. Release notes · Validation report · Support matrix · Upgrade notes.
v0.3.4 — 10 October 2026¶
Fix release. gpuwrf run now uses or refuses every namelist physics option; v0.3.3 and
earlier silently ran the default schemes when a different one was requested, so re-run such forecasts.
Several schemes became available as experimental options. The default compiled program is unchanged; the
first run recompiles once because the cache is tied to the version.
Release notes ·
Support matrix.
v0.3.3 — 9 October 2026¶
Faster native Noah-MP radiation, corrected GPU memory layouts, Thompson snow fall speeds and stability safeguards for small grids. Seven 72-hour forecasts and the 24-hour Swiss case were compared with the original CPU-WRF; fields that went over their limits late in long runs are shown on the validation page. Release notes · 72-hour comparison plots.
Earlier releases¶
v0.3.2 — layout and startup (2026-10-05)¶
Stable nested layout pin, accepted momentum fusion, lazy dormant-scheme initialization and path-independent auxiliary caches. Matched 24-hour wall time falls 9.9% (3.669 to 3.305 s/hour under contention). N=4 × 24 h aggregate is 5.507 s/case-hour, 22.4× the CPU-WRF 3×4-core rate, including init/load and without compression. The two-domain Canary case is bit-identical to v0.3.1; the inner Tenerife domains differ at rounding level and pass the limits (innermost surface pressure 8.66 Pa versus 4.49 Pa, limit 120 Pa). Measurements and independent release verdict.
v0.3.1 — WRF-order fixes and performance (2026-10-05)¶
Open-top and per-record boundary-mass fixes, WRF edge-wind order, Andreas snow surface exchange, nested initial-state blending, thin-snow/ground-precipitation and warm-ice corrections, water/glacier history parity. the blocked acoustic vertical-velocity solver and Noah-MP column kernels are defaults; warm admission and three-nest memory planning are repaired.
Measured Canary 24-hour rate: 3.604 s/forecast hour (RTX 5090, AMD Ryzen 9 9950X), versus v0.3.0 4.126. Original CPU-WRF twelve-core reference: 92.3 s/hour. The Swiss January comparison and strict output checks pass all 25 frames in each domain. Evidence, clocks and limits.
A release-by-release summary. stability > identity is the top
priority, but a proven correctness repair may intentionally change results and require a
rebaseline, as v0.23.4 and v0.3.0 do. Full per-release notes live in the
release_notes/ folder of the repository.
Byte-identical = same compiled program, bit-for-bit output vs the prior release. Numerically equivalent = value-preserving change to the program (proven CPU bit-identical + within the GPU autotune floor). New capability is almost always opt-in and inert by default.
v0.3.0 — fused fp32 GPU kernels by default (historical)¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.3.0 | GPU rewrite of the hot path: fused fp32 dynamics, acoustics and column-physics kernels are on by default; WRF's DOUBLE precision islands stay double. On an RTX 5090: two-domain Canary 22.4× faster than CPU-WRF on 12 cores; four three-domain Tenerife forecasts on one GPU 12.75× CPU-WRF's throughput. WRF-order fixes to snow, water and albedo updates; full WRF history by default. Release gate: 6 Tenerife cases × 3 domains × 24 h, 0 limit failures. | Changed (fp32 default + WRF-order fixes; revalidated against CPU-WRF) |
v0.23.4 — nine-nest correctness closure, d03 performance regression understood¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.23.4 | Correctness-complete; d03 performance regression measured, root-caused, investigation closed. Closes the mass-flux seam, boundary retention, V/V10 moist/scalar ordering, and Thompson late-Ni balance in one linear chain. The one-hour all-physics d01-d09 replay lands 27/27 outputs, all 177,497,511 numeric values finite, and 9 × 102 fields within the frozen gates. Dispatch-level scalar batching is validated for 2-domain (d01+d02): no measured regression (0.960–1.018×). 3-domain/9-domain configurations using d03 carry a real 51.67% regression vs v0.23.3. Every quick-fix candidate (barrier, scan/map, register-pressure/fusion-disable, scheduling, roll substitution) was falsified or rejected with evidence; a Nsight Compute hardware measurement confirmed the kernel is occupancy/latency-bound, not bandwidth-bound (DRAM 20.3% of peak, occupancy 15.6%), identifying concurrent sibling-domain scheduling as the mapped next lever (design-scoped, unimplemented). Ships as a known, understood limitation. Fixed 30-minute nested radiation cadence remains disclosed. | Intentional WRF-fidelity corrections; d01/d02 performance-neutral, d03 correct but slower; rebaseline ice-sensitive trajectories |
v0.23 line — batched-ensemble throughput & usability¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.23.3 | cuda_async preflight reliability fix. A verified lock-held allocator pool is advisory rather than a false low-VRAM failure; unlocked checks still fail closed. | No dynamics/physics change |
| v0.23.2 | Batched-ensemble distinct-init CLI ergonomics. GPUWRF_BATCH_INPUT_DIRS now accepts a comma-separated list of the B distinct-day input dirs (the old :-only separator still works), with an actionable count-mismatch error. Fixes an operational fallback where a natural comma list parsed as one dir. Documents the distinct-init contract (nested one-way, exactly B same-geometry dirs). No dynamics/physics change; the batched math is unchanged. | Numerically identical to v0.23.1 |
| v0.23.1 | Usability & AI-native onboarding. A full HTML User's Guide; an AI operator skill (AI_OPERATOR.md + a Claude Code skill) so an agent can run a case for you; and WRF-parity CLI ergonomics — forecast length and root domain now default from namelist.input when the flags are omitted, plus a namelist-support subcommand and a --dry-run preflight. No dycore/physics change. | Numerically identical to v0.23.0 |
| v0.23.0 | Opt-in batched ensemble (GPUWRF_BATCH_ENSEMBLE=B) fills the launch-bound small-grid GPU (Tenerife 3/1 km reaches ~97 % of the large-grid ceiling at B=4). Value-preserving default-path work reductions (radiation flux slicing, flat two-domain fusion). Extended physics — New-Tiedtke cumulus + Morrison-aerosol ported; NSSL / CAM-UW / urban / lake reference-only; moving nests opt-in. fp32 foundation laid (separate milestone). | Numerically equivalent to v0.22.2 |
v0.22 line — nested wall-clock & features¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.22.2 | Nested-grid wall-clock: cuts host work at the nested output boundary (~9 % faster nested steady state) + bit-identical RRTMG tile cap fixing a convection-peak OOM. | Byte-identical to v0.22.1 |
| v0.22.1 | Pod-data-quality: nested history_interval output-cadence fix + opt-in colon-free wrfout filenames. | Byte-identical |
| v0.22.0 | Big stability + feature release: opt-in two-way nesting, 3-D TKE, data-assimilation hooks, extended output; operational-relaxed ADR ratified. | Byte-identical to v0.21.1 |
v0.21 line — stability + compile-cache speed¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.21.1 | Mont-Blanc extreme-terrain boundary fix (WRF-faithful zero-gradient W; no masking). | Byte-identical |
| v0.21.0 | AOT cheap-key cross-process warm-start (seconds-fast, skips the re-lower); dycore boundary-stability fix (all-7 9-domain nest finite through the old step-67 window); default-on finite guard; version-keyed cache. Warm forecast throughput unchanged. | Byte-identical |
v0.20 line — correctness, capability, fp32¶
| Version | Highlights | Default numerics |
|---|---|---|
| v0.20.1 | Reliability + I/O patch: warm cache hits across forecast dates for the nested path; opt-in training-output subset (currently 39 model variables plus mandatory coordinates); nested VRAM-OOM hardening. | Byte-identical to v0.20.0 |
| v0.20.0 | Correctness / stability / capability / reliability. Opt-in fp32 mode; cache that just works across runs and dates. All-7 nest ~1.07× faster than v0.19 / ~1.53× faster than 12-rank CPU-WRF, byte-identical to v0.19. | Byte-identical to v0.19 (fp64 default) |
v0.19 and earlier — foundation¶
| Version | Highlights |
|---|---|
| v0.19.1 | Fixes a 24 h VRAM leak (a self-referential recursive closure); VRAM flat over a full day. |
| v0.19.0 | Fused cascade default-on beats CPU (1.43×); all-fields tolerance-green; the nested 7-island 9-domain goal reached (fast + 24 h VRAM-stable). |
| v0.18.3 | max_dom=9 compile fix + nested history_interval cadence fix, bit-identical. |
| v0.18.2 | 1 km nested VRAM-efficiency fix (OOM near 31.8 → 18.1 GiB), bit-identical. |
| v0.18.0 | Feature-completeness + scheme triage: every WRF v4 scheme classified under the then-current registry, no scheme dropped. Thompson strictly more WRF-faithful. |
| v0.16.0 | Stability + 1 km unlock: 1 km single domain fits one RTX 5090 bit-identically (chunked BouLac); aerosol-aware Thompson; fp32 make-or-break concluded. |
| v0.15.0 | The project's final fp64 GPU kernel (adversarially confirmed device-bound); re-closes both 72 h gates 9/10 within frozen tolerance. |
The complete, unabridged notes for every release are in the
release_notes/ folder and
CHANGELOG.md of the repository.