C'est la maille la plus fine que le CEP diffuse librement, et il n'y a rien à
gratter de ce côté : data.ecmwf.int ne publie qu'un seul répertoire de
résolution, 0p25, aussi bien pour l'IFS que pour l'AIFS. La grille
native du modèle déterministe — TCo1279, environ 9 km — existe bel et bien, mais
elle est servie par MARS et demande une licence. Les planches de service que
diffuse le CEP travaillent à 0,125°, pour la même raison.
Chaque point de la carte est un point du modèle : la grille est lue telle que le CEP l'a écrite, ni interpolée ni rééchantillonnée avant d'arriver ici. Le lissage n'intervient qu'au dessin, dans le navigateur.
Ce qu'une maille de 27 km ne saura jamais rendre : un maximum orographique étroit. Sur un épisode cévenol ou un retour d'est alpin, le chiffre du modèle est un cumul moyen sur 750 km², pas la pointe du versant. Pour cela, les pages AROME et ICON-D2 sont à leur place.
Le CEP ne publie pas des tranches de pluie mais un cumul depuis le début du run, et c'est ainsi qu'il est stocké : une grille par échéance, sans jamais la dériver. Le cumul entre deux instants est alors la différence de deux grilles, exacte au dixième de millimètre près quelle que soit la longueur de la fenêtre.
Additionner des tranches préalablement arrondies aurait donné le même résultat à peu de chose près — et ce « peu de chose » aurait grandi avec la fenêtre, jusqu'à plus d'un millimètre sur 72 h. Pour rien : la soustraction ne coûte pas plus cher.
Le run porte à 360 h, par pas de 3 h jusqu'à 144 h puis de 6 h. La fenêtre se cale donc au pas de 3 h dans la première semaine et de 6 h ensuite ; ses quatre durées étant des multiples de 6, elle tombe toujours sur des échéances réellement publiées, sans jamais rien interpoler dans le temps.
Seuls les runs de 0 et 12 h UTC sont collectés : ceux de 6 et 18 h s'arrêtent à 90 h, et « tout le run » n'y voudrait plus dire la même chose d'un passage à l'autre.
Un run pèse 85 fichiers d'environ 90 Mo — 7 Go pour un champ qui en occupe 900 ko.
Chaque fichier est heureusement accompagné d'un .index qui donne
l'offset de chacun de ses 184 messages : la routine lit l'index, y trouve
tp, et n'en demande que cette tranche-là par une requête HTTP
Range. Un run complet coûte ainsi 80 Mo, une fois par demi-journée.
Le GRIB2 du CEP est comprimé en CCSDS (gabarit 5.42), qui demande d'ordinaire
libaec via eccodes — inutilisable sur un hébergement
mutualisé. Le décodeur employé ici est celui écrit en langage de base pour
collecte_iconeu, repris sans changement : le DWD et le CEP encodent de
la même façon.
Deux aplats et deux réseaux de traits, rien d'autre : mer, terres, frontières,
départements. Ni relief, ni routes, ni toponymie — sur une carte de cumuls, tout ce
qui n'est pas la pluie doit se taire. Les contours sont ceux que sert déjà
donnees_geo/. Rien n'est téléchargé chez un tiers à l'affichage —
pas une tuile.
Les traits de frontières passent au-dessus des cumuls : sous eux, un aplat de cent millimètres les effacerait et on ne saurait plus si la tache est française, suisse ou italienne.
donnees_geo/preparer_contours.py.
Collecte : collecte_cepgrille.php, fichiers
donnees_cep/grille-*.json.