0

我使用以下代码在 fortran 中的现有 netCDF 文件中添加了一个新维度 -

retval = nf_open(cfn,NF_WRITE,ncid)
if (retval .ne. nf_noerr) call handle_err(retval)
retval = nf_redef(ncid)
if (retval .ne. nf_noerr) call handle_err(retval)
retval = nf_def_dim(ncid,"xyz",len,dimid_xyz)
if (retval .ne. nf_noerr) call handle_err(retval)        
retval = nf_enddef(ncid)

现在我希望能够用零值填充这个维度。在我的情况下,这个集合的基数等于位势高度的变量的基数。此外,我还有其他三个维度——时间(无限)、纬度、经度和水平。

我在 fortran 中查找了 netCDF API,但不确定要调用的 API 是什么。当我使用以下 API 时

   retval = nf_put_var_real(ncid,dimid_xyz,xyzArray)
   if (retval .ne. nf_noerr) call handle_err(retval)

它最终用 0.0 覆盖了位势高度值(这是我的 netCDF 文件中的唯一变量)

我该怎么做呢?

4

1 回答 1

1

据我了解,维度与变量不同,维度不能有值,但变量可以——我认为一种相当普遍的做法可能是创建维度并创建一个具有相同名称的变量。然后,您可以为变量提供您想要的任何值。

您的代码可能看起来像

retval = nf_open(cfn,NF_WRITE,ncid)
if (retval .ne. nf_noerr) call handle_err(retval)
retval = nf_redef(ncid)
if (retval .ne. nf_noerr) call handle_err(retval)
retval = nf_def_dim(ncid,"xyz",len,dimid_xyz)
if (retval .ne. nf_noerr) call handle_err(retval) 

retval = nf_def_var(ncid,"xyz",netcdf_real,1,[dimid_xyz], varid_xyz)
if (retval .ne. nf_noerr) call handle_err(retval) 

retval = nf_enddef(ncid)

retval = nf_put_vara(ncid,varid_xyz,[1],[len],arrayOfZero)
if (retval .ne. nf_noerr) call handle_err(retval) 

注意我建议不要len在你的fortran代码中使用一个命名的变量——这将与同名的内在冲突。

于 2016-08-23T10:44:18.610 回答