Soaring forecast tool for Canadian pilots — powered by ECCC numerical weather models.

What is this

canadarasp is a free weather forecasting tool built specifically for soaring pilots in Canada. It downloads raw model output from Environment and Climate Change Canada (ECCC), computes soaring-relevant variables, and presents them as windgrams and colour-contour maps.

The project is a ground-up rewrite of the original RASP (Regional Atmospheric Soaring Prediction) pipeline, replacing shell scripts and Lisp rendering code with a modern Python stack that runs on a single low-cost VPS. About the original canadarasp project ↗

Key features

Windgrams
Per-site atmospheric profiles showing thermal strength, BL depth, cloud cover, wind and lapse rate across the full forecast period.
Contour maps
Pan-Canada colour-coded maps of WSTAR, BLDEPTH, winds, CAPE, precipitation and more — scrubable hour by hour.
HRDPS 2.5 km
Continental Canada coverage. 2.5 km grid, 06Z and 18Z cycles, 48-hour horizon. Ready ~7 hours after model init (~6 am and ~6 pm PDT).
HRDPS 1 km — West
Experimental 1 km model covering BC and western Alberta. 00Z and 12Z cycles, 48-hour horizon. Ready ~7 hours after init (~midnight and ~noon PDT). Shown automatically for western sites.
ECMWF — long-range outlook
Global 0.25° model from ECMWF Open Data, cropped to North America. 00Z and 12Z cycles, 0–360 h forecast (3-hourly to 144 h, 6-hourly after). Ready ~7.5 hours after init. Thermals derived from a sounding + skin-temperature parameterisation (experimental).

Data sources

Forecast data comes from two providers, both freely-licensed and open: ECCC Environment and Climate Change Canada for the HRDPS family, and ECMWF European Centre for Medium-Range Weather Forecasts via the ECMWF Open Data programme for the long-range outlook. No third-party providers, no paywalled feeds.

HRDPS 2.5 km High-Resolution Deterministic Prediction System, 2.5 km rotated lat-lon grid covering continental Canada. Published on dd.weather.gc.ca. Each run delivers ~700 GRIB2 files (~14 GB) covering 15 pressure levels and ~30 surface and upper-air variables across 48 forecast hours. canadarasp processes the 06Z and 18Z cycles, available at approximately 13:15 UTC and 01:15 UTC respectively.

HRDPS 1 km An experimental higher-resolution model on ECCC's alpha Datamart (dd.alpha.weather.gc.ca), covering BC and western Alberta (approx. 46–62 °N, 110–142 °W) at 1 km rotated lat-lon grid spacing. Only the 00Z and 12Z cycles are published, available at approximately 07:00 UTC and 19:00 UTC. Each run is ~200 GRIB2 files (~2 GB). This model is still in experimental status and may occasionally be unavailable; the site falls back to 2.5 km automatically.

ECMWF Open Data IFS HRES global model at 0.25° (~25 km) lat-lon, published on data.ecmwf.int. canadarasp processes the 00Z and 12Z cycles, which reach out to 360 hours (15 days) — 3-hourly steps to h144, then 6-hourly to h360. Available at approximately 07:30 UTC and 19:30 UTC. The data is cropped to North America (lat 25–80, lon −180 to −40) and only the messages we need are fetched via HTTP Range requests against the per-step .index sidecar — ~4.2 GB per run rather than the 10 GB+ a full download would pull. Soaring fields (BL depth, W*, top-of-lift) are derived from a surface-flux proxy (skin-temperature gradient + 10 m wind) because ECMWF Open Data doesn't ship sensible/latent heat fluxes — quality may differ from the HRDPS thermals.

HRDPS 2.5 km data source ↗ HRDPS 1 km download folder ↗ HRDPS 1 km technical documentation ↗ ECMWF Open Data ↗ ECMWF Open Data documentation ↗

Model schedule

Times shown are approximate — actual availability depends on ECCC processing.

Model Init (UTC) Available (UTC) Available (PDT)
HRDPS 2.5 km 06Z ~13:15Z ~6:15 am
HRDPS 2.5 km 18Z ~01:15Z ~6:15 pm
HRDPS 1 km 00Z ~07:00Z ~midnight
HRDPS 1 km 12Z ~19:00Z ~noon
ECMWF Open Data 00Z ~07:30Z ~12:30 am
ECMWF Open Data 12Z ~19:30Z ~12:30 pm

How data is processed

Download
HRDPS runs pull ~700 GRIB2 files (~14 GB for 2.5 km, ~2 GB for 1 km) from ECCC Datamart over async HTTP with resume. ECMWF Open Data is denser per-step but we only need ~10 of its ~30 fields, so the pipeline fetches the per-step .index sidecar and issues HTTP Range requests for just the messages we want — ~4.2 GB per run instead of ~10 GB.
Decode & derive
Each GRIB2 file is decoded with cfgrib into NumPy arrays. Soaring variables — thermal velocity (WSTAR), boundary layer depth (BLDEPTH), critical height (HCRIT), and cloud base — are computed from surface and pressure-level fields. For HRDPS that uses real sensible/latent heat fluxes; for ECMWF (which doesn't ship them) the same variables come from a skin-temperature-gradient flux proxy.
Tile & store
Processed fields are written into a Zarr tile store indexed by forecast hour and pressure level. Contour map tiles are rendered as 16-bit pseudo-PNGs. GRIB2 files are deleted immediately after processing to reclaim disk space.
Extract & serve
Per-site windgram JSON files (~50 KB each) are extracted from the Zarr store for every location in the site list. The Zarr store is then deleted. The web server renders windgram PNGs on demand from these compact JSON files and caches them.