【问题标题】:add a new variable to a netcdf file that increases with time向随时间增加的 netcdf 文件添加新变量
【发布时间】:2020-04-06 12:19:09
【问题描述】:

我想在现有的 netcdf 文件中添加一个新变量,该变量简单地随文件的时间变量线性增加,也就是说,在第一个时间片上,变量到处都有数字 1,在第二个时间片上它是设置为 2 等。

我知道如何在 python 或 fortran 中打开文件并定义和添加变量并写出修改后的文件,但我希望可能有一种快速简便的方法可以使用 ncocdo。我还想知道是否可以通过使用 ncdump 将文件转储为 CDL 格式、破解它并使用 ncgen 将其转回 netcdf 来做到这一点,但这似乎更冗长且有问题比python方法。

【问题讨论】:

    标签: netcdf cdo-climate nco


    【解决方案1】:

    对于一维数组使用这个

    ncap2 -s 'var=array(1,1,$time)' in.nc out.nc
    

    对于多维数组,只需将其添加到零数组中

    ncap2 -s 'var=array(0,0,/$time,$lat,$lon/)+array(1,1,$time)' in.nc out.nc
    

    数组的数值类型由数组函数的第一个参数的类型决定。详情请参阅array() 上的manual

    【讨论】:

      【解决方案2】:

      我刚刚发现(询问两年后!)还有一个cdo 函数seq 可以产生递增的时间序列。生成的文件是针对单点的,因此您需要 enlarge 字段以匹配目标网格,最后 merge 与原始文件:

      # in the follow $n is the number of timeslices in in.nc 
      cdo -f nc4 seq,1,$n seq.nc 
      cdo enlarge,in.nc seq.nc seq2d.nc # enlarge to in.nc grid
      cdo merge in.nc seq2d.nc out.nc   # and merge
      

      您可以通过以下方式将这一切通过管道传输到一个命令中:

      cdo merge in.nc -enlarge,in.nc -seq,1,$n out.nc
      

      nco 解决方案很棒,但我想我可能会觉得这更容易记住。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 2023-01-21
        • 2012-01-23
        • 2017-01-31
        • 2019-09-03
        • 1970-01-01
        • 2017-06-27
        相关资源
        最近更新 更多