我使用以下代码在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文件中唯一的变量)
我该怎么做?
答案 0 :(得分: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
的变量 - 这会与同名的内在代码冲突。