Raw model output on the native 0.25° grid — no MOS, no bias correction, no post-processing. Scores understate operational forecast quality. Read the fairness statement →

CastCheck methodology v0.2 · data through 2026-08-30

KSAN — San Diego Lindbergh

32.7336, -117.1831 · 4 m· standard offset UTC-8 h · truth product CLISAN

These pages are always bilinear interpolation, the headline method. The nearest-node variant, and every other window/initialization/interpolation/variable combination, is published on each permanent link below — follow any number.

Daily maximum temperature — MAE °F

the last 90 days, 12Z, bilinear. MAE with the bias and n underneath; every cell links to its permanent page. The sparkline shows the same model across lead days 1–9 on a scale shared within this table.
Modeld0d1d2d3d4d5d6d7d8d9lead 1–9
ECMWF AIFS Singleaifs_single 4.10-4.10 · n=29 4.12-4.12 · n=28 4.02-4.02 · n=27 4.09-4.06 · n=26 3.84-3.83 · n=24 3.84-3.84 · n=24 3.91-3.91 · n=23 4.09-3.81 · n=22 4.14-3.95 · n=21 ECMWF AIFS Single MAE by lead day 1 to 9, tmax
Aurora (GFS init)aurora_gfs 6.71-6.71 · n=2 4.48-4.48 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmax
Aurora (IFS init)aurora_ifs 5.13-5.13 · n=2 3.64-3.64 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (GFS init)fourcastnet_gfs 2.89-2.89 · n=2 0.58-0.58 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (IFS init)fourcastnet_ifs 2.57-2.57 · n=2 0.03-0.03 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmax
NCEP GFSgfs 2.91-2.91 · n=29 2.98-2.91 · n=28 2.98-2.98 · n=27 3.25-3.24 · n=26 3.35-3.35 · n=25 3.50-3.50 · n=24 3.52-3.44 · n=23 3.82-3.55 · n=22 3.83-3.71 · n=21 NCEP GFS MAE by lead day 1 to 9, tmax
GraphCast (GFS init)graphcast_gfs 6.30-6.30 · n=2 4.23-4.23 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmax
GraphCast (IFS init)graphcast_ifs 5.77-5.77 · n=27 5.61-5.61 · n=26 5.74-5.74 · n=25 5.81-5.81 · n=25 5.57-5.57 · n=25 5.39-5.39 · n=24 5.43-5.43 · n=23 5.46-5.46 · n=22 5.95-5.95 · n=21 GraphCast (IFS init) MAE by lead day 1 to 9, tmax
ECMWF IFS HRESifs_hres 5.82-5.82 · n=24 5.82-5.82 · n=22 5.63-5.62 · n=22 5.67-5.61 · n=21 5.80-5.80 · n=20 5.54-5.46 · n=19 5.45-5.44 · n=17 6.06-5.92 · n=17 7.19-6.89 · n=14 ECMWF IFS HRES MAE by lead day 1 to 9, tmax
Pangu-Weather (GFS init)pangu_gfs 6.63-6.63 · n=2 5.67-5.67 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmax
Pangu-Weather (IFS init)pangu_ifs 6.49-6.49 · n=2 5.18-5.18 · n=1 Pangu-Weather (IFS init) MAE by lead day 1 to 9, tmax
Persistence (baseline)persistence 1.50-0.12 · n=90 1.90-0.30 · n=90 1.99-0.46 · n=90 2.27-0.60 · n=90 2.27-0.82 · n=90 2.30-1.01 · n=90 2.63-1.17 · n=90 2.64-1.36 · n=90 2.64-1.51 · n=90 Persistence (baseline) MAE by lead day 1 to 9, tmax

Up to 1 of the scored days in this table carry a QC flag on the observation (a CLI value that disagreed with the hourly observations, or a fallback source). They are kept in the scores and counted here rather than dropped — see methodology.

+ model too warm · − model too cold · bias interval includes zero · ★ lowest MAE · = not distinguishable from the leader · ▼ significantly worse · n < 30 greyed and unranked · CI is a 95 % moving-block bootstrap interval.

Daily minimum temperature — MAE °F

the last 90 days, 12Z, bilinear. MAE with the bias and n underneath; every cell links to its permanent page. The sparkline shows the same model across lead days 1–9 on a scale shared within this table.
Modeld0d1d2d3d4d5d6d7d8d9lead 1–9
ECMWF AIFS Singleaifs_single 1.37-1.19 · n=29 1.52-1.38 · n=28 1.49-1.22 · n=27 1.44-1.12 · n=26 1.25-1.13 · n=24 1.12-1.05 · n=24 1.01-0.95 · n=23 1.26-1.02 · n=22 1.55-1.07 · n=21 ECMWF AIFS Single MAE by lead day 1 to 9, tmin
Aurora (GFS init)aurora_gfs 2.42-2.42 · n=2 3.19-3.19 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmin
Aurora (IFS init)aurora_ifs 1.16-1.05 · n=2 2.65-2.65 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (GFS init)fourcastnet_gfs 0.76+0.22 · n=2 0.57-0.57 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (IFS init)fourcastnet_ifs 1.34+0.53 · n=2 0.73-0.73 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmin
NCEP GFSgfs 2.12+2.00 · n=29 2.39+2.23 · n=28 2.47+2.28 · n=27 2.48+2.30 · n=26 2.43+2.21 · n=25 2.38+2.19 · n=24 2.23+2.18 · n=23 2.09+1.91 · n=22 2.02+1.47 · n=21 NCEP GFS MAE by lead day 1 to 9, tmin
GraphCast (GFS init)graphcast_gfs 1.23-1.23 · n=2 2.39-2.39 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmin
GraphCast (IFS init)graphcast_ifs 1.08-0.61 · n=27 1.09-0.61 · n=26 0.89-0.38 · n=25 0.82-0.28 · n=25 0.82-0.30 · n=25 0.79-0.08 · n=24 0.77+0.20 · n=23 0.71+0.17 · n=22 0.97-0.09 · n=21 GraphCast (IFS init) MAE by lead day 1 to 9, tmin
ECMWF IFS HRESifs_hres 1.11-0.74 · n=24 1.10-0.85 · n=22 1.10-0.96 · n=22 1.26-0.84 · n=21 1.54-1.26 · n=20 1.44-0.76 · n=19 1.44-0.69 · n=17 1.09-0.66 · n=17 1.71-1.10 · n=14 ECMWF IFS HRES MAE by lead day 1 to 9, tmin
Pangu-Weather (GFS init)pangu_gfs 2.40-2.40 · n=2 4.41-4.41 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmin
Pangu-Weather (IFS init)pangu_ifs 1.82-1.82 · n=2 3.72-3.72 · n=1 Pangu-Weather (IFS init) MAE by lead day 1 to 9, tmin
Persistence (baseline)persistence 0.81-0.12 · n=90 1.03-0.26 · n=90 1.28-0.41 · n=90 1.47-0.56 · n=90 1.61-0.72 · n=90 1.80-0.84 · n=90 1.84-0.96 · n=90 1.97-1.03 · n=90 2.07-1.11 · n=90 Persistence (baseline) MAE by lead day 1 to 9, tmin

Up to 1 of the scored days in this table carry a QC flag on the observation (a CLI value that disagreed with the hourly observations, or a fallback source). They are kept in the scores and counted here rather than dropped — see methodology.

Month-by-month slices, model availability and the observed-truth table live on the canonical page: they do not depend on the window, initialization or interpolation selected here.

All scores as JSON scores_latest.csv daily_errors.csv.gz data & licences