Skip to content

ArWen 2.8.3

Choose a tag to compare

@FahrenheitResearch FahrenheitResearch released this 03 Oct 00:00
· 19 commits to main since this release

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.

New

  • One forecast can run split across several cards: [devices] in a single-domain or tree config, or gpuwm go --devices N, splits it, and each card's memory is checked before the run starts. Off by default. In a tree, domains names 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 N or --devices-table sets the split for a prepared forecast without changing its prepared configuration. gpuwm check CONFIG --devices N prices 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) and gwd_opt = 1 or 3 (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 with km_opt = 2 or 4 and either mix_full_fields setting, and restarts and streams. Off by default (diff_opt = 2).
  • gpuwm ml-export turns 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 a below_ground mask, 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 with xarray.open_zarr under zarr-python 2.18 and 3. See docs/ml-export.md.
  • More forecasts start while their source is still posting, with output unchanged: gpuwm run-plan now starts GFS and native hrrr single domains and trees from the first posted hours, as gpuwm go does, and both commands start a single hrrr-prs, rap, rrfs, icon-eu or gem-gdps domain the same way. A [tiles] root, as gpuwm cyclone-setup writes, 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=aws fetches 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. latest resolves to the newest cycle whose first hours are on AWS (--whole-cycle keeps the whole-cycle rule), and forecasts still start from their first posted hours. Off by default: unset, fetching is unchanged. gpuwm fetch works with hosts that refuse HEAD requests, asking with a one-byte GET instead.
  • gpuwm import-namelist accepts the WPS sections GUI writers add (domain_wizard, mod_levs, plotfmt) and a bare 30s geography, 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 --cycle on 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 --cycle on 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 wrfinput file 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. With usemonalb off, 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 downscale child of a saved run, --point children 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's ndown method. The child needs a WPS_GEOG tree (gpuwm fetch-geog stages it, --geog-root names another) and is refused before any work without one; --parent-terrain keeps 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 epssm floor from their own terrain, not their parent's, keeping automatic parent choices; a lower explicit epssm is 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_vars write 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.ps1 is the Windows installer: on any other host it now stops before changing anything and points to bash 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.

Installation and usage | Full changelog