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 fiabilité 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 :
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 :
- ARPEGE (Météo-France, Europe) — 4 runs par jour (00Z, 06Z, 12Z, 18Z)
- AROME HD (Météo-France, haute résolution 1,5 km) — jusqu'à 8 runs par jour
- ECMWF IFS HRES (Centre européen) — 2 runs par jour (00Z et 12Z)
- GFS (NOAA, États-Unis) — 4 runs par jour
À 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.
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'à 13 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 |
|---|---|---|---|---|---|
| AROME HD | Météo-France | France | 1,5 km | 3 j | 8×/j |
| ICON-2I | ARPAE (Italie) | Méditerranée | 2 km | 3 j | 2×/j |
| UKMO UK HD | Met Office (UK) | Royaume-Uni | 2 km | 2 j | 24×/j |
| GEM HRDPS | Environnement Canada | Canada | 2,5 km | 2 j | 4×/j |
| ICON-EU | DWD (Allemagne) | Europe | 7 km | 5 j | 8×/j |
| ECMWF IFS HRES | ECMWF | Mondial | 9 km | 15 j | 4×/j |
| GEM RDPS | Environnement Canada | Amérique du Nord | 10 km | 3 j | 4×/j |
| UKMO ¹ | Met Office (UK) | Mondial | 10 km | 7 j | 2×/j |
| ARPEGE | Météo-France | Europe | 11 km | 5 j | 4×/j |
| GFS | NOAA (États-Unis) | Mondial | 13 km | 16 j | 4×/j |
| ICON ¹ | DWD (Allemagne) | Mondial | 13 km | 7 j | 4×/j |
| ARPEGE Monde ¹ | Météo-France | Mondial | 25 km | 4 j | 4×/j |
| GEM GDPS ¹ | Environnement Canada | Mondial | 25 km | 10 j | 2×/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 :
- Courbes serrées — les runs successifs s'accordent → score de stabilité élevé → haute confiance dans la prévision.
- Courbes dispersées — les runs divergent → score de stabilité bas → situation instable, prévision incertaine.
- Courbes qui convergent — les anciens runs divergeaient mais les récents s'accordent → la situation se stabilise progressivement.
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 :
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 :
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 vent | 6 nœuds | 30 % |
| 🌬️ Vent moyen | 4 nœuds | 20 % |
| 🌧️ Précipitations | 1 mm/h | 20 % |
| 🧭 Direction du vent | 45° | 10 % |
| 👁️ Visibilité | 2 000 m | 10 % |
| 🌡️ Température | 3 °C | 5 % |
| ☁️ Couverture nuageuse | 20 % | 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 τ :
τ 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.
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 :
- La ligne ERA5T (réanalyse de référence) — tracée en pointillé noir
- Toutes les courbes de runs correspondantes — ce que chaque modèle avait prévu pour ce jour-là, à différentes échéances
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 fiabilité 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).
Le MAE est calculé séparément :
- Pour chaque modèle atmosphérique
- Pour chaque variable (vent, rafales, direction, pluie, température, nuages, pression)
- Pour chaque échéance de J-1 (prévision à 1 jour) à J-15 (prévision à 15 jours)
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 moyen | 3 nds | 3–6 nds | 6 nds |
| Rafales | 4 nds | 4–8 nds | 8 nds |
| Direction du vent | 20° | 20–40° | 40° |
| Pression MSL | 1,5 hPa | 1,5–3 hPa | 3 hPa |
| Température | 1,5 °C | 1,5–3 °C | 3 °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.
9. 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 :
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° :
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é | Optimum | Seuil dégrad. | 0 kt |
|---|---|---|---|
| ⛵ Voile | 10/10 à 12 kt | 25 kt → 5 · 32 kt → 0 | 2 (calme = pas d'avancement) |
| 🚢 Moteur | 10/10 de 0 à 10 kt | 20 kt → 7 · 30 kt → 3 · 40 kt → 0 | 10 |
| 🚴 Vélo | 10/10 de 0 à 5 kt | 15 kt → 6 · 25 kt → 2 · 35 kt → 0 | 10 |
| 🥾 Rando | 10/10 de 0 à 10 kt | 20 kt → 5 · 30 kt → 2 · 40 kt → 0 | 10 |
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 kt). 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 kt (pas 10) traduit qu'un zéphyr total sans variantes est moins agréable que quelques nœuds de brise :
🚢 Moteur : 0–15 kt → 10 · 25 kt → 6 · 35 kt → 2 · 45 kt → 0
🚴 Vélo : 0 kt → 10 · 20 kt → 5 · 40 kt → 0
🥾 Rando : 0 kt → 10 · 25 kt → 4 · 45 kt → 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 :
seaStateScore(H, T) = min( piecewise(acc, breaks_acc), piecewise(H, cap_hauteur) )
Les deux tables de rupture :
| Accélération acc (m/s²) | Score | Hauteur H (m) | Score cap |
|---|---|---|---|
| 0 – 0,1 | 10 | 0 – 1,0 | 10 |
| 0,3 | 9 | 2,0 | 8 |
| 0,7 | 6 | 3,0 | 5 |
| 1,5 | 2 | 4,0 | 2 |
| 2,5 | 0 | 5,0 | 0 |
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é) | 4 | 3 |
| 55–80° (près bon) | 7 | 5 |
| 80–130° (travers / largue) | 8 (optimal) | 7 |
| 130–170° (grand largue) | 6 | 9 |
| > 170° (vent arrière) | 5 | 9 |
Le scoring d'angle n'est calculé que si le vent dépasse 4 nœuds — en dessous, la direction est sans signification pratique.
CAPE, précipitations, température
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 :
Pour l'état de mer (les scores sont déjà calculés heure par heure, pas les valeurs brutes) :
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 moyen | 28 % | 30 % | 25 % | 20 % |
| Rafales | 22 % | 25 % | 15 % | 15 % |
| État de mer | 25 % | 30 % | — | — |
| Angle vent / cap | 10 % | — | 15 % | — |
| CAPE | 10 % | 10 % | 10 % | 10 % |
| Précipitations | 5 % | 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) :
10. 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.
- Carburant — dérivé du CAPE (0 → 10 sur l'échelle 0 / 300 / 800 / 1 500 / 2 500 / 3 500 J/kg), affûté par le Lifted Index (LI positif → carburant nul même à fort CAPE ; LI ≤ −6 → plancher élevé) et par la raideur du profil : le lapse rate moyen-troposphérique 700→500 hPa (°C/km) multiplie le carburant de 0,85 (profil mou, < 5,5 °C/km) à 1,15 (profil raide, > 7 °C/km). C'est ce qui fait qu'un CAPE de 2 000 n'a pas la même portée selon la situation.
- Couvercle (CIN) — l'inhibition convective (J/kg) devient un facteur multiplicateur de 1,0 (couvercle ouvert, < 25) à 0,15 (bridé, > 300). Un fort couvercle réduit le risque réalisé.
- Drapeau « couvercle chargé » — gros carburant sous un fort couvercle : le déclenchement est peu probable, mais explosif si le couvercle saute. Signalé par ⚠️.
- Organisation (cisaillement) — le cisaillement de vent 0–6 km (différence vectorielle entre le vent de surface et le vent à 500 hPa, en m/s) décide de la structure : < 10 = cellules isolées (pulse), 15–20 = organisé (supercellule possible), > 20 = fortement organisé (lignes de grains).
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é.
À 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.
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.
11. 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 :
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) :
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 :
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 30 jours par mouillage (clé anchor_v5_, résolution 0,001° ≈ 100 m). Incrémenter la clé en production si l'algorithme change.
12. Limites de la méthode
La méthode Solano présente plusieurs limitations importantes à connaître pour interpréter correctement les scores :
- Stabilité ≠ justesse. Un score de 9/10 signifie que les modèles sont cohérents entre eux — pas qu'ils ont raison. Une situation atmosphérique peut être systématiquement mal simulée par l'ensemble des modèles (biais commun). Le score MAE ERA5 est l'indicateur complémentaire pour évaluer la justesse historique.
- Sens à partir de J+1. La comparaison inter-runs n'est pertinente qu'à partir du lendemain, quand plusieurs runs ont déjà prévu le même jour. À très courte échéance (quelques heures), tous les runs convergent naturellement — le score serait artificiellement élevé.
- Délai de publication des runs. Chaque modèle publie ses runs avec un délai variable (de 1h30 pour AROME à 4h pour UKMO). Solano utilise les timestamps réels de publication Open-Meteo, non les heures théoriques.
- Pas de données marines dans ERA5 récent. La vérification ERA5 ne couvre que les variables atmosphériques. Pour les vagues et courants, il n'existe pas encore d'équivalent ERA5 récent dans l'API Open-Meteo.
- Open-Meteo comme intermédiaire. Les données transitent par l'API Open-Meteo, qui impose ses propres délais de mise à jour et horizons de disponibilité par modèle.