Skip to content

Forecast model feed reference

Every builder supplies the same surface fields, five fields on each pressure level — plus vertical velocity and per-level cloud fraction where the transport carries them — and model terrain elevation to the shared derivation. Feeds that publish them also supply the optional science fields: 10 m gusts, surface-based CAPE and CIN, model boundary-layer height, and layered cloud. Access, resolution, cadence, horizon, retention, and field semantics vary by model; each model’s curated pressure-level set and science-field capabilities are declared in models.json.

Measurements use live service responses checked through 2026-08-10. When provider documentation and live capabilities disagree, use the live response and update the verification date.

Five of the six ECCC models below — HRDPS continental 2.5 km, RDPS, GDPS, REPS, and GEPS — read whole-domain GRIB2 from the main Datamart; HRDPS West 1 km reads the same way from the separate alpha Datamart noted under retention. The earlier GeoMet WCS transports of HRDPS continental, RDPS, GDPS, and REPS are retired (GEPS was Datamart-only from the start). Verified 2026-08-08:

  • Everything lives under the date-rooted tree https://dd.weather.gc.ca/YYYYMMDD/WXO-DD/<model path>/HH/hhh/; the old undated trees are gone from the root listing. Deterministic filenames use the MSC scheme YYYYMMDDTHHZ_MSC_<MODEL>_<Var>_<Level>_<Grid>_PThhhH.grib2.
  • No .idx sidecars exist, so NOAA-style byte-ranging is impossible — deterministic files are one GRIB message per file and there is nothing to range against. The fetch unit is the whole-domain file.
  • Retention is ~30 days on dd.weather.gc.ca and ~51 days on the hpfx.collab.science.gc.ca mirror, which serves identical paths and suits backfill and load-spreading. The mirror is MSC’s documented alternative server: “bandwidth multiplied by 10” during peak demand, but no 24/7 redundancy on its link (“best effort”), so consumers should be able to fall back to dd. The docs claim 30-day retention on both; live root listings show dd’s oldest date 29 days back against hpfx’s 51 [verified 2026-08-08: HRDPS and GEPS directory listings for the day were filename-identical across the two hosts, and the builders’ probe URLs answered 200 on hpfx]. The pipeline selects the host per invocation via WINDGRAM_DATAMART_BASE. The alpha Datamart (dd.alpha.weather.gc.ca, the 1 km feed) is a third, unmirrored host: its tree is not date-rooted and does not exist on hpfx.
  • The usage policy caps an application at 86,400 requests/day (about 1 request per second, averaged) and documents no HTTP connection ceiling — the 500-connection limit applies to AMQP clients only [verified 2026-08-08]. It asks for a meaningful User-Agent, no no-cache headers, and no directory-listing polls to detect new data (AMQPS is the sanctioned push channel; wget/ curl are “reserved for ad hoc data retrieval”). The builders send a project User-Agent and probe availability with one HEAD of a concrete file per model per tick, never a listing; a worst-case day with every model landing fresh runs each check stays under the daily budget.
  • Packing is grid_jpeg; ecCodes 2.48.0 decodes it — but every per-element read (codes_get_double_element) re-decodes the entire field internally (~0.21 s per call on HRDPS’s 3.3M points, identical to a full codes_get_values), so samplers must decode a message’s values once and index into the array, never extract point by point [verified 2026-08-08].
  • Model terrain is published at PT000 only for RDPS, GDPS, REPS, and GEPS — builders fetch it from the 000/ directory even when hour 0 is otherwise skipped. HRDPS publishes terrain every hour.
  • HRDPS encodes GRIB forecastTime in minutes where RDPS/GDPS use hours; the builders take valid times from the schedule and never read the raw key.
  • Gusts come in two semantics per step (verified by decode 2026-08-08): an instantaneous 10 m gust (paramId 228029, stepType=instant) and an hourly Max/Min pair (paramId 237318, PDT 8). The Max files’ interval metadata is broken (lengthOfTimeRange=0), so the window semantics were established empirically on full fields: Max at PT hh is the maximum model-timestep gust over the hour (hh−1, hh] — Max24 < Max23 at ~46–56 % of points (not a run-length max), Max24 ≥ instant24 at 100.0 % of points, and Max24 > max(instant23, instant24) at 59 % (the max is over internal timesteps, not hourly outputs). The builders publish the hour-max as windGustMs (capabilities gust: "hourMax" — the pilot’s “gusting to”) and re-assert Max ≥ instant at the sampled sites on every build. The instantaneous file runs systematically lower (field means 5.03 vs 6.59 m/s at PT024).
  • CAPE is surface-based only, with in-band sentinels. All four models publish GRIB 0-7-6 CAPE (the 1 km’s CAPE_ETAL_10000 departs eta = 1.0 — the lowest model level, i.e. surface-based); RDPS/GDPS add 0-7-7 CIN; the HRDPS family has no CIN at all. “Not computed” is encoded in the values: 9999 in RDPS/GDPS CAPE and CIN (27–38 % of the grid on the verification day, collocated), −1 in HRDPS-family CAPE (21–33 %). The builders mask sentinels to absence before anything reaches a document — an unmasked GDPS field “means” CAPE 4 152 on a naive average.
  • PBL height decodes as paramId 159 blh, plain metres above ground — night-side minima of ~2 m are only possible AGL — at every populated step. Renderers must add model terrain before plotting it on an MSL altitude axis.
  • Cloud is total-only: no low/mid/high layers and no per-pressure-level cloud fraction exist anywhere on Datamart for these models (every cloud-matching filename in the 00Z listings inventoried 2026-08-08; CloudWater_EAtm is column-integrated kg/m², not a fraction).

Scroll horizontally to see all columns.

ModelResolutionRuns used (UTC)Horizon
HRDPS WestExperimental feed1 km00 / 122 d
HRDPS continental2.5 km00 / 06 / 12 / 182 d
HRRR CONUS3 km00 / 06 / 12 / 182 d
RDPS10 km00 / 06 / 12 / 183.5 d
GDPS15 km00 / 1210 d
GFS25 km00 / 06 / 12 / 1816 d
NAM12 km00 / 06 / 12 / 183.5 d
NAM CONUS nest3 km00 / 06 / 12 / 182.5 d
REPS10 km00 / 06 / 12 / 183 d
GEPS50 km00 / 1216 d

Environment and Climate Change Canada’s High Resolution Deterministic Prediction System: 2.5 km rotated lat-lon grid (2540 × 1290 at 0.0225°) over nearly all of Canada, 48 hourly steps, four runs a day (00/06/12/18Z). The run streams out in forecast-hour order roughly T+2:55 → T+3:55 (verified from listing mtimes, 2026-08-08).

Path: model_hrdps/continental/2.5km, old-style variable tokens (TMP_ISBL_0850, SHTFL_Sfc, WDIR_AGL-10m). Verified facts (2026-08-08):

  • 28 isobaric levels are published per field; the build samples the curated 14-level 1015–600 hPa band. Omega (VVEL) exists at 250/500/700/850/1000 only, so verticalVelocityPaS is published on the three curated levels that carry it (1000/850/700).
  • The surface set includes a true 2 m dew point (DPT_AGL-2m), which GeoMet never exposed. Level moisture remains a dew-point depression (DEPR, Td = T − DEPR) and the depression clamps at exactly 30 K — dew points in very dry air saturate at T − 30.
  • WDIR/WIND are earth-relative despite the rotated grid — verified at four points against UGRD/VGRD rotated through the grid transform, agreeing to ≤0.3° where the unrotated component direction was off by up to 32°. Wind is consumed directly with no rotation.
  • Heat fluxes (SHTFL_Sfc/LHTFL_Sfc) decode as paramId 231, instantaneous W/m² — they feed w* with no differencing.
  • Precipitation uses the fixed-window APCP-Accum1h_Sfc accumulation; mm over one hour is mm/h directly. Hour 000 publishes no precipitation or flux files.
  • Science fields (GUST/GUST-Max_AGL-10m, CAPE_Sfc with the −1 sentinel and no CIN, HPBL_Sfc) are hourly including hour 000.
  • Cost: ~166 MB per forecast step for the curated field set, ~7.8 GiB per run, four runs a day; the science fields add ~0.4 GiB per run.

HRDPS West 1 km — supported, experimental

Section titled “HRDPS West 1 km — supported, experimental”

ECCC also runs an experimental 1 km HRDPS over BC and western Alberta, published only as whole-domain GRIB2 on the alpha Datamart — no subsetting. The grid is a rotated lat-lon, 1330 × 1180 points; ecCodes handles the rotation so the sampler only ever speaks geographic coordinates. Runs are 00Z and 12Z only, files are retained for roughly 24 hours, and the feed goes dark occasionally — the workflow treats a 1 km failure as a warning, never a blocked 2.5 km publish.

The builder downloads each whole-domain file before sampling the catalogue. The 1 km feed keeps the old GRIB tokens for the science fields — GUST_TGL_10/GUST_MAX_TGL_10, CAPE_ETAL_10000 (eta 1.0: surface-based, −1 sentinel, no CIN), HPBL_SFC_0 — with the shared ECCC semantics above. One launch elevation is 1,485 m; model terrain elevation is 1,311 m at 1 km and 1,072 m at 2.5 km. The 1 km grid reduces the terrain error from 413 m to 174 m. That 239 m shift propagates into cloud base, boundary-layer top, and which pressure levels lie above model terrain.

The Regional Deterministic Prediction System: 10 km rotated lat-lon (1140 × 1045 at 0.09°), 84 hourly steps, four runs a day. It extends the windgram from HRDPS’s two days to three and a half, and the run completes before HRDPS — ≈ T+3:05–3:10 (verified 2026-08-08).

Path: model_rdps/10km, English CamelCase variable names (AirTemp_IsbL-0850, SensibleHeatNetFlux_Sfc, WindDir_AGL-10m). Verified facts (2026-08-08):

  • The full 33-level column is published every hour; the build samples the curated 14-level band. Omega (VerticalVelocity) exists at 250/500/700/850, published on curated 850/700.
  • A true 2 m dew point (DewPoint_AGL-2m) exists at the surface; level moisture is DewPointDepression.
  • Fixed-window Precip-Accum1h_Sfc spans the whole horizon — the run-total differencing the WCS transport needed is gone.
  • Heat fluxes are paramId 231, instantaneous W/m².
  • WindDir earth-relativeness is inferred from HRDPS’s verified behaviour — same MSC production chain; spot-check against rotated components is cheap if the grid definition ever changes.
  • Science fields (WindGust/WindGust-Max_AGL-10m, CAPE_Sfc and CIN_Sfc with the 9999 sentinel, PlanetaryBoundaryLayerHeight_Sfc) are hourly; CIN is ≤ 0 J/kg (min −1 755 on the verification day).
  • Cost: ~50 MB per step, ~4.1 GiB per run — the lightest of the four Datamart migrations; the science fields add ~0.5 GiB per run.

The Global Deterministic Prediction System: regular 0.15° global lat-lon grid (2400 × 1201 — no rotation anywhere, uvRelativeToGrid=0), 00Z and 12Z, through 240 hours, complete ≈ T+5:05 (verified 2026-08-08). ECCC’s current system description (checked 2026-08-08) identifies it as a coupled atmosphere, ocean, and sea-ice forecast whose large-scale temperature and wind are spectrally nudged toward its GEML data-driven weather model. That is a material change in lineage even though the open-data contract remains familiar. A ten-day windgram still has published sensible and latent heat fluxes rather than proxy surface heating.

Path: model_gdps/15km (model_gdps/10km holds GDPS-Analysis sea-ice NetCDF, not forecast GRIB). Same English-name inventory as RDPS. Verified facts (2026-08-08):

  • The 33-level column is 3-hourly to hour 168; the published schedule is 3-hourly throughout. Past 168, steps on a 6-hour boundary stay complete while the intermediate 3-hourly steps carry a reduced level set — of the curated band only 1000/925/850/700 survive there. This is better than the old GeoMet picture (six of nine levels thinning to 6-hourly); the builder tolerates a level absent at a valid time, so intermediate late-horizon columns ride on the four survivors.
  • Omega (VerticalVelocity) exists at 200/250/500/600/700/850; published on curated 850/700/600.
  • Precipitation is differenced from the run total (Precip-Accum_Sfc): fixed-window accumulations stop at hour 168, so the run total is the one quantity that spans the horizon.
  • Heat fluxes are paramId 231, instantaneous W/m².
  • CAPE/CIN thin out one regime earlier than the other surface fields: 3-hourly to 168 h, then 6-hourly only (present 003/024/174/240, absent 001/171 — verified 2026-08-08). Gusts and PBL height survive the post-168 thinning at every 3-hourly step, so late-horizon hours can carry a gust with no CAPE.
  • Cost: ~105 MB per step, ~8.3 GiB per run, twice daily; the science fields add up to ~0.9 GiB per run.

NOAA’s High-Resolution Rapid Refresh: 3 km over the continental United States, hourly runs, with the synoptic runs (00/06/12/18Z) extending to 48 hours, published to public cloud buckets roughly T+107 minutes after the reference time.

Verified facts:

  • Domain geometry: The oft-quoted 47.8°N northern limit is the eastern corner of the Lambert conformal grid. At −117.7°W the boundary is at 51.24°N — the southern-BC founding sites sit about 215 km inside the domain. Check the corner nearest your longitude before assuming HRRR excludes you.
  • All 70 records the windgram needs live in a single wrfprs file per hour, and its .idx sidecar lets a client fetch exactly those records by byte range. See Pipeline architecture.
  • Omega is published at all nine curated levels: VVEL (paramId 135, Pa/s, stepType=instant, no bitmap) at 925–600 hPa including 875, verified at f00/f24/f48 (2026-08-08).
  • Heat fluxes are instantaneous values.
  • Winds are grid-relative. U/V components on the native Lambert projection point along grid axes, not geographic east/north. Skip the rotation and wind directions bias by 10–15° at these latitudes.
  • GUST:surface is instantaneous (paramId 260065, stepType=instant, verified by decode 2026-08-08) — the model’s diagnostic gust at the valid time, not an interval max; NOAA publishes no hour-max gust (the WIND … max fcst record beside it is hourly-max sustained wind, not gust). Declared gust: "instant" in the catalogue: ECCC’s hour-max runs 20–30 % higher systematically, so the two providers’ gusts are not directly comparable.
  • CAPE/CIN come in the full variant menu — surface-based, mixed-layer 90 mb and 180 mb, most-unstable 255 mb, plus 0–3 km CAPE — all J/kg, instantaneous, no sentinels. The pipeline publishes the surface-based pair, the one variant every capable model shares.
  • HPBL:surface is paramId 159 blh, metres AGL.
  • Prognostic wildfire smoke ships in the same files (verified 2026-08-09 in both wrfprs and wrfsfc indexes): MASSDEN at 8 m AGL (kg/m³ → published µg/m³), COLMD column mass (kg/m² → mg/m²), and AOTK column aerosol optical thickness — three extra ranged fetches per hour, published as the profile’s per-hour smoke block. HRRRv4’s only prognostic aerosol is smoke, so AOTK is effectively smoke optical depth. The smoke is radiatively coupled — forecast smoke attenuates the model’s own shortwave, so published fluxes and derived w* are already smoke-aware (Dowell et al. 2022, WAF, §2d; declared smoke: "radiativelyCoupled" in the catalogue and echoed per document). Caveat: 2023-season evaluation (Chace et al. 2026, WAF) found HRRR underpredicts AOD for aged long-range smoke.
  • Layered cloud exists: LCDC/MCDC/HCDC, instantaneous %, on NCEP’s terrain-following sigma layers (fixed-surface types 214/224/234; low σ 1.0–0.642, middle 0.642–0.35, high 0.35–0.15 of surface pressure — NCEP/UPP convention, not encoded in the files, and not fixed altitudes). No per-pressure-level cloud fraction in wrfprs.

NOAA’s Global Forecast System at 0.25°: the long-horizon leg, out to 384 hours. Since the 2021 upgrades the output is 3-hourly all the way to f384 — the old 12-hourly tail beyond day 10 is gone.

Verified facts:

  • 875 hPa does not exist in the pgrb2.0p25 files, which is why the GFS entry in models.json declares eight levels where the other NOAA deterministic feeds declare nine.

  • Omega is published at all eight curated levels through f384: VVEL (paramId 135, Pa/s, stepType=instant), with the isobaric VVEL record count matching TMP’s at every checked hour — no late-horizon thinning of omega relative to the mass fields (verified 2026-08-08 at f003, f024, f240, and f384).

  • Pressure-level dew point isn’t published; it must be computed from temperature and relative humidity per level.

  • Flux time semantics: SHTFL/LHTFL exist only as averages over a growing window that resets every 6 hours: f001 averages hour 0–1, f002 averages 0–2, … f006 averages 0–6, then f007 starts again. Difference the window-hours to recover the mean flux over any sub-interval:

    mean(h1→h2) = ((h2−h0)·A(h2) − (h1−h0)·A(h1)) / (h2−h1)

    where h0 is the window start and A(h) the published average at hour h. The builder reconstructs each interval before deriving w*.

  • GUST:surface is instantaneous (paramId 260065) at every published step — the same instant-vs-hour-max caveat as HRRR applies against the ECCC models. CAPE/CIN carry the same variant menu as HRRR minus the 0–3 km CAPE; the pipeline publishes the surface-based pair. HPBL is NCEP local parameter 0-3-196, metres AGL.

  • Layered cloud publishes in two flavours per step: instantaneous (:N hour fcst:) and a 6-h-bucket average (:M-N hour ave:) that resets at synoptic hours. The builder reads the instantaneous records — they match every other field’s valid-time semantics. Only the instant flavour exists at f000.

  • GFS is the only published model with a cloud profile: TCDC at 22 isobaric levels (50–1000 hPa, instantaneous, every step incl. f000), published as cloudFractionPercent on the eight curated levels — unlike omega it is level-complete within GFS, only model-sparse.

NAM 12 km and CONUS nest 3 km — supported, retiring

Section titled “NAM 12 km and CONUS nest 3 km — supported, retiring”

NOAA’s North American Mesoscale system supplies two catalogue entries, both whole-domain GRIB2 with .idx sidecars on the noaa-nam-pds bucket, four cycles a day (00/06/12/18Z): the 12 km parent (awphys, AWIPS grid 218 — hourly to 36 h then 3-hourly to 84 h, complete ≈ T+2:40) and the 3 km CONUS nest (conusnest.hiresf — hourly to 60 h, complete ≈ T+2:39, on exactly HRRR’s Lambert grid: 1799 × 1059, Latin 38.5°, LoV 262.5°, founding sites ~200–236 km inside).

Both retire 2026-10-06 at 12 UTC, the day RRFS and REFS become operational and NAM, HREF, SREF, and HiresW (except Guam) are terminated — SCN 26-48 Updated, originally “on or about” 2026-08-31 and since rescheduled to October 6, with a parallel NOMADS feed expected ~2026-08-11. Both catalogue entries declare the machine-readable sunset (date 2026-10-06, successor rrfs); the RRFS section below records the verified successor.

Verified facts (2026-08-08):

  • awphys is the 12 km isobaric product; awip12 is not. Live awip12 carries no isobaric band at all (208 records to awphys’s 454; its only “mb” records are scattered diagnostics), and its one unique contribution is layered cloud — LCDC/MCDC/HCDC, which awphys lacks (TCDC only). The parent build therefore reads awphys plus three byte-ranged cloud records per hour from awip12; the two files share grid 218 exactly and their common fields decode bit-identical.
  • The full 9-level curated band (TMP/RH/HGT/UGRD/VGRD) exists on both products, with omega (VVEL, paramId 135, Pa/s, instantaneous) at all nine levels.
  • Level moisture is RH at all nine levels: the nest publishes level DPT only at 925/850/700 and awphys none, so level dew points are computed from RH. A true 2 m dew point is hourly on both products.
  • GUST:surface is instantaneous (paramId 260065, PDT 0) — NAM publishes no hour-max gust, so the catalogue’s gust: "instant" carries the same not-comparable-to-ECCC caveat as HRRR and GFS.
  • The un-suffixed SHTFL/LHTFL records are genuinely instantaneous (PDT 0) on both products; the nest also carries 3-h-average twins (paramId 235033, PDT 8), cleanly distinguished — and skipped — by the idx ave suffix.
  • Winds are grid-relative on each product’s own Lambert cone: the nest shares HRRR’s projection parameters while the parent uses Latin 25°/LoV 265°, so the rotation to true north is a per-product constant (~12° direction bias at the founding sites if skipped; confirmed empirically against earth-relative GFS components). NCEP packs each UGRD/VGRD pair as two submessages of one GRIB message (idx lines N.1/N.2 at a shared byte offset), so one ranged fetch returns both components.
  • Precipitation is a resetting bucket: the nest’s resets every 3 h, the parent’s every 12 h through its hourly phase, and the parent’s 3-hourly tail (f39–f84) publishes a direct (h−3)–h record. At bucket boundaries two APCP records coexist in a parent file (12-24 beside 21-24 at f24) — records are selected by the exact idx window token, never by variable name alone.
  • Nest fields carry a sparse bitmap (~76–105 of 1.9M points, surfaced by ecCodes as in-band 9999); the samplers publish a masked gridpoint as absence, never a value.
  • Terrain HGT:surface is published every hour on both products — none of the hour-000-only special-casing the ECCC models need.
  • Surface-based CAPE/CIN (plus mixed-layer/most-unstable variants), HPBL, and the 2 m/10 m surface set are present at every hour including f00 as analysis records.
  • Cost: nest ~111 MiB per forecast hour (~6.7 GiB per run); parent ~12 MiB per hour (~0.7 GiB per run) — ~61 records per forecast hour each.

The Rapid Refresh Forecast System is the verified NAM successor: at cutover the two NAM entries collapse into a single rrfs leg carrying the nest’s 3 km resolution and the parent’s 84 h horizon. Verified 2026-08-08 against the noaa-rrfs-pds prototype bucket, which already uses the operational naming from SCN 26-48 (rrfs.tCCz.prslev.3km.fFFF.conus.grib2 plus a 2dfld companion, both with .idx):

  • One 3 km North-America integration; conus, ak, hi, and pr are distribution cutouts, and the CONUS cutout is exactly the HRRR grid (sites 224–236 km inside). Which cutout a builder fetches is transport detail, which is why the slug is rrfs, not rrfs-conus.
  • Hourly cycles; 00/06/12/18Z run to 84 h, the others to 18 h. Prototype 12Z f084 landed ≈ T+3:31.
  • prslev carries the full 9-level curated band with TMP/RH/DPT/HGT/UGRD/VGRD — but vertical velocity is DZDT (geometric w, m/s), not omega; VVEL is absent at band levels. The port will convert at build (ω ≈ −ρgw) and declare verticalVelocity: "fromGeometricW" so consumers can see the provenance.
  • 2dfld carries instantaneous and hour-average SHTFL/LHTFL, instantaneous GUST, surface-based CAPE/CIN plus the variant menu, HPBL, layered cloud, and hourly-bucket APCP.
  • NCEP warns decoders that record content, order, and scaling may change at implementation — everything above is re-verified against the parallel feed (nomads…/com/rrfs/para/, expected ~2026-08-11) or the production paths before the port lands.
  • REFS (five RRFS members plus HRRR-initialized members, to 60 h at 00/06/12/18Z) is a potential future ensemble leg beside REPS and GEPS.

ECCC’s Regional Ensemble Prediction System: 21 members (a control plus 20 perturbed), rotated lat-lon at 0.09° (~10 km, 908 × 960 points), four runs a day (00/06/12/18Z), 3-hourly to 72 hours — no hourly output, complete ≈ T+3:40–3:45 (verified 2026-08-08). Every member is derived as its own atmosphere and the published file carries the percentile spread of the derived quantities — including per-level ensemble soundings. Read the product semantics in Ensemble values.

Transport is Datamart only, under YYYYMMDD/WXO-DD/ensemble/reps/10km/grib2/HH/hhh/ (the legacy /ensemble/reps/ tree is dead, 404); the earlier GeoMet-WCS/Datamart hybrid is retired. Verified facts (2026-08-08):

  • Every raw-variable file stacks all 21 members as GRIB messages keyed by perturbationNumber, 0 the control (typeOfEnsembleForecast 1 for the control, 4 for perturbed members). There are no per-member files, and no upstream percentile products for raw variables — the pipeline computes percentiles from members itself.
  • Isobaric fields (TMP, RH, HGT, UGRD, VGRD) exist at a fixed 9-level set: 50/100/200/250/500/700/850/925/1000 hPa — per-member wind at every level, which WCS never carried. The five levels in the pilot band publish as sounding levels (1000/925/850/700/500; 500 doubles as the parcel-search headroom, and 1000 — at mountain sites also 925 — typically sits below REPS model terrain and is dropped per member by the derivation’s own filter).
  • No omega, and no dew point in any form — level and surface moisture come from RH, converted against temperature. No WDIR/WIND at levels: the rotated grid’s UGRD/VGRD are grid-relative (uvRelativeToGrid=1) and are rotated to true east/north before the direction convention is applied; skipping the rotation produced a ~24° error in verification. See Seven forecast-data failures that passed parsing.
  • Heat fluxes (SHTFL_SFC/LHTFL_SFC) are instantaneous W/m², per member. Precipitation is run-total accumulation, differenced at 3 h. Hour 000 publishes no flux or precipitation files.
  • None of the science-field families exists per member — no gust, no CAPE/CIN, no PBL height, and only total cloud (full 00Z/024 listing inventoried, 003 re-checked, 2026-08-08). REPS’s capabilities are false across the board; an ensemble-CAPE-spread product cannot be built from this feed (GEPS, below, supplies it).
  • Cost: ~383 MB per step for the windgram field set — ~9.4 GiB per run against the ~1.5 GiB the retired hybrid moved. There is no partial fetch: whole-domain, all-members, no index.

ECCC’s Global Ensemble Prediction System: 21 members (a control plus 20 perturbed, one all-members file per field exactly as in REPS), regular 0.5° global lat-lon (720 × 361, uvRelativeToGrid=0 — components are earth-relative and nothing is rotated, unlike REPS), 00Z and 12Z, on the feed’s own schedule of 3-hourly to 192 hours then 6-hourly to 384 — sixteen days, the longest ECCC horizon here — complete ≈ T+5:07 (verified 2026-08-08). The occasional Thursday 00Z extension to 936 hours is not fetched. It extends the REPS ensemble product from three days to sixteen and adds the one thing REPS cannot supply: per-member storm-risk spread. Verified facts (2026-08-08):

  • Raw members still use the old CMC naming, CMC_geps-raw_<VAR>_<LVL>_<level>_latlon0p5x0p5_YYYYMMDDHH_Phhh_allmbrs.grib2, under YYYYMMDD/WXO-DD/ensemble/geps/grib2/raw/HH/hhh/ — not the MSC scheme the deterministic models migrated to.
  • The legacy HGT_SFC orography is in decametres and its GRIB metadata lies about it [verified 2026-08-08]: the field decodes as units=m, paramId=228002 — indistinguishable from REPS’s genuinely metric field — but the values are dam (global max 586.3 = the smoothed Himalaya ×10; Dundee 153.6 → 1 536 m beside GDPS’s 1 525 m). Pressure- level HGT_ISBL files are true metres; only the surface datum is decametric. The builder scales ×10 and guards against both this bug and its inverse; any future consumer of the raw feed must too.
  • Per-member surface-based CAPE_SFC and CIN_SFC exist at every step (97 files per step; the inventory is identical at hours 024, 198, and 384). This is the marquee: the ensemble CAPE/CIN percentile spread that REPS cannot provide, published as conditional percentile blocks. The member spread is real — 167 to 1 311 J/kg CAPE across the 21 members at one site on the verification day.
  • GEPS’s CAPE sentinel is an exact −1 (the HRDPS family’s marker, ~42 % of the globe per member on the verification day) — not RDPS/GDPS’s 9999: real GEPS member CAPE reached 9 755 J/kg that day, so a 9999 mask would erase genuine extreme instability. CIN carries no sentinel at all — it is computed even where CAPE is flagged, and its values nearest −1 are ordinary packing bins, so all 21 members rank.
  • Isobaric fields in the pilot band match REPS’s shape: TMP/RH/HGT and per-member UGRD/VGRD at 1000/925/850/700, with 500 as the parcel-ceiling headroom (nothing exists between 700 and 500). Omega is at 850 only and is not published. No dew point in any form — moisture is RH at the levels and at 2 m — and no WDIR anywhere: direction comes from the earth-relative components, no rotation involved.
  • Heat fluxes are time-integrated from run start (paramId 146, J/m², stepType=accum, stepRange 0–h), unlike REPS’s instantaneous values: the builder publishes the mean W/m² over the window ending at each valid time, (A(h₂)−A(h₁)) / ((h₂−h₁)·3600) per member, with the window following the schedule’s own 3 h then 6 h cadence. Precipitation is the same run-total differencing. Hour 000 publishes neither, so the first window’s baseline is zero by definition; per-member terrain (HGT_SFC) is at PT000 only.
  • No gust, no PBL height, and only total cloud per member — those capabilities are declared false, like REPS’s.
  • Verify every download against Content-Length. One GEPS fetch returned another model’s bytes, correct on retry; the Datamart client now length-checks every download because of it. See Seven forecast-data failures that passed parsing.
  • Retention matches REPS; the legacy /ensemble/geps/ tree is likewise dead.
  • Cost: ~150 MB per step for the windgram field set (36 all-members files) — ~14 GiB per run over 96 steps, twice daily. The heaviest feed in the pipeline, which is why the workflow builds it last.

RAQDPS 10 km — supported, smoke documents

Section titled “RAQDPS 10 km — supported, smoke documents”

ECCC’s Regional Air Quality Deterministic Prediction System (GEM-MACH): 10 km, runs 00Z and 12Z, hourly to 72 h, standard Datamart transport shared with the models above. It feeds no wind profiles — it is the source of the per-site smoke documents, where its verified paths, fields, units, and join semantics live. The catalogue lists it under smokeModels, separate from models so pre-smoke consumers keep parsing. Fetch cost is the lightest of any ECCC feed: three whole-domain files per hour, ~43 MB per run.

GOES-18 DSR and AOD — supported, observations

Section titled “GOES-18 DSR and AOD — supported, observations”

NOAA’s GOES-18 (GOES-West) supplies the dataset’s measurements: two ABI L2 full-disk products, anonymous NetCDF on the noaa-goes18 bucket — Downward Shortwave Radiation under ABI-L2-DSRF and Aerosol Optical Depth under ABI-L2-AODF. They feed no wind profiles — each is the source of a per-site observation dataset (goes18-dsr, goes18-aod), where the products’ decode, quality, and geometry facts live. The catalogue lists them under observationModels, separate from models like smokeModels. Feed facts (verified 2026-08-10):

  • Six granules per hour for both products (scan Mode 6, starts at :00/:10/…). DSRF lands on the bucket ~6–7 minutes after scan end — roughly 16 minutes after scan start; AODF is quicker at ~3.3 minutes after scan end. No runs, no forecast hours: the builder fetches granules newer than the last published instant.
  • Granule sizes track daylight on the disk: DSRF runs 9 MB (night) to 40 MB (full daylight), AODF 0.6–1 MB at night and 32–41 MB in daylight.
  • The DSRF archive changes character in April 2024 (last legacy day 2024-04-16, first new day 2024-04-17, NOAA OSPO message MSG_20240307_1955): the Baseline algorithm’s hourly full-disk DSR on a 0.5° lat/lon grid was replaced by the Enterprise algorithm’s 10-minute product at 2 km on the ABI fixed grid. Much older documentation — including the PUG Volume 5 DSR chapter — describes the legacy product; the operative authorities are the file metadata and the Enterprise SRB ATBD v5.0 (Laszlo, Kim & Liu 2020).
  • AODF switched algorithms on 2024-02-06, when the Enterprise (EPS) aerosol retrieval became operational. The file format did not break the way DSRF’s did, but the retrieval did change — most consequentially the quantitative view-zenith limit, raised from 60° to 78.5°; what that means for a published value lives in the observation document reference. Older documentation describes the Baseline aerosol algorithm.
  • Ingest is byte-ranged by default [verified 2026-08-10, live]: both products’ value variables are gzip+shuffle uint16 in (24, 5424) chunks — full-row bands — and the four catalogued sites span rows 470–481, exactly two value chunks plus two DQF chunks per granule. Reading only those over HTTP Range (h5py on a seekable ranged reader) costs ~757 KB per AODF granule against 40.6 MB whole-file (54×) and ~849 KB against 39.7 MB for DSRF (47×) — about 230 MB/day for both products at full cadence instead of ~11 GB. Ranged values are bit-identical to the whole-file decode path (regression-tested), and any ranged-path failure falls back to the whole file automatically — a fallback is logged, never an error.

ECMWF IFS open data — evaluated, not adopted

Section titled “ECMWF IFS open data — evaluated, not adopted”

ECMWF’s open-data IFS offers a 15-day horizon (360 h at 00/12Z since cycle 50r1) under CC-BY-4.0. Two missing inputs ruled it out:

  • No surface heat fluxes are published. w* has no direct input. The physics would need a radiation-proxy flux: net solar radiation partitioned by an assumed Bowen ratio. That method produces a less defensible forecast than models that publish surface fluxes and requires a different product label.
  • Only four levels of the curated 1015–600 hPa band exist in the open-data set (925/850/700/600) — and at the founding mountain sites, 925 hPa is below the model terrain. Three usable levels do not define a sounding; interpolation would dominate the boundary-layer and stability estimates.

The 15-day horizon could support a labelled proxy-physics outlook. It cannot support the same windgram contract as models that publish surface fluxes and a deeper pressure column.

NOAA’s Rapid Refresh survives the 2026-10-06 retirements (RRFSv1 replaces NAM, HREF, SREF, and HiresW only) and cycles hourly — to 21 h every hour and 51 h at 03/09/15/21Z, complete ≈ T+1:15–1:35 (verified 2026-08-08). Two findings decided against it:

  • The native wrfprs product uses NCEP-local GRIB template 32769 (rotated lat-lon, Arakawa non-E), which ecCodes cannot geolocate. The usable pair is awp130pgrb (grid 130, 13 km Lambert, sites ~1,000 km inside): the full 9-level curated band including omega and level dew point, plus the science set — but no heat fluxes, which live only in the awp130bgrb companion. Two files per hour for the contract.
  • Everything it publishes for this product, HRRR already publishes at 3 km; the only addition would be the 51 h tail on four cycles, and its own lifetime is bounded by RRFSv2 (MPAS engine, 2027–28).

The omission is a decision, not a blind spot: a feed-viable model whose job here is already done by a finer sibling on the same buckets.

DWD’s global ICON (~13 km) is the one candidate that would add a non-North-American physics and data-assimilation lineage to the catalogue — a genuine cross-model disagreement signal, published as open data under CC-BY 4.0. Verified facts (2026-08-08):

  • Open data serves only the native icosahedral grid (R3B07), one bz2-compressed GRIB2 file per field, level, and step — no .idx, no regular-lat-lon global product, ~1-day retention (fetch-fresh only). ICON-EU and ICON-D2 do not cover BC. Sampling is tractable — DWD publishes time-invariant CLAT/CLON, so a cached nearest-cell index per site works — but adoption costs a new transport (bz2, thousands of per-field files, an unstructured-grid sampler), not new physics work.
  • 00/12Z run hourly to 78 h then 3-hourly to 180 h (06/18Z to 120 h); the 00Z 180 h file landed ≈ T+3:29.
  • The pressure-level set holds only 6 of the 9 curated band levels (925/900/850/800/700/600 — no 875/750/650).
  • Fluxes (ASHFL_S/ALHFL_S) are averages since model start — GFS/GEPS-style differencing, plus DWD’s positive-downward sign convention to verify and flip at build. Gust is VMAX_10M (hour-max family); layered cloud (CLCT/CLCL/CLCM/CLCH) exists.
  • No PBL height, no surface-based CAPE, no CIN (only CAPE_ML and CAPE_CON) — under the current contract’s surface-based pair, cape, cin, and pblHeight would all be declared false.

Not adopted for now: the feed poses no blocker, and whether the independent lineage justifies a transport of its own is a judgment the catalogue can revisit.

  • ECCC (HRDPS, RDPS, GDPS, REPS, GEPS): used under the Environment and Climate Change Canada Data Server End-use Licence. Derived profiles carry the attribution requirement.
  • NOAA (HRRR, GFS, NAM, GOES-18 — and RAP/RRFS if adopted): U.S. government open data. Attribution is requested, and use implies no NOAA endorsement of this project.
  • ECMWF open data is CC-BY-4.0 — relevant only if an IFS-based leg is adopted later.
  • DWD open data is CC-BY 4.0 — relevant only if an ICON leg is adopted later.

Provider overviews: HRDPS, RDPS, GDPS, REPS, GEPS, HRRR, GFS, NAM, RRFS, and GOES.