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.