Total Precipitation [Values not in range] - ERA5-Land hourly data from 1981 to present

I'm facing some trouble in calculating the value of the total precipitation in Italian Cities using the 'Total Precipitation' variable from the "ERA5-Land hourly data from 1981 to present" dataset.

As example of my problem, when I calculate the sum of the precipitation for the city of Milan (as per each other city) in the year 2016 the result is 16214 mm (when the average annual rainfall is 1013 mm).
Computing the right tail (> 80%) the resulting values ​​are:

80%    80.5%      81%    81.5%      82%    82.5%      83%    83.5%      84%    84.5%      85%    85.5%      86%    86.5%      87%    87.5%      88% 
1.4700   1.5500   1.6400   1.7500   1.8500   1.9600   2.1000   2.2300   2.3900   2.5500   2.7100   2.8900   3.0800   3.2600   3.4400   3.6600   3.8800
88.5%      89%    89.5%      90%    90.5%      91%    91.5%      92%    92.5%      93%    93.5%      94%    94.5%      95%    95.5%      96%    96.5%
4.1300   4.4200   4.7400   5.1000   5.4700   5.8500   6.2700   6.7300   7.1900   7.7200   8.2100   8.9300   9.6200  10.5400  11.4800  12.5300  13.9700
     97%    97.5%      98%    98.5%      99%    99.5%     100% 
15.5915  17.5300  20.0000  22.7700  26.5000  32.6500 178.4600

I use R to extrapolate the data from the .ncdf files and as you can see from an abstract of the code I multiply the extraction to 1000 to convert the data from Micron to mm.
tomm <- 1000
      for(i in 1:length(citiesList)){
        for(hours in hourColumns){
          rigthRow <- which(hourlyTotPrec["Day"]==day)
          hourlyTotPrec[hours][i, ]  <- round(mean(pr_array[citiesList[[i]]$index$lonPos
                                                            , citiesList[[i]]$index$latPos
                                                            , as.integer(hours)], na.rm = T)
                                              , digits = 5) * tomm

Here is the code I used.


Thank you for the help,


Hi Giuseppe,

That is interesting, I will investigate for you!



C3S User Support at ECMWF

Hi Kevin,

thank you a lot.

Best regards,


Dear Giuseppe,

to get total precipitation per hour (mm) for ERA5-Land:

\( \text{tp}\ [\text{mm}] = \left\{ \begin{array}{ll} \text{tp}_{h}\ [\text{m}] \cdot 1000 & h = 01 \text {UTC} \\ (\text{tp}_{h}\ [\text{m}]\ -\ \text{tp}_{h-1}\ [\text{m}])\ \cdot 1000 & \text{otherwise} \\ \end{array} \right. \)

To get total precipitation per day (mm):

\( \text{tp}\ [\text{mm}] = \text{tp}_{d+1\ 00\text{UTC}}\ [\text{m}]\ \cdot 1000 \) where d is the day for which the average flux is being computed.



Many thanks Michela. Was struggling to understand why the total precip values I computed using the CDO 'daysum' operator (i.e. summing hours 00-23h) were showing very large values after converting to mm. For your clarification and the ERA5-Land documentation here, I realized there are two issues.

First, the fact that 00h UTC on day 'd' would refer to accumulation 23h-24h on day 'd-1'. Second, more importantly, the way ERA5-Land defines total hourly accumulations differ to how ERA5 Global and ERA5-interim defined sub-daily accumulations (hourly, 3-hrly etc.). In ERA5-Land, the hour 00 UTC at day 'd' gives the total accumulation value for the previous day 'd-1'. So using 'daysum' or any equivalent operator will erroneously give large values as also reported by others on this forum. Below is the snippet from the documentation link.


Please, note that the convention for accumulations used in ERA5-Land differs with that for ERA5The accumulations in the short forecasts of ERA5-Land (with hourly steps from 01 to 24) are treated the same as those in ERA-Interim or ERA-Interim/Land, i.e., they are accumulated from the beginning of the forecast to the end of the forecast step. For example, runoff at day=D, step=12 will provide runoff accumulated from day=D, time=0 to day=D, time=12. The maximum accumulation is over 24 hours, i.e., from day=D, time=0 to day=D+1,time=0 (step=24).

  • HRES: accumulations are from 00 UTC to the hour ending at the forecast step
  • For the CDS time, or validity time, of 00 UTC, the accumulations are over the 24 hours ending at 00 UTC i.e. the accumulation is during the previous day"


What I have done now is downloaded from CDS, the total precip for all days between 1981-2019 (+ 01st Jan 2020), only for time 00h GMT, as my period of interest is 1981-2019. This will still not give me the total precip for 01st Jan 1981 (at least for now, until the ERA5-Land is backdated further). Please correct me if I have misunderstood something.

On a different but related note, if I am interested in ERA5-Land daily rainfall (mm/day), would that be the difference in daily values (at 00h UTC), between total precip and total snow?

Thanks and regards



please have a look at the following link:

Conversion table for accumulated variables (total precipitation/fluxes) - Copernicus Knowledge Base - ECMWF Confluence Wiki



Many thanks again,

The link explains the time step accumulations clearly. I think this link should be highlighted on the CDS page.

Computing 'rainfall' is still not clear in the documentation or the CDS page, unless I missed something. Is total precip - snow (depth) or total precip - snowfall. Would appreciate some clarity here.

Thanks once again



total precipitation is the accumulated liquid and frozen water, comprising rain and snow, that falls to the Earth's surface while the snow depth is depth the water would have if the snow melted and was spread evenly over the whole grid box. 



I encountered the same problem,In Chinese cities, the actual precipitation is 150mm / year and I calculated 358mm / year in another city 800mm / year 12000mm / year

prcp = xr.DataArray(name='prcp', data=(ds['tprate']*3600*1000).groupby("time.dayofyear").sum('time'))

I seem to understand a little slowly.  ERA5-land Hourly precipitation is hourly accumulation value ,the last hour(24th) is the total precipitation of the day.

daily_prcp = ds['tprate'][-1]*1000


I found the same problem in southern South America. Have you received any solution in this regard?

Thanks in Advance,

Best Regards,


Same problem in Central America. Adding ERA 5 Land Hourly precipitation I arrive to unrealistically high annual precipitation (one order of magnitude higher). I am facing the same issue when I compare ERA 5 Land Hourly (aggregated by months) and ERA 5 Land Monthly datasets (a difference of about one order of magnitude).

Did you arrive to any solution? 

I used the ERA5 hourly data on single levels from 1979 to present. It seems more accurate 

Good evening, everyone I have the same problem with the precipitation for a region in Spain "Lérida" I obtain an annual accumulation of 800mm which is not logical in reality the maximum of the accumulation is 530mm, indeed I recover my climatic data of the web site :!/dataset/reanalysis-era5-land?tab=overview which are hourly data.
 The precipitation if I understood correctly what you said before is a cumulative value like the value of the precipitation on 01/01/2022 at 00h corresponds to that of 31/12/2021.
So, I just want to transform the hourly precipitation to the daily precipitation for that I made:

        ds_daily['Rain'] = == 0))*1000 # to get the value at 00h
        ds_daily['time'] = ds_daily['time'].values + timedelta(days=-1)

I think there is a typo in the documentation in ERA5-Land hourly precipitation.

The runoff at day=D, step=12 will provide runoff accumulated from day=D, time=0 to day=D, time=12

This sentence probably stands only for the first day of the dataset. For the following days i think it should

be changed to: "The runoff at day=D, step=12 will provide runoff accumulated from day=D, time=1 to day=D, time=12"