如何在netCDF中为现有变量添加新维度?

时间:2016-08-23 16:30:42

标签: fortran netcdf netcdf4

代码是这个答案确实有效Add a new dimension 但它不能做我想做的事情。

为了进一步说明我的问题 - 我有以下定义 时间(无限制),纬度,经度,水平为四维和一个可变的位势高度。我想要做的是将维度dimz_Z添加到现有的变量位势高度。

现在,上面代码中的答案是netCDF文件与ncdump一样的样子

float hgt(time, level, lat, lon) 

但是dimz_Z维度缺失,如下面从ncks的输出中看到的那样。

hgt dimension 0: time, size = 1 NC_DOUBLE, chunksize = 1 (Record coordinate is time)
hgt dimension 1: level, size = 1 NC_FLOAT, chunksize = 1 (Coordinate is level)
hgt dimension 2: lat, size = 23 NC_FLOAT, chunksize = 23 (Coordinate is lat)
hgt dimension 3: lon, size = 21 NC_FLOAT, chunksize = 21 (Coordinate is lon)

它确实显示在定义中,但作为独立维度和 hgt维度的一部分

 dimz_Z: type NC_FLOAT, 1 dimension, 0 attributes, compressed? no, chunked? no, packed? no
 dimz_Z size (RAM) = 483*sizeof(NC_FLOAT) = 483*4 = 1932 bytes
 dimz_Z dimension 0: dimz_Z, size = 483 NC_FLOAT (Coordinate is dimz_Z)

这是文件的输出

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 hgt[1]=55 m

我想要的是以下

time[0]=1879032 level[0]=1000 lat[0]=60 lon[0]=50 dimz_Z[0]=0 hgt[0]=53 m
time[0]=1879032 level[0]=1000 lat[0]=60 lon[1]=52.5 dimz_Z[0]=0 hgt[1]=55 m

朋友告诉我的是,我无法将此维度添加到现有变量中。相反,在fortran中,我必须将变量hgt重新定义为五维变量并将值重新设置。这是正确的还是有其他选择? 我正在使用Fortran 77 netcdf API。

1 个答案:

答案 0 :(得分:1)

你的朋友是对的。 但是,您可以考虑一些选项。在编程方面几乎总有选择。

  1. 从初始文件创建一个新的netcdf文件,并在新文件中定义您的变量以获得额外的维度。你可以在fortran中做到这一点
  2. 使用netcdf处理工具(nco)创建一个包含所需属性的新变量,并删除另一个变量。