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

时间:2016-08-23 09:37:01

标签: fortran netcdf netcdf4

我使用以下代码在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文件中唯一的变量)

我该怎么做?

1 个答案:

答案 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的变量 - 这会与同名的内在代码冲突。