Repository navigation
ArWen 2.8.3
ArWen 2.8.3 is a feature and fix release that splits one forecast across several cards, exports runs as machine-learning datasets, adds WRF's sub-grid terrain drag and coordinate-surface diffusion, applies WRF's moisture correction to the pressure terms by default in every moist forecast, and fixes six places where the dynamical core differed from compiled WRF v4.7.1.
- Install or upgrade:
pip install --upgrade "gpuwm[all-cu12]==2.8.3". - Integration kit, verification records, and checksums.
- Node GPU gate: Stage 1 and both GPU-shard results, with the tested source revision and card identity.
New
- One forecast can run split across several cards:
[devices]in a single-domain or tree config, orgpuwm go --devices N, splits it, and each card's memory is checked before the run starts. Off by default. In a tree,domainsnames the grids that split (every grid by default), a split nest takes its parent's forcing each parent step, and two-way feedback reaches a split parent.gpuwm sim --devices Nor--devices-tablesets the split for a prepared forecast without changing its prepared configuration.gpuwm check CONFIG --devices Nprices every card, every grid and the pinned host memory, and exits 2 when a selected card has no declared or measured memory budget. History frames leave the card while the model keeps stepping. In the release's two-card test, the output was byte-identical to the one-card run's. A split parent over a resident nest, moving nests and late-starting split grids are refused by name, and a split grid refuses Noah mosaic (sf_surface_mosaic = 1) and slope radiation (slope_rad = 1) before anything is allocated; resident grids keep both. topo_wind(with the YSU boundary layer, not under BEP or BEP+BEM) andgwd_opt = 1or3(with any boundary layer scheme) add WRF v4.7.1's sub-grid terrain drag on the card: the topographic wind correction, and the KIM or GSL orographic drag. The static builder computes the orographic statistics from WPS geography, and WRF namelists that set either key import. The orographic statistics come out bit-identical on Linux and Windows. A streamed[tiles]domain stops at its first drag call and asks to run resident. Off by default.diff_opt = 1, WRF's horizontal diffusion along model coordinate surfaces, runs withkm_opt = 2or4and eithermix_full_fieldssetting, and restarts and streams. Off by default (diff_opt = 2).gpuwm ml-exportturns a run's history files (a regional run's, a hex run's converted frames, a global run's tapes, or the run page's ZIP of them) into a machine-learning dataset: one Zarr store per domain on WeatherBench 2's 13 pressure levels (ERA5's 37 or the model's own as options), with ERA5 and WeatherBench 2 names and units, earth-relative winds, ERA5's below-ground fill flagged by abelow_groundmask, levels above the model top left out and listed, an optional regular latitude-longitude grid, and a ZIP that opens in place. The stores open withxarray.open_zarrunder zarr-python 2.18 and 3. Seedocs/ml-export.md.- More forecasts start while their source is still posting, with output unchanged:
gpuwm run-plannow starts GFS and nativehrrrsingle domains and trees from the first posted hours, asgpuwm godoes, and both commands start a singlehrrr-prs,rap,rrfs,icon-euorgem-gdpsdomain the same way. A[tiles]root, asgpuwm cyclone-setupwrites, waits at each seam instead of for the whole cycle. A forecast that fails before a later lead times out keeps its own error, with the timeout reported beside it. GPUWM_FETCH_POLICY=awsfetches each source that has an AWS host in the route table from that host only, with no fall-through to NOMADS; a source with no AWS host keeps its usual host.latestresolves to the newest cycle whose first hours are on AWS (--whole-cyclekeeps the whole-cycle rule), and forecasts still start from their first posted hours. Off by default: unset, fetching is unchanged.gpuwm fetchworks with hosts that refuse HEAD requests, asking with a one-byte GET instead.gpuwm import-namelistaccepts the WPS sections GUI writers add (domain_wizard,mod_levs,plotfmt) and a bare30sgeography, and fills 17 of 33 formerly required keys from WRF's Registry and WPS defaults; an unknown section is still refused by name.- The GPU preparation backend rotates winds, interpolates vertically and builds the Thompson cold start on the card in the CPU route's arithmetic, so a card-prepared start matches the CPU route's arrays. Answers change for forecasts prepared on the card. On a full HRRR grid, card forcing preparation took 154 s instead of 640 s.
- The acoustic, advection, horizontal diffusion and per-step glue kernels move less memory each step, with byte-identical output. The horizontal diffusion change alone takes an hour of an 800x600x50 domain from 95.7 to 88.4 s on an RTX 5090.
Fixed
- Moist forecasts apply WRF's moisture correction to the pressure terms (
moist_cq) in every shipped profile and in every configuration that does not set it, passive water vapour with microphysics off included. Configurations matching no profile, which included most imported WRF namelists, had run without it, and the WSM6 and Kessler profiles had turned it off; an explicit setting still wins. Over five 20-member WRF ensemble cases, measured before the longwave fix below, forecasts sat inside WRF's own rounding envelope in 76% of field-hours (17% before the fix), against 65% for WRF built with fast math (Intel ifx -fp-model fast). Answers change. - The dynamical core fixes six places where it differed from compiled WRF v4.7.1, found by new routine-by-routine comparisons: the vertical-velocity damping constant,
w_damp's float32 rounding, the geopotential tendency on the outer open and specified rows, vertical-velocity advection at an open model top, map factors in the open-boundary radiation of mapped grids, and diffusion (sixth-order filtering, deformation at the boundary, TKE on the outer rows and a prescribed surface heat flux). Answers change. - Legacy RRTMG longwave keeps WRF's 4 hPa layer spacing above the model top. A pressure guard counted the final zeroed interface and compressed the extra layers, changing their temperatures and heating. Answers change for forecasts using legacy longwave.
gpuwm go --cycleon a run that takes its inputs from a prepared bundle, a checkpoint or declared forcing runs when the cycle matches those inputs' actual start, and records it; a different cycle is still refused. 2.8.1 refused every--cycleon such runs.- The surface vertical velocity on a domain's open or specified edge rows takes WRF's clamped terrain slope instead of copying the interior slope outward, which had doubled its terrain-following term there. Periodic domains and interior cells are unchanged; answers change.
- Land points cap 2 m humidity at 1.05 times the lowest model level's vapour after the surface schemes, as WRF's surface driver does. Answers change for 2 m humidity.
- Forecasts started from a WRF
wrfinputfile initialize Noah's soil liquid water from soil moisture in unfrozen soil and the terrain-following vertical wind from the surface flow, as WRF does, instead of keeping the file's zeros. Withusemonalboff, Noah keeps the seasonal background albedo WRF's land-use initialization sets instead of the file's monthly value. Answers change for these forecasts. - A
gpuwm downscalechild of a saved run,--pointchildren included, builds its own terrain, land use and soil at its own spacing (Copernicus GLO-30 terrain at 1 km or finer) instead of running on its parent's interpolated terrain, and the parent's state, every boundary frame included, is blended and rebalanced onto it by WRF'sndownmethod. The child needs a WPS_GEOG tree (gpuwm fetch-geogstages it,--geog-rootnames another) and is refused before any work without one;--parent-terrainkeeps the old route, and the derived child config records the choice in[static]. Answers change for these children. - Downscaled children and nested DA forecasts take the steep-terrain acoustic substeps and
epssmfloor from their own terrain, not their parent's, keeping automatic parent choices; a lower explicitepssmis refused. Answers change for a child whose own terrain is steep enough for the rule where its parent's was not. - With an adaptive time step, a history interval need only be whole seconds, not a multiple of
time_step: steps shorten to land exactly on history, radiation, cumulus, surface and boundary-layer times, prepared forecasts honor adaptive history alarms, and delayed child domains start on time. Answers change for adaptive forecasts whose history or physics times fell between steps. - Disk estimates price the history each domain's physics and
history_varswrite within its output window: trimmed runs that fit now start, and runs that cannot fit are refused before they start. - A BEP+BEM forecast's memory check prices the building model's workspace from the urban columns its preparation found, including a forecast that starts while its source posts, so a forecast that fits stays on the card instead of streaming from host memory; a configuration check, made before preparation, keeps its upper bound and says so.
- A resident nest under a streamed or split parent no longer stops before its first restore with a KeyError.
- A streamed forecast's final state digest records the same model time as the resident forecast's. With a fractional adaptive time step it had ended 0.27 ms late after 3 h, so two identical forecasts had different digests.
- A checkpoint records the run configuration the same way whichever writer wrote it, so two checkpoints of one state no longer differ in their header.
- A forecast command on an install holding CuPy older than 14.0 now stops before any work, naming both versions and the extras that upgrade it; it used to stop at the first model step with
Unsupported type <class 'numpy.void'>. install.ps1is the Windows installer: on any other host it now stops before changing anything and points tobash install.sh.
Local data assimilation stays experimental and its ordinary desktop entry point stays hidden. Advanced users enable it with gpuwm tui --enable-local-da.
Known limits: the web GUI is a preview and the desktop app remains the full way to run ArWen; a single-domain preparation still refuses a [perturbation] block; WRF's gwd_opt = 2 is not ported and is refused.
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.