0

代码是这个答案确实有效添加了一个新维度,但它没有做我想要它做的事情。

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

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

float hgt(time, level, lat, lon) 

但是从 ncks 的输出如下所示,缺少 dimz_Z 维度。

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。

4

1 回答 1

1

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

  1. 从初始文件创建一个新的 netcdf 文件,并在新文件中定义变量以获得额外的维度。你可以在fortran中做到这一点
  2. 使用 netcdf 处理工具 (nco) 创建具有所需属性的新变量并删除另一个变量。
于 2016-08-24T13:46:06.063 回答