如何在 netcdf 强制气候学文件中使时间变量连续?

How to make time variable continuous in a netcdf forcing climatology file?

我有一个强制 NetCDF 气候学文件,它有 4 个维度,即时间、纬度、经度和高度。我正在使用来自 GFDL 的灵活建模系统 (FMS) 阅读此文件。我想保持时间连续,或者类似于周期性边界条件。例如,我应该只提供一年的月度文件,而模型应该直接从我的文件中提取相应的月份,而无需准确检查具体年份。我正在进行一些实验,其中一些强迫保持不变,而另一些则发生变化(以提供我为什么要这样做的背景)。

您可以使用以下 nco 命令将模属性添加到您的时间维度

ncatted -a modulo,time,c,c," " filename.nc

您可以创建一个 netcdf 文件,其中同一年份重复多次并使用 cdo 覆盖时间戳以给出 "dummy" 年份。假设您的示例 netcdf 文件“oneyear.nc”具有年份 2002 的时间,而您的其他 "changing" 文件涵盖从 1980 年到 2010 年的年份(如果我理解你的问题,一些变量会逐年变化,它只是你想要保持不变的一个特定文件)。

然后你可以用这种方式创建一组带有虚拟时间戳的年份文件

for offset in $(seq -22 8) ; do 
    cdo shifttime,${offset}years oneyear.nc year${offset}.nc
done

然后您可以使用 mergetime 将它们合并到一个文件中:

cdo mergetime year*.nc mydriverfile.nc

mydriverfile.nc 现在应该包含与虚拟 "fake" 年重复 30 年的相同月度数据,然后可以像其他驱动程序文件一样轻松阅读。

编辑:关于上面关于闰年的讨论,显然对于月度数据这不是问题,但是如果你想用每日数据执行这个任务,那么使用这个解决方案你应该 select 一个样本闰年,或者为 2 月 29 日插入一个虚拟日。我还怀疑上面的模解决方案在应用于每日输入时会遇到闰年问题。