prop/lib
Graham McIntire 139d9f7cbe
feat(hrdps): HrdpsClient — fetch_grid for Canadian propagation grid
Stage 1 of the HRDPS plan. Mirrors HrrrClient.fetch_grid/3's signature
so PropagationGridWorker can call either polymorphically.

Architectural shape per the probe wedge findings:
- ECCC's date-prefixed datamart URL structure
  (dd.weather.gc.ca/{YYYYMMDD}/WXO-DD/model_hrdps/...)
- One-variable-per-file model — fetch ~14 small GRIB2s concurrently,
  byte-concatenate into a single multi-record binary, hand to
  Wgrib2.extract_points_from_file. wgrib2 reads multi-record files
  natively so no -merge step is needed.
- wgrib2's -lon flag handles the rotated-lat/lon reprojection
  internally — no manual rotation math.

Variable catalog covers the surface set the propagation scorer reads
plus the 1000-700 mb pressure-level set used by the refractivity
gradient. PWAT is unavailable in HRDPS f000 inventory; the scorer's
PWAT factor will fall back to its default for HRDPS-derived points.

DEPR (T-Td depression) is treated as an alternate primary; when DPT
is absent build_profile_from_extracted derives dewpoint as
temp - depression so downstream consumers see the same shape as HRRR.

Plan task 1.6 (CYYR projection sanity check vs UWYO sounding) is
covered by the live probe at lib/mix/tasks/hrdps_probe.ex which
already validated wgrib2's rotated-grid handling against five
Canadian cities; the production implementation routes through the
same Wgrib2.extract_points_from_file path that the probe used.
2026-04-29 16:58:47 -05:00
..
microwaveprop feat(hrdps): HrdpsClient — fetch_grid for Canadian propagation grid 2026-04-29 16:58:47 -05:00
microwaveprop_web perf(map): /scores/cells binary endpoint, client-side fetch + band/time prefetch 2026-04-29 14:27:20 -05:00
mix/tasks docs(hrdps): plan + probe wedge for Canadian propagation grid 2026-04-29 16:47:15 -05:00
microwaveprop.ex initial 2026-03-28 11:28:47 -05:00
microwaveprop_web.ex chore(deps): drop gettext 2026-04-24 12:31:21 -05:00