数据值超出使用 cdo daysum 的有效范围

Data values are outside the valid range using cdo daysum

我有一个 ERA5 nc 文件,记录了从 3 月到 10 月的每小时降水量,时间跨度为 30 年。数据是从当地时间午夜到中午(因此在 UTC 时区是凌晨 4 点到下午 4 点)。我需要为每个像素找到截至中午的每日降水量总和。我之前用过python

daily_precipitation = ERA5.tp.resample(time='24H').sum('time')*1000

但是 10 月到 3 月之间的天数也被汇总了,我不需要那个。

当我使用 cdo daysum

cdo daysum precip_hourly.nc precip_sum.nc

我收到一个错误:

Warning: Some data values (min=-32766 max=52989) are outside the valid range (-32768 - 32767) of the used output precision!
Use the CDO option -b F32 or -b F64 to increase the output precision.
cdf_put_vara_double: name=tp  type=NC_SHORT  minval=-32766.000000  maxval=52989.000000

我该如何克服这个错误,究竟是哪里出了问题?

答案在错误消息中(CDO 试图提供帮助),您需要将文件从 2 字节压缩整数转换为浮点数

 cdo -b f32 daysum in.nc out.nc

许多像 ecmwf 这样的中心都会打包他们的数据。这意味着字段存储为整数(2 字节),然后对其进行缩放并添加偏移量以获取原始字段。如果您尝试使用

查看元数据
 ncdump -h file.nc 

您将在元数据中看到这些偏移和比例因子。问题是当您将具有不同打包因子的文件组合在一起时,cdo 不知道该怎么做。它不是自动解包,而是强制您手动指定它,因为您必须选择是使用单精度还是双精度(4 或 8 字节)。显然文件大小将因此增加一倍或四倍。