Repository navigation
ArWen 2.8.9
ArWen 2.8.9 runs NCAR's WRF CONUS benchmarks straight from their folders, continues a WRF run from its restart file, adds WRF's original Tiedtke cumulus (cu_physics = 6) and WRF v4.4's Thompson, reads NetCDF-4 files many times faster, ships an RRFS v2 preset, and carries the 2.8.8 correctness work: diffusion, damping, the boundary and surface layers, Thompson, RUC and the microphysics heating clamp now compute as WRF does in the default build.
2.8.8 was not released. Everything it would have shipped is in 2.8.9 and listed here.
- Windows desktop: extract and open ArWen.exe. Setup installs and checks the matching runtime, tables and geography.
- Linux desktop: follow the included installation guide. The graphical application requires x86-64 Linux with glibc 2.39 or newer.
- Integration kit, desktop source, verification records, and checksums.
- Node GPU gate: Stage 1 and both GPU-shard results, with the tested source revision and card identity.
The CONUS benchmark in one command
Unpack NCAR's v4.4_bench_conus12km tarball and run both legs from the folder as shipped, then NCAR's own comparison script:
gpuwm run v4.4_bench_conus12km --outdir woof-12h && gpuwm run --restart-from v4.4_bench_conus12km/wrfrst_d01_2019-11-26_23:00:00.gnu --outdir woof-restart
python v4.4_bench_conus12km/diffwrf.py woof-restart/wrfout/wrfout_d01_2019-11-27_00_00_00 v4.4_bench_conus12km/wrfout_d01_2019-11-27_00:00:00.gnu.restartThe 2.5 km benchmark runs the same way from v4.4_bench_conus2.5km. --benchmark skips render and post-run verification and prints WRF-style timings (startup, read, init, first step, steps, write), also written to benchmark-timing.json. On one RTX PRO 6000 Blackwell the 12 km restart leg takes about 49 s end to end and the 12 h leg about 100 s; the 2.5 km restart leg, with its 11.6 GB restart, takes about 424 s, about what NCAR's ifort build takes on 1,800 cores. At 00Z, wind, temperature, moisture, surface and rain differences from NCAR's output sit inside NCAR's own ifort-against-gnu spread.
New
gpuwm run --restart-fromawrfrst_d01file continues a WRF 4.x run from its restart. A WRF run folder named as the configuration runs too, and so doesrestart = .true.. NCAR's v4.4 benchmark folders import as shipped (physics_suite, a root parent start of 0, radiation cadence in whole steps). At the restart instant WOOF and WRF 4.6.1 agree on every compared field. Physics cadences are checked before any field is read, so a wrong cadence is refused in seconds instead of after the read.cu_physics = 6, WRF's original Tiedtke and the cumulus of WRF's CONUS suite, runs on the GPU in one whole-domain launch. Its columns match WRF v4.6.1's Fortran word for word in default and strict arithmetic.- Classic Thompson (
mp_physics = 8) runs WRF v4.4's generation for inputs WRF v4.4 wrote, chosen from the file's producer stamp;thompson_versionor--thompson-versionchooses explicitly, and other inputs keep the v4.6.1 generation. On both benchmark domains its columns match WRF v4.4 word for word. - A fixed-step WRF folder runs WRF's acoustic substep count by default (
time_step_sound, or WRF's own rule when it is 0); the receipt states the count that ran. - Preset
rrfs-v2-hex-tempo: NOAA's RRFS v2 configuration with TEMPO microphysics on the MPAS hex dycore (conus12km), with five declared divergences; its 6 h observation scores match NOAA's own run. mp_physics = 30(WRF's FAST_SBM): HRRR, RAP and GFS starts fill its bins mass-exactly, winter runs no longer stop at the first snowfall, nested trees validate and checkpoint, and its column kernels run 5x faster with the same bytes. A run on RTE+RRTMGP is refused before step 0, naming legacy RRTMG.gpuwm obs scorecardscores finished runs against observations: station residuals pooled across leads within each case, FSS averaged across leads, and two arms compared by resampling independent case blocks.gpuwm scoreboard --requestruns the Rust nightly scorer, which matches the forecast to each station report at the report's own time.install.sh,install.ps1and the Machines page's remote install make.venvon free-threaded CPython 3.14t by default, so the slab threads of a--devices Nforecast no longer take turns: four cards had run about 2x slower than the published benchmarks.--python/-PythonorGPUWM_PYTHONpicks another interpreter.- ArWen Desktop 1.0.9 runs any 2.8.x engine and terminal. Desktop 1.0.8 pinned the exact engine version.
gpuwm verify-exactreplays recorded stock WRF runs through WOOF on one card and scores every recorded step word for word, naming the first differing step, field and ULP difference, and never passing a field it did not compare or a match against an unsound referee.- Winter maps and point output from the Rust renderer: model, 10:1 and Kuchera snowfall over a window, 10 m gust, precipitation type and snow level; ensemble probabilities for them; WOOF snowfall beside raw GFS and ECMWF (
rw_refsnow); and point time series to CSV (rw_points). - WRF's
cyclingreaches the model as[shared] cyclingand imports from namelists: a cycled MYNN start keeps its input TKE and boundary-layer cloud, as the operational HRRR fork does. gpuwm go --tiles, and a--prepared-rootforecast runs under the recorded[tiles], so a full 1800x1060 HRRR grid prepared in two steps streams on one 96 GB card.
Faster
- NetCDF-4 files are read in one parallel pass per variable, inflating each compressed chunk once, and importers decode in batches. Reading NCAR's 2.5 km restart before the run went from 2,893 s to 101 s, with every variable identical to netCDF-C's.
- A run's first step no longer waits on a diffusion kernel compile: those kernels go through the persistent kernel cache and compile during the input read. On the 12 km restart the first step went from 22 to 42 s to under 2 s.
- Cold setup downloads only the geography and tables a configuration uses, checked by SHA-256 while streaming: on a 3 km case, 499 s to 21 s.
- Ensembles: members that share a source decode it once (246 s less for eight members, 801 s less for twenty), legacy-RRTMG members pack two per card with the same bytes, and the ensemble door's remedy is
gpuwm fetch-geog --config, which stages only the geography the run reads. - Data assimilation fetches its public observations through Rust and prepares them concurrently: 40 s less on a 3 km case, 140 s less over CONUS.
- Forecasts split across two or more cards (
--devices N) run at the speed 2.8.6 measured again: 2 cards run 1.95 times one card, where 2.8.7 ran 0.78. - The terrain clock reads each mountain face with its own crest and wind (
terrain_clock = "local_face", the new default), so a jet far from the mountains no longer halves the step: NCAR's 12 km and 2.5 km benchmarks run their published 72 s and 15 s.terrain_clock = "measured"keeps the old clock.
Fixed
- Diffusion runs in WRF's operation order and arithmetic by default; the default build had differed from WRF's diffusion fixtures in up to half their words and now differs in none. Constant K (
km_opt = 1) runs on open and specified boundaries and with chemistry. - The upper damping layer (
damp_opt = 3) forms its strength as a float32 product, as WRF v4.6.1 does, in every build. - MYNN matches WRF v4.6.1 bit for bit, and the HRRR MYNN generation matches the operational fork's driver, including its length-1 mixing length; HRRR and RAP configurations that omit
bl_mynn_versionrun the fork's MYNN. - YSU and Shin-Hong compute without multiply-add contraction and match WRF's column oracles apart from tendencies the card flushes to zero. The MYNN, MM5 and Eta surface layers compute in the default build as in the strict one and match WRF word for word.
- Aerosol-aware and classic Thompson read the rain-graupel collection table WRF builds instead of reproducing WRF's out-of-bounds read, a declared divergence; aerosol-aware Thompson otherwise matches WRF word for word on a 157-column oracle.
- Kessler, WSM6, Milbrandt-Yau, Morrison, WDM6, NSSL, both Thompsons and P3 clamp microphysics heating in single precision as WRF does.
- A warm start under any cumulus except Kain-Fritsch no longer adds WRF's restart-instant convective rain rate again on every step, which had doubled convective rain in NCAR's restart hour.
- RUC: layered soil moisture sources such as ECMWF no longer stop at cold start on negative soil moisture (real.exe's 0.005 floor is applied and counted), RUC's own initial soil water is kept, and runs with fractional sea ice and
fractional_seaice = 0start. - Steep terrain: a domain steeper than any slope measured stable is smoothed during preparation, only that domain and only until it is under the limit; terrain inside the limit is unchanged.
- Older HRRR: cycles before 2020-12-02 prepare on both HRRR routes, reading GREENFRAC climatology where the surface file has no vegetation fraction, and the pressure-level route reads HRRR version 1 (2015 to 2016-08-23), whose grid corner and repeated height records it had refused.
- HRRR: a full 1800x1060 grid prepares, cycles with masked analysed aerosol prepare, imported operational namelists (
cycling = .true.) prepare on the HRRR route, and the route no longer refuses chemistry switches the forecast reads. - Ensembles with checkpoints run on a two-card grant, a failed ensemble forecast relaunches on its prepared members,
--prepare-onlyprepares every member and stops, andgpuwm enprodreads whatgpuwm go --memberswrites. gpuwm go CONFIG --restart CHECKPOINTresumes a custom-domain run from its own run folder; it was refused at every spelling.CUDA_VISIBLE_DEVICESnaming one card selects it on a multi-GPU node, andgpuwm doctorreports a card another process has filled as not judged instead of failing the install.- Refusals before a forecast exit 2 and name the remedy (prepare again, the restart command line, the terrain slope against its limit) where several exited 1 or printed usage;
gpuwm renderdraws from a run's output folder. - Map titles resolve whole-hour and exact-time histories, panel grids keep the theme's provenance line, and labels name WOOF and the running version.
- Soil moisture no longer depends on where a domain is drawn; the soil-texture downscale is off for 3 km HRRR and RRFS.
- Imported namelists resolve
scalar_pblmixaswrf.exedoes for aerosol-aware Thompson, and it runs under YSU;gpuwm run --wrfinputrebuilds WRF's base state; every history that writesREFL_10CMcarries it in its first frame. - Downscaling from a 9 or 12 km parent no longer refuses at review on its step; the 6 km probe configurations run a stable 30 s step;
gpuwm render --products olrdraws;gpuwm go --dry-runrefuses a missing geography tree as the launch does. - A checkpoint or prepared forecast from 2.8.7 or earlier whose run used a scheme that computes differently in 2.8.9 is refused, naming each scheme; others resume once the configuration sets
terrain_clock = "measured".
Answers change for diffusion (km_opt 2 to 4, sixth-order, and constant K that mixes anything, which includes the HRRR configurations), damp_opt = 3, YSU, Shin-Hong and MYNN, the MYNN, MM5 and Eta surface layers, RUC and both Thompsons, the other microphysics schemes wherever the heating clamp bites, warm starts under a cumulus other than Kain-Fritsch, fixed-step WRF folders (WRF's acoustic substep count), WRF v4.4 inputs under classic Thompson, domains over the steep-terrain limit or whose terrain clock takes a longer step, gpuwm run --wrfinput runs, imported aerosol-aware Thompson namelists, and RAP and pressure-level HRRR soil moisture. Multi-card forecasts keep their answers byte for byte. Other configurations keep their previous answers.
Known limits: on the benchmark restart legs, PH and MU sit outside NCAR's compiler spread because of the model-top lid; the winter products are checked on synthetic histories and not yet scored against observations; the RRFS preset does not yet run on a point mesh; a nested parent and child cannot yet start together from --initial-inputs; air quality carries no gas chemistry.
The verification records identify completed artifact and startup checks, the short GPU forecast, and retained component evidence. They do not establish general forecast skill or whole-model parity.