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, 00Z, 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 3.97-3.97 · n=30 3.81-3.81 · n=29 3.60-3.60 · n=28 3.54-3.47 · n=27 3.48-3.48 · n=26 3.48-3.38 · n=25 3.40-3.20 · n=24 3.35-3.09 · n=23 3.58-3.36 · n=22 ECMWF AIFS Single MAE by lead day 1 to 9, tmax
Aurora (GFS init)aurora_gfs 5.78-5.78 · n=2 4.06-4.06 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmax
Aurora (IFS init)aurora_ifs 4.67-4.67 · n=3 5.18-5.18 · n=2 3.85-3.85 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (GFS init)fourcastnet_gfs 2.93-2.93 · n=2 0.54-0.54 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmax
FourCastNet v2 (IFS init)fourcastnet_ifs 2.69-2.69 · n=3 2.56-2.56 · n=2 0.54-0.54 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmax
NCEP GFSgfs 2.93-2.91 · n=30 2.68-2.65 · n=29 2.82-2.78 · n=28 2.97-2.91 · n=27 3.09-3.07 · n=26 3.32-3.27 · n=25 3.40-3.35 · n=24 3.72-3.43 · n=23 3.83-3.55 · n=22 NCEP GFS MAE by lead day 1 to 9, tmax
GraphCast (GFS init)graphcast_gfs 5.30-5.30 · n=2 3.50-3.50 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmax
GraphCast (IFS init)graphcast_ifs 5.43-5.43 · n=28 5.88-5.88 · n=27 5.72-5.72 · n=26 5.79-5.79 · n=25 5.80-5.80 · n=25 5.60-5.60 · n=25 5.58-5.58 · n=24 5.70-5.70 · n=23 5.91-5.91 · n=22 GraphCast (IFS init) MAE by lead day 1 to 9, tmax
ECMWF IFS HRESifs_hres 5.81-5.81 · n=25 5.68-5.68 · n=22 5.78-5.78 · n=23 5.53-5.50 · n=22 5.69-5.66 · n=20 5.86-5.86 · n=18 5.56-5.56 · n=19 5.47-5.47 · n=18 6.28-6.28 · n=17 ECMWF IFS HRES MAE by lead day 1 to 9, tmax
Pangu-Weather (GFS init)pangu_gfs 5.38-5.38 · n=2 4.97-4.97 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmax
Pangu-Weather (IFS init)pangu_ifs 5.51-5.51 · n=3 6.41-6.41 · n=2 4.85-4.85 · 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, 00Z, 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.34-1.18 · n=30 1.52-1.31 · n=29 1.44-1.06 · n=28 1.23-0.79 · n=27 1.09-0.72 · n=26 0.82-0.66 · n=25 0.85-0.51 · n=24 0.80-0.48 · n=23 1.14-0.47 · n=22 ECMWF AIFS Single MAE by lead day 1 to 9, tmin
Aurora (GFS init)aurora_gfs 2.08-2.08 · n=2 3.02-3.02 · n=1 Aurora (GFS init) MAE by lead day 1 to 9, tmin
Aurora (IFS init)aurora_ifs 0.92-0.92 · n=3 1.16-1.16 · n=2 2.74-2.74 · n=1 Aurora (IFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (GFS init)fourcastnet_gfs 0.79+0.05 · n=2 0.66-0.66 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9, tmin
FourCastNet v2 (IFS init)fourcastnet_ifs 1.21+0.09 · n=3 1.16+0.30 · n=2 0.82-0.82 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9, tmin
NCEP GFSgfs 2.14+2.03 · n=30 2.37+2.26 · n=29 2.54+2.39 · n=28 2.63+2.40 · n=27 2.49+2.28 · n=26 2.46+2.35 · n=25 2.35+2.31 · n=24 2.34+2.34 · n=23 2.08+1.70 · n=22 NCEP GFS MAE by lead day 1 to 9, tmin
GraphCast (GFS init)graphcast_gfs 1.52-0.94 · n=2 1.97-1.97 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9, tmin
GraphCast (IFS init)graphcast_ifs 0.85-0.54 · n=28 1.08-0.77 · n=27 1.02-0.65 · n=26 0.81-0.44 · n=25 0.70-0.31 · n=25 0.58-0.25 · n=25 0.74-0.04 · n=24 0.67+0.06 · n=23 1.07-0.13 · n=22 GraphCast (IFS init) MAE by lead day 1 to 9, tmin
ECMWF IFS HRESifs_hres 0.82-0.43 · n=25 1.12-0.87 · n=22 1.12-0.85 · n=23 1.33-0.96 · n=22 1.35-0.77 · n=20 1.40-0.98 · n=18 1.15-0.79 · n=19 1.40-0.82 · n=18 1.50-1.26 · n=17 ECMWF IFS HRES MAE by lead day 1 to 9, tmin
Pangu-Weather (GFS init)pangu_gfs 1.39-1.11 · n=2 3.14-3.14 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9, tmin
Pangu-Weather (IFS init)pangu_ifs 1.12-0.30 · n=3 1.54-1.54 · n=2 3.13-3.13 · 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

MAE °F at lead day 1, 00Z, bilinear, daily maximum — the seasonal slice behind the window averages. A model that is excellent in one season and poor in another shows up here and nowhere else.

Monthaifs_singleaurora_gfsaurora_ifsfourcastnet_gfsfourcastnet_ifsgfsgraphcast_gfsgraphcast_ifsifs_hrespangu_gfspangu_ifs
2026-08 3.81-3.81 · n=294.06-4.06 · n=15.18-5.18 · n=20.54-0.54 · n=12.56-2.56 · n=22.68-2.65 · n=293.50-3.50 · n=15.88-5.88 · n=275.68-5.68 · n=224.97-4.97 · n=16.41-6.41 · n=2
2026-01 3.97-3.97 · n=6

Model availability at this station

ModelPeriod Scored daysCoverage
ECMWF AIFS Single 2026-08-02 → 2026-08-3029
Aurora (GFS init) 2026-08-30 → 2026-08-301
Aurora (IFS init) 2026-08-29 → 2026-08-302
FourCastNet v2 (GFS init) 2026-08-30 → 2026-08-301
FourCastNet v2 (IFS init) 2026-08-29 → 2026-08-302
NCEP GFS 2026-08-02 → 2026-08-3029
GraphCast (GFS init) 2026-08-30 → 2026-08-301
GraphCast (IFS init) 2026-01-02 → 2026-08-3033
ECMWF IFS HRES 2026-08-02 → 2026-08-3022
Pangu-Weather (GFS init) 2026-08-30 → 2026-08-301
Pangu-Weather (IFS init) 2026-08-29 → 2026-08-302
Persistence (baseline) 2024-01-02 → 2026-08-30970

Observed truth — last 30 days

Climatological dayTmax °F Tmin °FSourceFlag
2026-08-308073OBSobs_fallback
2026-08-298773CLI
2026-08-288473CLI
2026-08-278372CLI
2026-08-268973CLI
2026-08-258571CLI
2026-08-248371CLI
2026-08-238769CLI
2026-08-228270CLI
2026-08-218270CLI
2026-08-208170CLI
2026-08-197969CLI
2026-08-187969CLI
2026-08-178069CLI
2026-08-167869CLI
2026-08-157869CLI
2026-08-147871CLI
2026-08-137770CLI
2026-08-128071CLI
2026-08-118171CLI
2026-08-108271CLI
2026-08-098271CLI
2026-08-088169CLI
2026-08-078171CLI
2026-08-068171CLI
2026-08-057968CLI
2026-08-047769CLI
2026-08-037870CLI
2026-08-028070CLI
2026-08-018169CF6

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