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
的变量——这会与同名的内在变量发生冲突。
我使用以下代码向 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
的变量——这会与同名的内在变量发生冲突。