Wind component storage measurement
Storing u/v uses 8.90 % more Parquet bytes than speed/bearing in this 24-run sample. Here, u is eastward velocity and v is northward velocity; polar storage holds speed and meteorological bearing. Adding scalar-mean speeds increases the u/v total by another 17.90 %. The maintainer chose u/v alone. The measurement compares storage and spatial cancellation; no forecasting model was trained or scored.
The contrasts (planned) compare u/v against polar storage, then scalar means against u/v.
Planned means specified before measurement, rather than proposed future work.
The sample contains the 15th and last day of every month in 2025, all at 00Z, with no unavailable
dates or substitutions. Each forecast contains 85 native steps, 51 members, and 1,671 H3 cells:
7,243,785 rows per forecast and 173,850,840 rows per representation. Seasons group forecasts by
initialization month; forecasts may cross season boundaries. The comparison uses the same
downloaded bytes and H3 weights for all
representations and the actual production write_nwp, including 13-bit significand rounding,
sort order, and writer properties. Non-wind compressed-column bytes match exactly in every pair.
Scalar-gap statistics precede writer rounding and measure spatial cancellation. Native rows receive equal weight, rather than weighting 6-hour intervals twice as much as 3-hour intervals. These descriptive sample statistics have no sampling confidence interval and should not be read as turbine-power losses or forecast-skill changes. The scalar means use grid-point magnitudes before H3 aggregation; vector magnitudes use aggregated u/v.
Parquet totals include file metadata; Delta-log bytes are separate. MB means 10⁶ bytes.
| Run | Polar MB | Components MB | Components + scalar MB | Components vs polar | Scalar vs components |
|---|---|---|---|---|---|
| 2025-01-15 | 156.691 | 171.854 | 203.308 | +9.68% | +18.30% |
| 2025-01-31 | 160.675 | 175.670 | 206.962 | +9.33% | +17.81% |
| 2025-02-15 | 159.015 | 173.487 | 203.496 | +9.10% | +17.30% |
| 2025-02-28 | 159.407 | 172.614 | 205.128 | +8.28% | +18.84% |
| 2025-03-15 | 164.301 | 177.288 | 208.593 | +7.90% | +17.66% |
| 2025-03-31 | 155.347 | 169.111 | 199.966 | +8.86% | +18.25% |
| 2025-04-15 | 166.277 | 178.438 | 209.180 | +7.31% | +17.23% |
| 2025-04-30 | 160.404 | 172.336 | 203.512 | +7.44% | +18.09% |
| 2025-05-15 | 154.936 | 165.225 | 195.571 | +6.64% | +18.37% |
| 2025-05-31 | 157.580 | 172.904 | 202.777 | +9.72% | +17.28% |
| 2025-06-15 | 151.185 | 166.925 | 197.334 | +10.41% | +18.22% |
| 2025-06-30 | 156.712 | 171.037 | 201.532 | +9.14% | +17.83% |
| 2025-07-15 | 157.777 | 172.362 | 203.636 | +9.24% | +18.14% |
| 2025-07-31 | 152.474 | 168.528 | 198.657 | +10.53% | +17.88% |
| 2025-08-15 | 154.787 | 166.967 | 197.632 | +7.87% | +18.37% |
| 2025-08-31 | 155.137 | 170.673 | 201.024 | +10.01% | +17.78% |
| 2025-09-15 | 159.375 | 173.238 | 204.059 | +8.70% | +17.79% |
| 2025-09-30 | 152.744 | 169.412 | 201.065 | +10.91% | +18.68% |
| 2025-10-15 | 159.284 | 172.619 | 205.097 | +8.37% | +18.81% |
| 2025-10-31 | 153.565 | 168.419 | 198.036 | +9.67% | +17.59% |
| 2025-11-15 | 167.997 | 180.338 | 211.120 | +7.35% | +17.07% |
| 2025-11-30 | 159.878 | 175.670 | 206.405 | +9.88% | +17.50% |
| 2025-12-15 | 160.470 | 174.823 | 206.012 | +8.94% | +17.84% |
| 2025-12-31 | 165.823 | 180.188 | 211.009 | +8.66% | +17.10% |
| Pooled | 3801.839 | 4140.126 | 4881.112 | +8.90% | +17.90% |
Season labels use initialization month: DJF is December–February, MAM is March–May, JJA is June–August, and SON is September–November.
| Initialization season | Components vs polar | Scalar vs components |
|---|---|---|
| DJF | +9.00% | +17.86% |
| MAM | +7.97% | +17.80% |
| JJA | +9.53% | +18.03% |
| SON | +9.12% | +17.90% |
Relative gaps divide by vector speed and can grow very large near calm. Float32 reduction can give negative gaps of a few millionths of a metre per second. The p90 and p99 columns give the 90th and 99th percentiles, respectively.
| Initialization season | Height | Median gap m/s | Mean gap m/s | p90 gap m/s | p99 gap m/s | Max gap m/s | Median relative gap | p99 relative gap |
|---|---|---|---|---|---|---|---|---|
| All | 10m | 0.005603 | 0.028963 | 0.062992 | 0.388976 | 12.495455 | 0.001123 | 0.341230 |
| All | 100m | 0.005611 | 0.029196 | 0.059674 | 0.404843 | 15.059071 | 0.000745 | 0.208773 |
| DJF | 10m | 0.005408 | 0.024245 | 0.055894 | 0.294605 | 12.495455 | 0.001008 | 0.246461 |
| DJF | 100m | 0.005257 | 0.023545 | 0.050997 | 0.288733 | 14.726501 | 0.000628 | 0.119385 |
| MAM | 10m | 0.006211 | 0.034742 | 0.075836 | 0.486793 | 8.650116 | 0.001363 | 0.448944 |
| MAM | 100m | 0.006213 | 0.034734 | 0.071415 | 0.504203 | 10.132929 | 0.000916 | 0.287409 |
| JJA | 10m | 0.006165 | 0.034646 | 0.073690 | 0.502721 | 9.927805 | 0.001386 | 0.445549 |
| JJA | 100m | 0.006312 | 0.035810 | 0.072497 | 0.533910 | 12.314890 | 0.000967 | 0.313362 |
| SON | 10m | 0.004801 | 0.022219 | 0.049803 | 0.275305 | 10.586609 | 0.000851 | 0.227443 |
| SON | 100m | 0.004853 | 0.022694 | 0.047500 | 0.287019 | 15.059071 | 0.000569 | 0.125578 |
| Arm | Delta-log bytes |
|---|---|
| polar | 112217 |
| components | 109905 |
| scalar | 120572 |
Reproduce the comparison
The measurement uses frozen experimental schemas, not the current production schema.
Before creating the frozen worktrees, save components.patch and scalar.patch from the current
checkout's studies/wind_storage/variants/ directory outside those worktrees. Create three isolated
worktrees at commit e3bcb44c, then cherry-pick 1bef88b2 and ad2ea712 into each. Keep the polar
worktree unchanged; apply the saved component and scalar patches to their respective worktrees
and commit each variant. Use the same
uv.lock, H3 weights, and raw cache for all three. The scripts and detailed instructions are in
studies/wind_storage/README.md. Generated reports and full records live under
data/studies/wind_storage/; the summary provenance
records hashes of the input manifest, H3 weights, measurement records, reporting script, and
unmodified generated summary. The published tables copy the generated summary.
Two independent scientific reviews found no material blockers. The reviews checked paired row inventories, non-wind byte equality, report provenance, and independent raw-grid reductions, including an extreme cancellation row. OpenAI Codex performed the reviews; human review is pending. The measurement does not establish that scalar speed is unhelpful at wind-generation sites. A matched power-forecast comparison is a separate experiment after archive migration and baseline preparation.