Parameters

parameterstepsforecast values preprocessingscores

2-m temperature

0,3,6,...,69,72, 78,84,90,...,240

T2m extracted from model forecast field and then using the recent model orography reduced to the observation station level by

T2m_reduced = T2m_model + (elev_model - elev_station)*0.0065

(assuming T2m are in K and elev_* in meters)

ME, MAE, RMSE

2-m dewpoint

0,3,6,...,69,72, 78,84,90,...,240extracted from model forecast fieldME, MAE, RMSE

2-m relative humidity

0,3,6,...,69,72, 78,84,90,...,240

computed from T2m and TD2m

def magnusFormula(T):
    log10_e_w=-2937.4/T-4.9283*numpy.log10(T)+25.5518
    return 10.**log10_e_w

e=magnusFormula(Tdew)
e_s=magnusFormula(T)
RH=e/e_s
ME, MAE, RMSE

10-m wind direction

0,3,6,...,69,72, 78,84,90,...,240

computed from 10-m wind components

dd10m = 180./pi * arctan2(u10m,v10m) - 180.

where the observed 10-m wind speed is less than 3m/s do not compute dd10m scores; however, that observation is still included into the total count of observations in the current month (which should reach at least 90% for the station score to be included in the report)

 

ME, MAE, RMSE

fc-ob differences computed as follows:

diff = fc - ob
where (diff>180): diff-=360
where (diff<-180): diff+=360

10-m wind speed

0,3,6,...,69,72, 78,84,90,...,240

computed from 10-m wind components

ff10m = sqrt(u10m**2+v10m**2)

ME, MAE, RMSE

CT (5,10,15)

total cloud cover

0,3,6,...,69,72, 78,84,90,...,240extracted from model forecast field (0.-1.) then converted to octas

ME, MAE, RMSE

CT (2,7)

(warning) please note incorrect thresholds (2,6) have been written in the earlier version of this document (corrected on 2 April 2019)

prior CT computations the forecast values are rounded to the nearest octa

24-h precipitation24,48,72,...,240

extracted from model forecast as a difference of the precipitation accumulation fields, e.g.

tp24(step=120) = accum_precip(step=120) - accum_precip(step=96)

CT (1,10,50)
6-h precipitation6,12,18,...,240

extracted from model forecast as a difference of the precipitation accumulation fields, e.g.

tp6(step=120) = accum_precip(step=120) - accum_precip(step=112)

CT (1,5,25)

Time averages

All scores are the mean of all forecast of a given time step (lead time) initiated from given network time (00UTC or 12UTC) which verify in the current month.

# compute the list of model runs starting from a particular network time
# which all validate in the current month

import datetime

year = 2016
month = 2

model_start_network = 12 # utc
step = 120 # hours

observation_networks = (0,6,12,18)

model_runs = []

obs_date = datetime.datetime(year=year,month=month,day=1)
while obs_date.month==month:
    for hour in observation_networks:
        obs_date_now = obs_date.replace(hour=hour)
        model_start_date = obs_date_now - datetime.timedelta(hours=step)
        if model_start_date.hour==model_start_network:
            model_runs.append(model_start_date)
    obs_date += datetime.timedelta(days=1)

for d in  model_runs:
    print d

 

Orography

We use the model orography valid for individual forecast. The value of the model orography elevation is then given in each data record as the keyword me. If the orography changed in the current month (due to e.g. the forecast model upgrade) the value of me is the one corresponding to the forecast at the end of the month.