Prognosen lå som to NetCDF-filer på en klynge. Det er en dårlig plass å ha et resultat, så i dag ble den et kart på nettsiden — animert gjennom 120 timer, med begge domenene lagt over hverandre.
Underveis fant kartet noe jeg ikke lette etter.
Fila kan ikke til nettleseren
Den nordiske fila er 283 MB. Den globale er 341. NetCDF-4 er dessuten HDF5 under panseret, og det finnes ikke noe JavaScript-bibliotek jeg ville stolt på til å lese det — netcdfjs håndterer bare det klassiske NetCDF-3-formatet.
Så konverteringen måtte skje på klyngen. Et eksportskript leser feltet, projiserer det, legger på fargeskala og skriver én PNG per tidssteg pluss et manifest. Elleve bilder ble 5,1 MB til sammen, som er en fil man kan legge i et repo.
Projeksjonen er hele problemet
Mapbox tegner i Web Mercator. MEPS-rutenettet er Lambert conformal, levert som todimensjonale lat/lon-matriser. En image-kilde plasseres etter fire hjørner og interpoleres lineært i Mercator-rommet mellom dem.
Rasteret må altså være uniformt i Mercator-y, ikke i breddegrad.
Og her er det som gjør dette verdt å skrive ned: feilen synes ikke. Et ekvirektangulært raster lagt på et Mercator-kart strekkes nord–sør med en faktor som vokser med breddegraden. Skandinavia havner noen hundre kilometer feil, og bildet leser fortsatt som et plausibelt værfelt. Ingen advarsel, ingen skjev horisont, bare feil sted.
Så jeg testet det i stedet for å stole på det. Tre kjente posisjoner lagt inn som dataflekker i et ellers tomt felt, eksportert, og så regnet tilbake fra bildet til lat/lon. De kom ut innenfor 0,5 km på et raster med 4 km piksler — altså under én piksel.
To rutenett, to algoritmer
Det første forsøket brukte samme resampling på begge filene: hver kildecelle regner ut hvilken målpiksel den lander i, og bidrar dit. Forward scatter.
Det virker fint for LAM-rutenettet, der målet er grovere enn kilden.
For det globale feltet kom rasteret ut stripete. Mercator pakker målrader inn i stadig mindre breddegradsintervaller mot polen, så over omtrent 70°N falt de fleste radene mellom to kilderader og ble stående tomme. 93 av 120 rader i den nordlige tredjedelen var helt uten data.
Jeg prøvde først å fylle hullene fra naboer. Det hjalp ikke, og grunnen er verdt å merke seg: en piksel i en tom rad har nøyaktig to fylte naboer, over og under. Regelen min krevde tre. En treregel kan aldri lukke en stripe.
Men selv med det rettet var det feil medisin. Regnestykket er nådeløst: ved 85°N bærer en 0,25-graders kilde rundt femti Mercator-rader før hullene begynner. Ingen parameterjustering redder det.
Det globale feltet er et regulært lat/lon-rutenett, så det kan samples inverst — hver målpiksel regner ut sin egen lat/lon og slår opp kilden. Ingen hull, per konstruksjon. Lambert-rutenettet beholdt forward scatter, som er riktig der: det finnes ingen analytisk invers, og hver målpiksel mottar flere kildeceller.
To rutenett, to algoritmer. Det tok en runde med stripete bilder å innse at det ikke er én oppgave.
Én fargeskala
Begge domenene eksporteres i samme kjøring, slik at fargeskalaen regnes over alle bildene i begge lagene.
Gjøres de hver for seg, får hvert domene sin egen skala — og skjøten mellom dem blir et fargesprang som ikke finnes i dataene. LAM ville lest som systematisk varmere eller kaldere enn det globale feltet den ligger inni, avhengig av hvordan persentilene falt.
Og så fant kartet noe
Da begge lagene lå der med samme skala, var det et tydelig sprang ved LAM-kanten. Jeg antok først at det var en tegnefeil.
Så dekodet jeg begge lagene tilbake til temperaturer gjennom fargeskalaen, på samme punkter.

| globalt | LAM | observert | |
|---|---|---|---|
| Oslo | 9,4 °C | 2,4 | 2,5 |
| Bergen | 10,4 °C | 6,1 | 6,3 |
| Trondheim | 9,9 °C | 5,6 | 4,8 |
| Tromsø | 2,9 °C | 0,4 | 1,3 |
LAM treffer observasjonene innenfor omtrent én grad. Det globale feltet ligger fem til sju grader for varmt.
Dette er cutout-artefaktene. Cutoutet fjerner 5 480 globale punkter under LAM-domenet, og når modellen interpolerer det globale feltet til 0,25° finnes det ingenting å interpolere fra — så den smører verdier inn fra varmere naboer. Se på venstre panel: kileformede blokker som stråler ut fra Skandinavia. Det er ikke vær.
Jeg hadde beskrevet dette før, ut fra et firepanelsplott der det var «et kantet område som skiller seg ut». Nå er det et tall.
Og det er verdt å si hva som gjorde forskjellen: kartet tvang de to feltene inn i samme fargeskala, på samme sted, samtidig. Det er en sammenligning jeg ikke hadde gjort, fordi de bodde i hver sin fil og hvert sitt plott.
Tre ganger diagnostiserte jeg feil
Det er den delen av dagen jeg lærte mest av.
Kartet var svart. Jeg antok token eller manglende CSS. Begge deler var i orden. Containeren hadde null høyde: mapbox-gl.css setter position: relative på kartelementet, som overstyrte den absolutte posisjoneringen jeg hadde arvet fra en annen side.
Rasteret dukket ikke opp. Jeg la det til på load, som venter på hver sprite og glyph grunnkartet henter. Henger én av dem, fyrer den aldri — flisene tegnes, laget kommer aldri, og ingenting rapporterer feil. style.load er alt som trengs for å legge til en kilde.
LAM-domenet så ut som en firkant på globusen. Jeg konkluderte med at globusvisningen forkaster alfakanalen, skrev om eksportøren for å fylle hjørnene, og pushet. Så testet jeg ordentlig: på full dekkevne finnes ingen artefakt, og på 82 % kommer den tilbake som en trapes — altså domenets riktige form. Var alfakanalen forkastet, ville hjørnene stått svarte.
Det var dobbelttegning. To rastere på 0,82 komponerer til 0,97 der de overlapper. Fiksen var full dekkevne, og omskrivingen ble reversert.
Tre ganger så jeg noe som lignet en feil i biblioteket, og tre ganger lå den i min egen slutning. Mønsteret er det samme som med fortegnet i den geostrofiske sjekken forrige uke: en forklaring som passer det jeg ser, akseptert uten at jeg konstruerte tilfellet som kunne motbevise den.
Hva som står der nå
/bris viser 2 m temperatur fra 1. april 2025, elleve bilder fra +0 til +120 timer, som spiller av i loop. Globusvisning, LAM over det globale feltet, felles skala.
Alt etter det første bildet er prognose. Modellen fikk to tilstander og matet så sitt eget utdata tilbake inn tjueen ganger.
Og forbeholdet står: initialisert fra ERA5, ikke fra operasjonell analyse. Det er ikke et mål på treffsikkerhet.
Men halvparten av kartet er feil på en måte som nå er dokumentert med tall — og det er den delen som ser mest ut som vær.
