1. Pourquoi un score de stabilité ?

Quand on demande "quel temps va-t-il faire demain ?" à une application météo classique, la réponse est toujours la même : les valeurs du dernier run du dernier modèle calculé. Cette approche a une limite fondamentale — elle ne dit rien de la justesse de cette prévision.

Deux prévisions identiques peuvent avoir des niveaux de confiance très différents. Considérons deux scénarios pour demain à 14h :

Scénario A 9 / 10
Depuis 5 jours, tous les runs de tous les modèles prévoient un vent de 15 nœuds de nord-ouest. La prévision n'a pas bougé. La situation est robuste et bien établie.
Scénario B 3 / 10
Le dernier run prédit 15 nœuds, mais hier il en prévoyait 5, et avant-hier 25. La prévision oscille d'un run à l'autre. La situation est chaotique, difficile à prévoir.

Dans les deux cas, une application classique afficherait "15 nœuds". Solano vous montrerait 9/10 pour le premier scénario et 3/10 pour le second. C'est le cœur de la méthode Solano : mesurer la cohérence temporelle des prévisions, et non seulement leur valeur ponctuelle.

2. Les runs météo : qu'est-ce que c'est ?

Un modèle numérique de prévision atmosphérique est un programme qui résout les équations de la dynamique des fluides sur une grille tridimensionnelle de l'atmosphère mondiale. Il est initialisé à partir d'un "état initial" — une photographie de l'atmosphère à un instant précis, construite à partir de milliers d'observations : stations météo de surface, radiosondages, satellites, bouées marines, mesures d'avions en vol…

Cette initialisation se fait plusieurs fois par jour, à des heures conventionnelles exprimées en temps universel : 00Z, 06Z, 12Z, 18Z (respectivement 1h, 7h, 13h et 19h en heure française d'hiver). Chaque exécution du modèle à partir d'un état initial est appelée un run.

Quelques exemples de fréquence de publication :

À chaque run, le modèle "repart de zéro" avec un état initial légèrement différent (les observations les plus récentes y ont été intégrées), et peut produire des prévisions légèrement — ou parfois très — différentes pour une même date cible. Ce sont ces différences entre runs successifs que Solano mesure et quantifie.

Un run ne remplace pas le précédent : il co-existe avec lui. Pour une date cible qui est dans 3 jours, il existe déjà plusieurs dizaines de runs émis ces derniers jours qui ont prévu les conditions de ce jour-là. Solano conserve cet historique complet.

3. Les modèles analysés par Solano

Solano s'appuie sur la Single Runs API d'Open-Meteo, qui donne accès aux archives historiques de chaque run des grands centres de prévision mondiaux. Jusqu'à 16 modèles atmosphériques sont disponibles selon la localisation, triés du plus précis au plus large :

Modèle Centre Couverture Maille Horizon Fréquence
ICON-CH1MeteoSuisseSuisse et Alpes1 km34 h8×/j
AROME HDMétéo-FranceFrance1,5 km3 j8×/j
ICON-2IARPAE (Italie)Méditerranée2 km3 j2×/j
UKMO UK HDMet Office (UK)Royaume-Uni2 km2 j24×/j
ICON-CH2MeteoSuisseSuisse et Alpes2,1 km5 j8×/j
ICON-D2DWD (Allemagne)Allemagne et pourtour2,2 km2 j8×/j
GEM HRDPSEnvironnement CanadaCanada2,5 km2 j4×/j
ICON-EUDWD (Allemagne)Europe7 km5 j8×/j
ECMWF IFS HRESECMWFMondial9 km15 j4×/j
GEM RDPSEnvironnement CanadaAmérique du Nord10 km3 j4×/j
UKMO ¹Met Office (UK)Mondial10 km7 j2×/j
ARPEGEMétéo-FranceEurope11 km5 j4×/j
GFSNOAA (États-Unis)Mondial13 km16 j4×/j
ICON ¹DWD (Allemagne)Mondial13 km7 j4×/j
ARPEGE Monde ¹Météo-FranceMondial25 km4 j4×/j
GEM GDPS ¹Environnement CanadaMondial25 km10 j2×/j

¹ Modèle de repli mondial — affiché uniquement si la variante régionale haute résolution n'est pas disponible pour ce point (ex : ICON global hors Europe, UKMO global hors Royaume-Uni).

Pour les conditions en mer, Solano analyse également 5 modèles de vagues et courants : ARPEGE-Wave et WAM (Météo-France et ECMWF), GFS-Wave (NCEP), EWAM et le modèle de Courants Météo-France. Les modèles marins ne contribuent pas au score de stabilité atmosphérique — ils sont affichés séparément pour les points en mer.

Chaque modèle couvre des zones géographiques différentes. Lorsqu'un point GPS se trouve hors de la zone de couverture d'un modèle, ce modèle est automatiquement exclu de l'analyse. Pour les familles multi-résolution (ARPEGE, ICON, UKMO, GEM), le modèle régional haute résolution est automatiquement préféré au modèle mondial quand le point est dans sa zone.

4. Le "film des runs" : voir les prévisions évoluer

Pour un point GPS et une date cible données, Solano reconstruit l'ensemble des prévisions émises par chaque modèle pour cette date : depuis le run J-5 jusqu'au run le plus récent. Si la date cible est dans 3 jours, des dizaines de runs ont déjà prévu les conditions de ce jour — depuis différentes distances temporelles.

Ce n'est pas pareil de voir une prévision à 3 jours d'échéance (le modèle tourne aujourd'hui et prédit pour après-demain) et à 1 jour d'échéance (le modèle prédit pour demain avec des données d'initialisation plus récentes et plus précises). En général, plus on est proche du jour cible, plus la prévision est précise — mais pas toujours, et c'est précisément ce que mesure Solano.

Le graphique spaghetti de Solano superpose toutes ces courbes sur un même graphique : chaque ligne représente un run différent, colorée selon son âge. L'interprétation est immédiate :

Cette visualisation permet de distinguer une incertitude structurelle (la situation météo est intrinsèquement difficile à prévoir) d'une incertitude transitoire (les modèles avaient du mal à 5 jours mais s'accordent maintenant à 2 jours).

5. Le calcul du score — formule et pondération

Le calcul du score de stabilité suit un algorithme en quatre étapes, appliqué indépendamment pour chaque modèle et chaque date cible.

Étape 1 — Comparaison heure par heure

Pour chaque heure de la date cible, Solano calcule la moyenne pondérée de tous les runs précédents (chaque run est pondéré selon son âge — voir section 6), puis mesure l'écart entre cette moyenne et la valeur du dernier run :

Δ(heure) = |valeur_dernier_run(heure) − Σ(wi × valeur_runi(heure)) / Σwi|

La moyenne pondérée représente le "consensus historique" des prévisions pour cet instant. Si tous les runs anciens avaient dit 15 nœuds et que le dernier annonce 22 nœuds, l'écart est 7 nœuds — et le score va baisser.

Pour la direction du vent, l'écart n'est pas une différence arithmétique mais l'arc angulaire court (différence angulaire minimale entre deux caps, toujours comprise entre 0° et 180°). Cela évite de considérer que 355° et 5° sont très différents — ils ne le sont que de 10°.

Étape 2 — Moyenne sur toutes les heures

Les écarts heure par heure sont moyennés sur l'ensemble de la journée, produisant un écart_moyen par variable. C'est cette valeur unique — l'écart typique sur la journée entière — qui entre dans la formule de score.

Étape 3 — Conversion en score 0–10 par variable

L'écart moyen est converti en score par une décroissance exponentielle, paramétrée par un seuil S propre à chaque variable :

score = 10 × e−écart_moyen / S

Quelques repères concrets : à écart nul, score = 10 (stabilité parfaite). À écart = S, score ≈ 3,7 — le seuil n'est donc pas le point où le score tombe à 0, mais le point où il a déjà bien chuté. Au-delà de 3×S, le score est inférieur à 0,5 et peut être considéré comme nul. L'exponentielle est délibérément indulgente sur les petits écarts : une divergence de 1 nœud pour des rafales (S = 6) ne fait baisser le score que de 10 à ~8,5.

Variable Seuil S Poids par défaut
💨 Rafales de vent6 nœuds30 %
🌬️ Vent moyen4 nœuds20 %
🌧️ Précipitations1 mm/h20 %
🧭 Direction du vent45°10 %
👁️ Visibilité2 000 m10 %
🌡️ Température3 °C5 %
☁️ Couverture nuageuse20 %5 %

Étape 4 — Agrégation pondérée

Les scores de toutes les variables sont combinés en une moyenne pondérée. Les poids par défaut reflètent l'importance relative de chaque variable pour les activités marines et outdoor (les rafales sont le critère de sécurité le plus critique, suivies du vent moyen et des précipitations). Ces poids sont entièrement personnalisables dans les préférences de l'application.

Lorsqu'un modèle ne dispose pas d'une variable donnée (par exemple, AROME HD ne couvre pas la visibilité marine), le poids de cette variable est automatiquement redistribué sur les autres variables disponibles, afin que le score reste comparable entre modèles.

6. La décroissance temporelle

Tous les runs passés ne sont pas équivalents dans le calcul du score. Un run émis il y a 5 jours était basé sur des données d'observation bien moins récentes qu'un run émis hier — il est donc moins pertinent pour évaluer la cohérence de la prévision actuelle.

Solano applique une pondération exponentielle décroissante à chaque run selon son âge, paramétrée par une constante de temps τ :

poids(run) = e−âge_en_jours / τ avec τ = 2,5 jours

τ est la constante de décroissance : à t = τ, le poids atteint e⁻¹ ≈ 37 % (pas 50 % — la vraie demi-vie serait τ × ln 2 ≈ 1,7 jour). En pratique : un run vieux d'un jour pèse ~67 % d'un run d'aujourd'hui, un run vieux de 4 jours ~20 %, un run vieux de 7 jours moins de 6 %.

Cette décroissance reflète l'intuition météorologique : ce qui était prévu il y a une semaine est moins indicatif de la stabilité actuelle que ce qui était prévu hier ou avant-hier. Un modèle qui "change d'avis" au dernier moment est moins inquiétant qu'un modèle qui oscille depuis plusieurs jours.

Exemple : pour une date cible dans 2 jours, le run d'aujourd'hui pèse 100 %, celui d'hier pèse 67 %, celui d'avant-hier pèse 45 %, et celui de J-5 pèse 14 %. La stabilité récente est donc beaucoup plus déterminante que les fluctuations lointaines.

7. La vérification ERA5 — prévision vs réalité

Le score de stabilité mesure la cohérence interne des prévisions — il ne dit pas si les prévisions étaient justes. Pour compléter cet indicateur, Solano intègre une comparaison directe entre les prévisions historiques et la réanalyse de référence ERA5T.

ERA5 est la réanalyse atmosphérique de l'ECMWF (Centre européen pour les prévisions météorologiques à moyen terme) : une reconstruction cohérente et homogène de l'état de l'atmosphère heure par heure depuis 1940, obtenue par assimilation de données éparses (stations de surface, radiosondages, satellites, bouées) dans un modèle numérique de pointe. Ce n'est pas une mesure directe, mais la meilleure estimation possible de ce qui s'est passé. ERA5T est la version "temps réel" de cette réanalyse, disponible avec environ 1 à 2 jours de délai.

L'onglet 📡 Vérif. du panneau Spaghetti affiche, pour n'importe quel jour des 15 derniers jours disponibles :

Cette visualisation permet de répondre à une question concrète : le modèle qui avait prédit 20 nœuds pour avant-hier avait-il raison ? ERA5T donne-t-il 18 nœuds (bonne prévision) ou 8 nœuds (forte surestimation) ?

Seules les variables atmosphériques disponibles dans ERA5 récent sont affichées : vent, rafales, direction, température, précipitations, couverture nuageuse, pression. Les données marines (vagues, courants) ne sont pas couvertes par ERA5 récent.

8. La justesse récente — MAE par échéance

En automatisant la comparaison prévision/ERA5T sur les 15 derniers jours et toutes les échéances, Solano calcule pour chaque modèle une mesure de précision réelle locale : le MAE (Mean Absolute Error — erreur absolue moyenne).

MAE(modèle, variable, échéance J-n) = moyenne(|prévision(J-n) − ERA5T|) sur les 15 derniers jours

Le MAE est calculé séparément :

Ce profil de MAE par échéance révèle le comportement réel de chaque modèle sur votre point géographique précis. Un modèle peut être excellent à J-2 mais médiocre à J-7 ; un autre peut maintenir une précision remarquable jusqu'à J-5. Ces informations aident à pondérer intuitivement les prévisions selon leur échéance.

Variable Bon (<) Acceptable Faible (>)
Vent moyen3 nds3–6 nds6 nds
Rafales4 nds4–8 nds8 nds
Direction du vent20°20–40°40°
Pression MSL1,5 hPa1,5–3 hPa3 hPa
Température1,5 °C1,5–3 °C3 °C

Les MAE sont affichés dans l'application sous forme de badges colorés vert/orange/rouge dans les fiches modèles, et sous forme de graphique temporel J-15 → J-1 dans la vue Spaghetti. Ce graphique montre la courbe de dégradation de la précision avec l'échéance, caractéristique de chaque modèle sur votre point.

En Météo rapide, cette mesure est présentée par jour sous le nom « Justesse » : elle indique, pour chaque modèle et à l'échéance de ce jour (une prévision pour dans 3 jours est confrontée aux prévisions passées à 3 jours d'échéance), le bilan récent du modèle — à quel point il a été juste à ce délai. C'est un track record du modèle, à distinguer de la Confiance (accord des scénarios ensemblistes pour ce run, à venir) : la justesse regarde le passé du modèle, la confiance regarde l'incertitude de la situation présente. Les deux sont complémentaires, pas interchangeables.

Une nuance importante sur la référence. ERA5 est une réanalyse à maille large (~31 km), tandis que certains modèles vérifiés sont à maille fine (AROME ~1,5 km). Comparer un modèle fin à une référence large le pénalise sur la variabilité locale qu'il résout légitimement (brises côtières, effets de relief) — c'est une « erreur de représentativité », pas une vraie erreur du modèle. Le MAE ERA5 reste néanmoins un signal utile car il est relatif : tous les modèles sont jugés contre la même référence, donc leur classement reste informatif. Il se lit comme un « écart à une réanalyse de référence », non comme une vérité terrain au point exact — et c'est pourquoi Solano le complète par la comparaison directe aux observations réelles (bouées, aéroports) là où elles existent.

9. La confiance ensembliste — l'accord des scénarios

La stabilité regarde comment un modèle évolue d'un run à l'autre (« le film »), le MAE mesure son erreur passée. La confiance ensembliste répond à une troisième question, tournée vers l'avenir : pour cette échéance précise, les scénarios possibles concordent-ils ?

Les centres météo ne publient pas qu'une seule prévision « déterministe ». Ils lancent aussi leur modèle des dizaines de fois avec de infimes perturbations des conditions de départ — c'est la prévision d'ensemble. Si tous ces scénarios racontent la même histoire, la situation est prévisible ; s'ils divergent, l'atmosphère est à un moment « de bascule » et aucune prévision unique n'est à prendre au pied de la lettre.

Pour chaque modèle déterministe affiché, Solano compare sa prévision aux membres de son ensemble de référence — celui de sa propre famille — et calcule la part de ces scénarios qui donnent une météo pratiquement équivalente. Ce n'est pas un accord sur le seul vent : c'est un mélange pondéré de trois lectures complémentaires.

Confiance(modèle, jour) = 0,60 × accord_vent + 0,25 × accord_pluie + 0,15 × accord_pression

accord_vent = part des membres à ±30 % / ±4 nds de la valeur du modèle
accord_pression = part des membres à ±1,5 hPa (le schéma synoptique est-il verrouillé ?)
accord_pluie = part des membres dans la même classe d'intensité (sec / faible / modéré / fort)
               — pris en compte SEULEMENT quand la pluie est « en jeu »

La pluie ne pèse dans le mélange que les heures où elle est possible (le modèle est mouillé, ou au moins un membre sur cinq l'est) — sinon son poids est redistribué sur le vent et la pression, pour ne pas gonfler l'indice les jours secs. Le détail par variable (« Vent 82 % · Pluie 45 % · Pression 88 % »), avec l'acronyme de l'ensemble utilisé, s'affiche au survol de la pastille — ou d'un simple tap dessus sur mobile.

Le rattachement à l'ensemble de référence suit la logique des familles de modèles :

Chaque composante combine deux informations : la dispersion des scénarios (ensemble resserré → beaucoup de membres dans la fourchette → confiance haute ; ensemble éclaté → confiance basse) et l'accord du modèle avec son propre ensemble (un modèle collé au cœur du nuage ressort plus haut qu'un modèle « isolé »). Trois variables plutôt qu'une parce qu'une situation peut être verrouillée sur le vent mais indécise sur le passage d'un front pluvieux — et l'inverse.

Confronter chaque déterministe à son ensemble — et non à un nuage multi-centres — évite de lui imputer l'écart systématique entre modèles : deux systèmes n'ont ni la même climatologie ni la même représentation du relief, et un modèle fin dans une vallée ne « ressemble » à aucun membre d'un autre centre, quelle que soit la prévisibilité réelle. La confiance mesure ainsi l'incertitude de la situation vue par la famille du modèle, sans biais orographique parasite.

Dans l'application, la confiance s'affiche en pastille colorée en pourcentage, jour par jour, à côté de chaque journée dans la frise horaire de chaque modèle (Météo rapide) : vert ≥ 70 %, orange ≥ 50 %, rouge en dessous. Le nom de l'ensemble auquel le modèle est comparé (« vs ECMWF-ENS », « vs GEFS », « vs ICON-EPS Europe »…) est indiqué sous le pilier Confiance de la vue Cohérence et au survol (ou au tap) des pastilles. La confiance décroît naturellement avec l'échéance (plus on regarde loin, plus les scénarios se séparent) et permet de repérer d'un coup d'œil quel modèle est le mieux soutenu par ses scénarios, et quels jours sont « à surveiller ».

10. Le score de départ "Quand partir ?" — formule et calcul

Le score de départ synthétise en un seul score 0–10 les conditions météo rencontrées heure par heure sur l'ensemble de l'itinéraire, pour une activité donnée. Il est distinct du score de stabilité — il n'évalue pas la cohérence des runs mais la qualité météo absolue d'un créneau de départ.

Candidats évalués

Solano évalue 13 créneaux candidats espacés de 3 heures, de D−6h à D+30h (D = heure de départ configurée dans le panneau Route). Pour chaque candidat, le trajet est reconstitué heure par heure — positions calculées par la formule de Haversine à vitesse constante — et la météo est interpolée à chaque position.

Interpolation météo sur la route

Entre deux waypoints consécutifs, toutes les variables scalaires (vent, rafales, précipitations, CAPE, température…) sont interpolées linéairement selon la position sur le segment :

valeur(t) = valeur_A × (1 − t) + valeur_B × t    avec t ∈ [0, 1]

Les directions (vent, vagues, courants) utilisent une interpolation angulaire via les composantes sin/cos (moyenne circulaire pondérée) pour éviter les discontinuités autour de 0°/360° :

θ(t) = atan2(sin(θ_A)·(1−t) + sin(θ_B)·t, cos(θ_A)·(1−t) + cos(θ_B)·t) × 180/π mod 360

Composantes du score

Chaque composante est évaluée par une fonction piecewise linéaire sur des points de rupture [valeur → score 0–10], avec interpolation linéaire entre deux points adjacents et clamp aux extrémités.

Vent moyen (nœuds)

ActivitéOptimumSeuil dégrad.0 nds
⛵ Voile10/10 à 12 nds25 nds → 5 · 32 nds → 02 (calme = pas d'avancement)
🚢 Moteur10/10 de 0 à 10 nds20 nds → 7 · 30 nds → 3 · 40 nds → 010
🚴 Vélo10/10 de 0 à 5 nds15 nds → 6 · 25 nds → 2 · 35 nds → 010
🥾 Rando10/10 de 0 à 10 nds20 nds → 5 · 30 nds → 2 · 40 nds → 010

En voile, la cloche d'optimum reflète qu'un calme plat empêche toute progression à la voile (score 2) et que le vent fort devient dangereux (0 à 32 nds). En moteur, le vent n'impacte la coque que par la mer formée — le vent seul est pénalisé progressivement.

Rafales (nœuds)

Les rafales suivent leur propre piecewise indépendant du vent moyen. En voile, un score de 8 à 0 nds (pas 10) traduit qu'un zéphyr total sans variantes est moins agréable que quelques nœuds de brise :

⛵ Voile  : 0 nds → 8 · 10 nds → 10 · 18 nds → 8 · 25 nds → 7 · 32 nds → 5 · 40 nds → 0
🚢 Moteur : 0–15 nds → 10 · 25 nds → 6 · 35 nds → 2 · 45 nds → 0
🚴 Vélo   : 0 nds → 10 · 20 nds → 5 · 40 nds → 0
🥾 Rando  : 0 nds → 10 · 25 nds → 4 · 45 nds → 0

État de mer — seaStateScore(H, T) (voile et moteur uniquement)

L'état de mer ne se résume pas à la hauteur des vagues. Une mer de 1,5 m en 3 secondes est incomparablement plus dure qu'une houle de 1,5 m en 12 secondes. Solano utilise l'accélération verticale (inconfort physique réel pour une sinusoïde) comme critère principal, capée par la hauteur absolue :

acc = H × 2π² / T² ≈ H × 19,74 / T²   (en m/s²)

seaStateScore(H, T) = min( piecewise(acc, breaks_acc), piecewise(H, cap_hauteur) )

Les deux tables de rupture :

Accélération acc (m/s²)ScoreHauteur H (m)Score cap
0 – 0,1100 – 1,010
0,392,08
0,763,05
1,524,02
2,505,00

Exemple : H = 2 m, T = 6 s → acc = 2 × 19,74 / 36 = 1,10 m/s² → score acc ≈ 3,5 ; cap hauteur = 8 → seaStateScore = 3,5. Même hauteur avec T = 12 s → acc = 0,27 → score acc ≈ 9,2 ; cap hauteur = 8 → seaStateScore = 8.

Angle vent / cap (voile et vélo)

L'angle relatif α est calculé entre la direction du vent et le cap du segment parcouru, ramené à 0–180°. Voile valorise le travers/largue (point de voilure optimal) ; vélo valorise le vent dans le dos :

Angle α⛵ Voile🚴 Vélo
≤ 30–35° (face)0 (inutilisable)1
35–55° (près serré)43
55–80° (près bon)75
80–130° (travers / largue)8 (optimal)7
130–170° (grand largue)69
> 170° (vent arrière)59

Le scoring d'angle n'est calculé que si le vent dépasse 4 nœuds — en dessous, la direction est sans signification pratique.

Navigabilité à la voile — sailability(vent, direction, cap)

Le score d'angle ci-dessus mesure la qualité de l'allure, mais il est ignoré sous 4 nœuds — or c'est précisément le cas où l'on sort le moteur. Une composante distincte répond donc à une question binaire, heure par heure : peut-on faire route à la voile ? Deux cas l'empêchent :

α < 35° → vent debout : il faut tirer des bords, ou motoriser
vent < seuil(α) → trop peu d'air pour l'allure : moteur

seuil(α) = 5 nds si α ≤ 120° (près, travers)
seuil(α) = 8 nds si α ≥ 150° (portant)
seuil(α) = interpolé entre les deux de 120° à 150°

Le seuil dépend de l'allure parce que le vent apparent évolue en sens inverse selon le bord : au près, la vitesse du bateau s'ajoute au vent réel — l'apparent monte et l'on avance dans peu d'air ; au portant, le bateau fuit devant le vent — l'apparent tombe, il en faut davantage pour progresser. Un seuil unique de 8 nœuds pénalisait donc à tort les créneaux au près.

La composante vaut la part d'heures navigables × 10. Les ratios détaillés (part au moteur, dont vent debout et petit temps) sont exposés à côté du score sous la forme « 🔧 40 % (vent debout) ».

CAPE, précipitations, température

CAPE (J/kg) — toutes activités : 0 → 10 · 300 → 8 · 800 → 5 · 1 500 → 2 · 2 000 → 0
Précipitations (mm/h) : 0 → 10 · 0,5 → 9 · 2 → 6 · 5 → 3 · 10 → 0
Temp. vélo (°C) : 0 → 3 · 10 → 8 · 15–22 → 10 · 28 → 7 · 33 → 3 · 38 → 0
Temp. rando (°C) : 0 → 3 · 10–20 → 10 · 28 → 6 · 38 → 0

Agrégation statistique sur la route

Pour chaque composante, Solano collecte la valeur heure par heure sur l'ensemble du trajet (toutes positions interpolées, tous modèles actifs agrégés). La composante finale n'est pas la moyenne simple — elle donne davantage de poids aux moments les plus défavorables :

score_composante = 0,30 × piecewise(moyenne) + 0,40 × piecewise(p90) + 0,30 × piecewise(max)

Pour l'état de mer (les scores sont déjà calculés heure par heure, pas les valeurs brutes) :

score_mer = 0,30 × moyenne + 0,40 × p10 + 0,30 × minimum

Le p90 (90e percentile des valeurs brutes) ou le p10 (10e percentile des scores mer) capture le "pire quart" de la route sans être aussi extrême que le maximum ponctuel.

Pondération par activité et score final

Composante⛵ Voile🚢 Moteur🚴 Vélo🥾 Rando
Vent moyen24 %30 %25 %20 %
Rafales18 %25 %15 %15 %
État de mer21 %30 %——
Angle vent / cap9 %—15 %—
Navigabilité (voile / moteur)18 %———
CAPE5 %10 %10 %10 %
Précipitations5 %5 %20 %30 %
Température——15 %25 %

Le score final est une moyenne pondérée normalisée par la somme des poids actifs (les composantes sans données sont exclues dynamiquement) :

score = Σ(score_composante × poids) / Σ(poids_actifs)   → arrondi au dixième
Les 13 candidats sont triés par score décroissant. Le meilleur créneau est affiché en vert ; le départ courant en bleu. Cliquer sur un candidat recalcule le tableau météo complet pour cet horaire.

11. Le risque orageux — au-delà du CAPE

Le CAPE (énergie potentielle de convection disponible, en J/kg) est souvent présenté comme le chiffre de l'orage. C'est trompeur : un CAPE de 2 000 n'a pas la même portée selon la situation. Tout dépend aussi de la raideur de l'atmosphère, du couvercle qui empêche — ou non — l'air de monter, et de l'organisation des cellules. Solano combine donc plusieurs ingrédients en un seul indice catégoriel, par heure.

Les ingrédients

Suivant l'approche par ingrédients (Doswell), le risque se construit comme un produit : du carburant, multiplié par un facteur d'ouverture du couvercle, puis affiné par l'organisation.

risque = carburant(CAPE, Lifted Index, lapse rate) × facteur_couvercle(CIN)   → 0 à 10

Le score donne une intensité en quatre catégories : Faible (< 1,5) · Modéré (1,5–4) · Marqué (4–7) · Sévère (≥ 7). Le cisaillement affine ensuite la catégorie : « Sévère » est réservé aux orages organisés — une forte intensité mais peu cisaillée est ramenée à « Marqué · isolé », tandis qu'un « Marqué » fortement cisaillé peut être promu « Sévère ».

L'ancrage GFS et l'accord des modèles

Parmi les modèles d'Open-Meteo, seul GFS expose tous les ingrédients (CAPE, inhibition CIN, Lifted Index et les niveaux de pression nécessaires au cisaillement et au lapse rate). L'indice est donc ancré sur GFS, indépendamment des modèles que vous affichez — Solano va le chercher même si GFS n'est pas sélectionné. Le point interrogé est ramené à la maille GFS de 0,25° : l'indice décrit donc l'environnement à l'échelle du bassin (≈ 25 km), pas au-dessus de votre mouillage précisément.

À cet indice s'ajoute une mesure d'accord entre les modèles : la dispersion du CAPE entre tous les modèles consultés. Quand ils divergent fortement (par exemple CAPE 10 vs 560 au même point), le risque est marqué comme incertain — fidèle à la philosophie du « film plutôt que la photo ». Tous les seuils sont ajustables.

L'indice décrit un environnement favorable, jamais un orage à une heure précise. La convection reste, par nature, le paramètre le moins prévisible : les indices disent « les ingrédients sont réunis », pas « il y aura un orage à 15 h ».

Le déclenchement — ce que voient les modèles fins

Le socle GFS répond à « l'atmosphère est-elle chargée ? ». Il ne répond pas à « une cellule va-t-elle tomber ici, et quand ? » — à 25 km de maille, une cellule orageuse de quelques kilomètres n'est tout simplement pas résolue, elle est estimée par une formule. C'est le rôle d'une seconde lecture, distincte et jamais fondue dans la note /10.

Les modèles à convection explicite (maille 1 à 3 km : AROME HD, ICON-2I, ICON-D2, ICON-CH1/CH2) calculent, eux, les ascendances : ils placent des cellules. Quand l'un d'eux est disponible sur votre point, Solano lit sa précipitation horaire — renforcée par une rafale simultanée d'au moins 32 nœuds, signature de la descente convective — et en tire trois niveaux : averse, cellule constituée, cellule vigoureuse. Le résultat s'affiche en une ligne sous l'indice orage (« Cellules prévues : AROME · ICON-2I → 16h-18h ») et, en détail, dans une ligne du tableau horaire propre à chaque modèle fin.

Deux points contre-intuitifs, tous deux vérifiés sur les données réelles. D'abord, le critère est la pluie totale et non le champ « averses » : sur un modèle qui résout la convection, l'averse est déjà dans la pluie totale et le champ dédié n'est plus qu'un résidu (relevé sur ICON-D2 : 3,1 mm/h de pluie pour 0,2 d'« averses »). Ensuite, ce signal ne peut pas être ajouté à l'indice orage : un modèle qui déclenche une cellule consomme la CAPE, si bien qu'une CAPE basse à 17 h peut signifier « orage en cours » et non « calme ». Moyenner les deux inverserait la lecture au pire moment.

Ces modèles ont un horizon court (34 h à 5 jours) et une emprise régionale. Le placement exact d'une cellule à 2 km de maille bouge de plusieurs dizaines de kilomètres d'un run à l'autre : à lire comme un scénario possible, pas comme un rendez-vous. Quand le point interrogé est proche du bord du domaine d'un modèle, Solano le signale sur sa fiche — près de la frontière, la solution y est pilotée par le modèle qui l'alimente plutôt que par sa propre dynamique.

Du pronostic à l'observation

Quand le risque est notable aujourd'hui, le bouton « Voir le ciel maintenant » bascule la carte sur l'imagerie satellite — infrarouge (sommets froids), foudre (éclairs en direct) et RDT (détection des cellules orageuses en développement, avant l'électrification). On vérifie ainsi d'un coup d'œil si une cellule est réellement en train d'éclater. Contrairement au radar au sol, ces produits satellitaires couvrent aussi la pleine mer.

Le risque orageux le long d'une route

En mode Route, le même indice est calculé tout au long du tracé. Plutôt qu'une grille point par point illisible, Solano évalue le risque à chaque point de calcul — à la position et à l'instant où le bateau y passera. La bande se lit de gauche (départ) à droite (arrivée) : chaque cellule porte sa catégorie, et le détail dépliable liste les points à risque avec leurs ingrédients (CAPE, CIN, Lifted Index, cisaillement, lapse rate). Le calcul reste ancré sur GFS, indépendamment des modèles affichés.

12. L'analyse de mouillage — algorithme de protection

L'analyse de mouillage calcule, pour tout point en mer, un profil de protection directionnel par ray casting topographique, complété par un score de confort 0–100 % sur 3 jours et des données bathymétriques.

Ray casting — collecte des altitudes

Pour chaque point, Solano trace 1 728 rayons (36 directions × 3 offsets ±5° × 16 distances) depuis 25 m jusqu'à 3 000 m. Les altitudes sont issues du modèle numérique de terrain SRTM 30 m (couverture mondiale, qui renvoie 0 sur la mer = pas d'obstacle).

L'éventail ±5° par direction permet de "voir" une falaise même si le rayon central passe en eau. L'extension à 3 km est indispensable pour les grandes baies dont les caps encadrants sont distants de plus d'un kilomètre (exemple : Portoferraio, île d'Elbe).

Digues et ouvrages portuaires — OpenStreetMap

Un modèle de terrain à 30 m est aveugle aux ouvrages portuaires étroits : un môle de 10 à 20 m de large est sous-résolu, lu au niveau de l'eau. Solano superpose donc la géométrie OpenStreetMap autour du point (digues et brise-lames man_made=breakwater, ainsi que le trait de côte natural=coastline, qui porte souvent les môles solides des ports). Chaque rayon teste son intersection géométrique avec ces structures — et non un simple échantillon ponctuel, qui raterait un môle fin de la même façon que le terrain.

Règle de fusion : toute côte ou digue sur le rayon bloque la houle (la mer ne traverse pas la terre) ; seules les digues ajoutent une protection au vent forfaitaire (hauteur émergente ≈ 3 m), le trait de côte naturel laissant le relief réel du terrain décider. La fusion est purement additive : elle ne retire jamais une protection détectée par le terrain.

Protection vent

La protection vent est estimée par le ratio hauteur / distance de l'obstacle le plus haut trouvé sur le rayon :

protection_vent = min(1.0, (H/D) / 0.20) → règle : un obstacle de 20 m à 100 m = protection maximale

La valeur maximale sur les 3 offsets du rayon est retenue. La détection Venturi multiplie la pénalité de vent ×1,5 lorsqu'un secteur non bloqué est encadré par deux secteurs bloqués (effet de canalisation).

Protection houle — seuil adaptatif

La houle n'est pas arrêtée par les mêmes obstacles que le vent. Solano applique un seuil de hauteur terrain variable selon la distance pour éviter les faux positifs (île plate lointaine signalée comme "bloquant" la houle) :

distance < 200 m → seuil 0,5 m (chop locale) distance < 800 m → seuil 2,0 m (obstacle côtier) distance < 2 000 m → seuil 5,0 m (cap ou relief notable) distance ≥ 2 000 m → seuil 15,0 m (relief majeur)

La protection houle est binaire (bloquée / non bloquée) et calculée par nearest-neighbor entre secteurs adjacents — jamais par interpolation OR, qui produirait des faux "bloqués" entre un secteur protégé et un secteur exposé.

Score de confort

Pour chaque heure sur 3 jours, le score combine les prévisions houle (70 %) et vent (30 %) avec le profil de protection :

swell_discomfort = (1 si houle non bloquée) × clamp(Hs / 0,30 m, 0, 1) wind_discomfort = (1 − protection_vent) × venturi_factor × clamp(U10 / 25 nds, 0, 1) discomfort = swell_discomfort × 0,70 + wind_discomfort × 0,30 confort(%) = 100 × (1 − discomfort)

Le seuil Hs = 0,30 m reflète qu'une chop de 30 cm est déjà sensible sur un mouillage. Les rafales sont incluses dans le calcul vent.

Bathymétrie — EMODnet

La profondeur est issue d'EMODnet Bathymetry DTM 2022 (~115 m de résolution, API REST POINT(lon lat)), retournant la valeur lissée + fourchette min/max + type de sondage vulgarisé. La nature du fond est issue d'EMODnet Seabed Habitats — EUSeaMap 2025 (WFS emodnet_view:eusm2025_msfd_full, substrat lu dans le champ msfd_bbht puis classé : sable, vase, roche, herbiers de Posidonie…).

Cache 180 jours par mouillage (clé anchor_v5_, résolution 0,001° ≈ 100 m). Incrémenter la clé en production si l'algorithme change.

13. Le routage — isochrones et polaire

Le routage répond à une question différente du reste de cette page : non pas « quel temps fera-t-il ici ? », mais « quel est le chemin le plus rapide entre ces deux points, compte tenu du vent prévu et de ce que sait faire ce bateau ? ». C'est un problème d'optimisation dans un champ qui varie en espace et en temps.

La polaire

La polaire est une table angle du vent × force du vent → vitesse, propre au bateau (elle se saisit dans sa fiche, à la main ou par import CSV). La vitesse à un couple quelconque est obtenue par interpolation bilinéaire entre les quatre valeurs voisines. Hors table, la valeur est bornée sur la dernière colonne plutôt qu'extrapolée — une extrapolation linéaire donnerait des vitesses absurdes dans le vent fort. Sans polaire saisie, un croiseur générique de 11 m sert de repli.

Les isochrones

Le moteur avance par pas de temps (60, 30 ou 15 minutes au choix). À chaque pas, depuis chaque position du front, il évalue tous les caps d'une grille (5° par défaut) : la polaire donne la vitesse, donc la position atteinte au pas suivant. L'ensemble de ces positions forme l'isochrone.

Sans tri, le front serait multiplié par le nombre de caps à chaque pas. L'élagage retient donc une seule position par secteur angulaire vu du départ — la plus avancée vers le but :

secteur(position) = floor(relèvement(départ → position) / pas_de_secteur) conservée = argmax(progression vers le but) dans chaque secteur

Ni les bords ni les empannages ne sont codés. Ils émergent de la comparaison des caps : au près, la polaire donne une vitesse quasi nulle au cap direct et correcte à 45°, donc le meilleur chemin passe par deux amures. Au portant, 150° bat souvent le plein vent arrière. Le moteur, lui, est un cas à part : sa vitesse ne dépendant pas du cap, viser le but est toujours optimal — un cap direct est donc ajouté d'office aux candidats, et il domine les autres candidats motorisés dès qu'il n'est pas bloqué.

Lecture du champ de vent

Le vent est chargé une fois pour toute la zone sous forme de cube (échéance × latitude × longitude) de composantes U et V — un routage lit le vent des dizaines de milliers de fois, un appel réseau par lecture serait exclu.

L'interpolation porte sur U et V, jamais sur la direction. Entre 350° et 10°, la moyenne des angles donne 180° — l'exact opposé du vent réel. La règle vaut pour l'espace comme pour le temps.

Hors de la fenêtre géographique ou de la plage d'échéances téléchargées, la lecture rend NaN et jamais la valeur du bord : un routage qui sort de la zone couverte doit s'arrêter en le disant, pas continuer sur une donnée inventée.

La fenêtre téléchargée est taillée sur le trajet plutôt que fixée :

horizon_h = (Σ distances × 1,4) / vitesse_plancher × 1,25, borné à [12 h, plafond]

Le facteur 1,4 anticipe le détour (bords, contournements), le 1,25 est une marge ; la vitesse plancher est celle du moteur s'il est autorisé, sinon 3 nœuds — un minorant de vitesse donne un majorant de durée. Les échéances sont horaires sur les six premières heures puis de trois en trois.

Le masque côtier

Le trait de côte est embarqué dans l'application (Natural Earth 10 m, environ 406 000 segments, chargé une fois en mémoire) — aucun appel réseau, donc aucune dépendance à un service tiers en plein calcul. Chaque pas candidat est un segment ; il est refusé si ce segment croise un segment de côte. Un pré-filtre par boîte englobante écarte d'emblée plus de 99,9 % des paires avant tout test géométrique.

Le test porte sur le saut, pas sur le point d'arrivée : un pas qui enjambe une langue de terre étroite est rejeté, alors qu'un test ponctuel le laisserait passer. Le contournement d'une pointe émerge ensuite du même mécanisme que les bords, sans logique dédiée.

Les seuils et pénalités

Trois seuils interdisent un pas plutôt que de le pénaliser : vent maximum, mer maximum (qui déclenche le téléchargement d'un champ de vagues — le poste le plus lourd, donc jamais fait sans demande) et rafale maximum. Une valeur inconnue ne bloque jamais ; en revanche, un seuil demandé dont le champ n'a pas pu être chargé est signalé sur le tracé, un garde-fou silencieusement inactif étant pire qu'aucun garde-fou.

Deux facteurs modulent la progression au lieu de l'interdire :

nuit : vitesse ×= facteur_nuit (nuit = soleil à moins de −6° sous l'horizon) manœuvre: dt_effectif = max(dt − perte/60, 0) si |Δcap| > seuil (défaut 25°)

La manœuvre ampute la progression du pas, pas la vitesse polaire : elle représente le temps perdu, pas une simulation de la décélération. Elle est ignorée au moteur et au premier pas.

Coût

Le calcul d'isochrones lui-même est rapide — de l'ordre de 0,3 à 0,5 s pour une traversée de 200 milles au pas horaire. Le temps réel d'un routage est dominé par le téléchargement des champs (une trentaine de secondes à froid). Un run publié étant immuable, il est conservé : relancer aussitôt avec d'autres réglages ne coûte presque rien, mais revenir le lendemain retéléchargera — ce ne sont plus les mêmes runs.

Le routage ne tient pas compte du courant, ne connaît ni tirant d'eau ni balisage, et son trait de côte est volontairement grossier. Voir l'article Le routage pour la lecture pratique des résultats et la liste de ce qu'un tracé calculé ne contient pas.

14. Limites de la méthode

La méthode Solano présente plusieurs limitations importantes à connaître pour interpréter correctement les scores :

Avertissement : Solano n'est pas un service météorologique agréé. Les informations affichées sont issues de centres de calcul tiers et fournies à titre indicatif uniquement. Elles ne se substituent pas aux bulletins officiels (Météo-France, SHOM, CROSS). L'utilisateur assume l'entière responsabilité des décisions prises sur la base de ces données.
Tester la méthode sur la carte →