如何将CMIP6逐小时降水数据转为日值并修正单位至mm/day
CMIP6逐小时降水转日降水量(mm/day)的单位修正方法
单位转换原理
CMIP6的降水变量pr单位是kg/m²/s,要转换为常用的mm/day,核心逻辑基于水的密度特性:
- 1 kg/m²的降水量 = 1 mm的降水深度(1m²面积上,1mm深的水体积为0.001m³,质量=密度×体积=1000kg/m³×0.001m³=1kg)
- 1小时=3600秒,因此逐小时的降水速率需先转换为该小时的降水量(mm),再累加24小时得到日值。
错误原因
直接累加24小时的原始pr数据会偏小,是因为原始数据是每秒的降水速率,而非每小时的降水量。你需要先将速率乘以时间间隔(3600秒/小时),得到该小时的实际降水量后再累加。
具体实现方式
方法1:Python xarray(推荐)
import xarray as xr # 读取NC文件 ds = xr.open_dataset("your_precip_data.nc") pr = ds["pr"] # CMIP6中降水变量通常命名为pr # 1. 将每秒速率转换为每小时降水量(mm) pr_mm_per_hour = pr * 3600 # kg/m²/s × 3600s = kg/m² = mm # 2. 按日期维度累加,得到日降水量(mm/day) pr_daily_mm = pr_mm_per_hour.resample(time="D").sum(dim="time") # 保存结果或与观测数据对比 pr_daily_mm.to_netcdf("daily_precip_mm.nc")
方法2:NCO命令行工具
# 第一步:将pr单位转换为mm/hour ncap2 -s 'pr=pr*3600;' input.nc temp.nc # 第二步:按日累加得到日降水量 cdo daysum temp.nc daily_precip_mm.nc # 清理临时文件 rm temp.nc
验证说明
转换完成后,可选取若干典型降水日,对比转换后的日值与观测数据的量级是否匹配(比如暴雨日通常在几十到上百mm),确保单位转换正确。
内容的提问来源于stack exchange,提问作者Fernando Primo Forgioni
相关产品推荐
相关产品推荐

