Fortran NetCDF - 添加的新维度需要用零填充

Fortran NetCDF - added new dimension need to fill it with zeroes

我使用以下代码向 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 到 call.When 是什么 我使用以下 API

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

它最终用 0.0(这是我的 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_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) 

请注意,我建议不要在 fortran 代码中使用名为 len 的变量——这会与同名的内在变量发生冲突。