WindMar v0.1.9 — Weather-routing stability validation
Independent cross-validation against a commercial weather-routing solution · five routes · May 2026
Download the full study (PDF)Method
WindMar is the weather-routing and ship-performance platform I develop as a deck officer. To gauge its reliability rather than its feature set, I confronted it with a commercial weather-routing solution on five routes spanning very different conditions. The inputs were rigorously identical on both sides — same waypoints, same departure time, same vessel (Panamax tanker, ballast) and same calm-water speed (13 kn).
The comparison deliberately excludes fuel: the two tools use different ship models, so any such comparison would be meaningless. It rests on three genuinely comparable quantities — the route geometry, the weather actually encountered (wind, wave, current), and the estimated time of arrival (ETA). Two WindMar engines are shown, isochrone and A* (Cython implementation); both optimise at constant RPM, pilot to pilot.
Headline agreement
Across the five routes, two entirely independent pipelines arrive at a very close reading of the sea-state. Mean differences:
The optimised routes follow the same corridors and ride the same currents; WindMar's two engines converge on the same track. The cyan and green lines are WindMar; magenta is the commercial optimised route; the dashed orange line is the shared initial (uploaded) route both tools start from.
Route by route
Cape Town → Walvis Bay · Agulhas current axis
| Route | Distance (NM) | ETA (days) |
|---|---|---|
| WindMar · isochrone | 2855 | 8.7 |
| WindMar · Cython A* | 2869 | 8.6 |
| Commercial · optimised | 3000 | 9.8 |
| Initial route (RTZ) | 3055 | 10.8 |
Weather encountered (WindMar / commercial): wind 5.9 / 6.7 m/s · wave 2.5 / 2.7 m · current 0.46 / 0.59 m/s · cross-track 25 NM.
Ulsan → Singapore · NW Pacific + Malacca approach
| Route | Distance (NM) | ETA (days) |
|---|---|---|
| WindMar · isochrone | 2486 | 8.0 |
| WindMar · Cython A* | 2472 | 8.0 |
| Commercial · optimised | 2557 | 8.4 |
| Initial route (RTZ) | 2566 | 8.5 |
Weather encountered (WindMar / commercial): wind 4.8 / 4.7 m/s · wave 0.69 / 0.88 m · current 0.21 / 0.26 m/s · cross-track 40 NM.
Ningbo → Singapore · dense SE-Asia archipelago
| Route | Distance (NM) | ETA (days) |
|---|---|---|
| WindMar · isochrone | 2050 | 6.7 |
| WindMar · Cython A* | 2128 | 6.9 |
| Commercial · optimised | 2270 | 7.5 |
| Initial route (RTZ) | 2365 | 7.8 |
Weather encountered (WindMar / commercial): wind 5.4 / 5.3 m/s · wave 0.64 / 0.80 m · current 0.32 / 0.31 m/s · cross-track 34 NM.
Off-Liberia → ARA range · N Atlantic + Biscay/Channel
| Route | Distance (NM) | ETA (days) |
|---|---|---|
| WindMar · isochrone | 3391 | 10.9 |
| WindMar · Cython A* | 3361 | 10.8 |
| Commercial · optimised | 3457 | 11.6 |
| Initial route (RTZ) | 3614 | 12.1 |
Weather encountered (WindMar / commercial): wind 5.9 / 5.7 m/s · wave 2.14 / 1.38 m · current 0.27 / 0.26 m/s · cross-track 15 NM. (The wave-height gap here, ~0.8 m, is the widest of the set — a Biscay/Channel sea-state difference.)
Limbe → Madre de Deus · S-Atlantic equatorial crossing
| Route | Distance (NM) | ETA (days) |
|---|---|---|
| WindMar · isochrone | 3004 | 9.3 |
| WindMar · Cython A* | 3020 | 9.4 |
| Commercial · optimised | 3039 | 9.6 |
| Initial route (RTZ) | 3130 | 10.1 |
Weather encountered (WindMar / commercial): wind 5.9 / 6.3 m/s · wave 1.84 / 1.90 m · current 0.35 / 0.33 m/s · cross-track 15 NM.
Reading the result
When an independent commercial system and a solo-built tool agree this closely on what a ship will encounter at sea — the same corridors, statistically similar conditions, comparable ETAs — it is a strong indication that the underlying physics and weather handling are sound. The small, consistent ETA offset (WindMar a little faster) reflects a difference in speed policy, not a disagreement on routing.