Nocturnal bird migration across the North Atlantic, measured live by weather radar.
Data: aloftdata.eu · NOAA NEXRAD · ECMWF · Full guide: How to read this map in the left panel · Reopen this screen with the ? button (top-right) or the ? key · build 81642f36
Companion site: BirdsWhere — thebirding.site — a free, in-browser map of bird observations and distribution: where each species is recorded, when it occurs through the year, and live sightings, with field logging and offline maps.
Two sources, one recipe. Europe arrives already processed: aloftdata.eu publishes vertical profiles (VPTS) that vol2bird has computed from the ODIM volumes of 139 BALTRAD radars. The US east coast does not, so this site fetches the raw WSR-88D Level II volumes (one every ~6 min) for 15 Atlantic and Gulf radars, Maine to Key West and Tampa, keeps a rolling 30-day raw archive, and computes an equivalent profile for each complete radar-day with the same recipe and the same constants as vol2bird.
Gate selection. Every elevation sweep is used, at ranges of 5–35 km; beam height comes from the standard 4/3-earth propagation. A gate is kept as biology only if reflectivity is between −8 and 20 dBZ (the ceiling removes rain and the ~4 km melting-layer bright band), the correlation coefficient ρhv is between 0.50 and 0.90 (lower is noise, higher is precipitation or melting), and the differential reflectivity ZDR is between −6 and +3 dB (high positive values are insects). Velocities need no dealiasing: the ~28 m/s Nyquist limit exceeds bird plus wind speeds.
Reflectivity to birds. Each retained gate is converted with the radar equation used by vol2bird and bioRad, η = (1000·π5/λ4)·|K|2·10dBZ/10 cm²/km³ with |K|2 = 0.93. The wavelength is not stored in Level II, so it is derived per radar from each volume’s Nyquist velocity and unambiguous range (≈10.4–10.6 cm; an 8% spread in η if a nominal value were used). Gates are binned into 25 layers of 200 m up to 5 km; a layer reports when it has at least 20 biological gates, with density = mean η / 11 cm², the standard bird radar cross-section that Europe uses as well.
Speed and heading. Per layer, a least-squares VAD fit of radial velocity against the sine and cosine of azimuth gives the east and north components of ground velocity, hence speed and direction. Layers whose fit residual is below 1 m/s (the S-band threshold) behave like coherent wind rather than a flock and are flagged as non-bird.
Same aggregation, same units. The US profile is written in the 26-column aloft VPTS layout, so the identical aggregation code handles both networks: per layer, migration traffic = density × speed × 3.6 × 0.2 km (birds/km/h), summed over layers and scaled by the phase length to MT (birds crossing 1 km in the phase); “Birds only” keeps layers moving at ≥ 8 m/s over the ground, because insects drift with the wind and birds self-propel; each layer goes into one of eight heading sectors by its own direction; mean altitude is density-weighted. Phases with fewer than two profiles are dropped.
Calibration. There is no empirical scale factor between the continents. Comparability rests on using the same η formula, dielectric factor, cross-section, layer grid, speed screen and aggregation. Before the gate windows above were tightened (from any ρhv < 0.95 and reflectivity up to ~32 dBZ) US densities ran 5–13× above Europe; with them, the two networks sit on the same scale. Remaining differences to vol2bird: a per-layer VAD instead of its 3-D VVP, no range correction for beam broadening and overshoot, no clutter map or precipitation-texture filter, one mean heading per layer, and no validation against BirdCast yet.
Solar phases. Both networks are binned with the same NOAA solar equations on each radar’s own coordinates, so a phase is local everywhere: Day (an hour after sunrise to an hour before sunset), Dusk (sunset ±1 h), Night I–III (the dark core in thirds, up to 3 h each), Dawn (sunrise ±1 h), plus polar day and night. A phase’s MT uses its defined length, so a radar outage lowers coverage, not traffic.
What it is. A null model: a tracer is a passive parcel, dx/dt = W(x, t), showing where the wind alone would carry a bird. It has no airspeed or heading of its own, so a trace is drift, not a track; compare it with the radar arrows to separate wind from the birds’ own effort.
The wind. ECMWF IFS open-data forecasts on a 0.25° grid at 3-hour steps out to 72 h, at 925 and 850 hPa (about 800 and 1500 m); per cell the stronger of the two is taken as the migration-band wind (the same rule as the barbs). It is subsampled to 1.5° over 84°W–40°E, 15–82°N, and for each date and solar phase the 3-hourly steps falling in that phase are averaged into one frozen field. In Whole day mode the field is the day’s phase fields averaged cell by cell, weighted by nominal phase length (day ~10 h, a night third ~3 h, dusk / dawn ~2 h); frost and precipitation regions are then the union over the day. Days backfilled from ERA5 carry 925 hPa only.
Integration. Tracers move only when the timeline steps forward. Each step covers the frame’s real phase length (the median of the reporting radars’ phase hours, about 3.4 h for a night third) in eight sub-steps of ~25 min using Heun’s method (second-order Runge–Kutta) with bilinear sampling of the field, on equirectangular kinematics with a cos(latitude) longitude scaling floored at 0.2. There is no interpolation between successive phase fields. A tracer in a cell without wind data coasts on its last velocity with a 12-hour e-folding decay; one that leaves the domain is removed. Scrubbing backwards clears every tracer; there is no reverse advection. In Whole day mode one step runs the date’s phases in turn (day, dusk, night I–III, dawn: each with its own radar releases, wind field and real length, ~24 h in all) and shows only the end-of-day positions as dots. The Display setting picks how the swarm is drawn: fading trails (the step's path), a dot with a 4-day tail of past positions, dots only, or a kernel-density field (Gaussian, ~12 px, scaled to its maximum) of where the tracers are now.
Dispersion. Each tracer carries a fixed personal drift of up to ±0.75 m/s in each axis plus ±0.5 m/s of jitter per sub-step, a crude stand-in for sub-grid turbulence and individual variation. At most 4000 tracers exist at once.
Seeding. A click drops 36 immortal tracers within ±0.45° of longitude and ±0.3° of latitude. A right-click seeds the American Atlantic coast (Miami to Cape Chidley, every 0.2°), and optionally the European seaboard (North Cape to Morocco, every 0.25°). With radar-driven release on, each phase every radar releases round(MT / 250) tracers, MT being its bird-only traffic in birds/km for the phase, spread over the shoreline points nearest to it (within 3.5° in the US, 4° in Europe); day phases release a quarter of that, since daytime echoes are mostly insects and local movement.
Endurance. Every released tracer (departure lines and radar releases alike) draws its expected endurance from the same guild prior: 70% 72–96 h (small passerines), 22% 96–144 h, 8% 144–336 h (large waders and seabirds). Its trace fades from 85% of that endurance and the tracer is removed once it has outlived it, i.e. once it is more likely dead than alive. The tiles carry no per-bird speed, so size is not read from the radar; the prior is the only size cue.
Assumptions and limits. Passive transport only; a single wind level (no altitude selection, no shear); one mean wind per phase; no landfall, stopover, refuelling or landing; no reverse time; straight-line kinematics on a flat projection. Real migrants add 10–20 m/s of self-propelled flight and choose their altitude, so the traces are a baseline against which the measured headings can be read, not a forecast of where birds go.