【问题标题】:writing netcdf classic format files using netcdf4使用 netcdf4 编写 netcdf 经典格式文件
【发布时间】:2014-02-18 18:22:03
【问题描述】:

我最近才遇到 netcdf 并且对使用它没有太多线索。此外,我遇到的问题是具体的,我还没有发现任何有用的东西。我有一个使用 MPI 以并行方式执行计算的 fortran 代码。然后使用 netcdf 将最终结果(笛卡尔坐标系中的 3d 字段)分别写入另一个文件。编写过程由以下代码定义:

nf90_create(path=file_name,&
           cmode=IOR(NF90_NETCDF4,NF90_MPIIO),ncid=ncid,&
           comm=mpid%comm,info=MPI_INFO_NULL))

现在,我有另一个使用 netcdf3 的代码,因此它无法读取 netcdf4 格式。我想做的是用NF90_CLASSIC_MODEL改变cmode NF90_NETCDF4。当我这样做时,代码会编译、运行,但它会以完全错误的方式写入数据。此外,它在从写入变量 A 到写入变量 B 之前停止。或者在它必须退出使用该命令的子例程之前。澄清一点:在给出的命令之后,代码根据 MPI 定义 start 和 count 并使用以下 netcdf 命令:

nf90_def_dim(ncid,dim_name(i),dim_len(i),dimid(i))
nf90_def_var(ncid,var_name,nf90_real,dimid,varid(1))
nf90_enddef(ncid)
nf90_put_var(ncid,varid(1),var,start=startv,count=countv)
nf90_close(ncid)

所以,我很感兴趣,我应该对代码进行哪些更改才能以经典或 64bit_offstring 格式写入所需的数据而没有提到的问题。如果问题的表现不清楚,我可以提供给我带来麻烦的原始子程序。

提前感谢所有的cmets

【问题讨论】:

  • 从代码的 CMakeList 中我看到使用了 netcdf4。更具体地说,这里是使用的库的完整列表,与 netcdf 连接:-I/opt/netcdf/netcdf4/include -L/opt/netcdf/netcdf4/lib -lnetcdff -L/opt/pnetcdf/pnetcdf-1.2 .0/lib -L/opt/netcdf/netcdf4/hdf5.1.8.8/lib -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl;

标签: fortran mpi netcdf


【解决方案1】:

您是否检查过 NetCDF 例程返回的状态?无论如何,并行写入 NetCDF3 格式是不可能的,因此您的 nf90_open 语句中可能已经存在错误。 尝试将您的 NetCDF 调用封装到提供的检查子例程中。这应该会为您提供更有意义的错误消息:

call check( nf90_open(...) )


contains
  subroutine check(status)
    integer, intent ( in) :: status

    if(status /= nf90_noerr) then 
      print *, trim(nf90_strerror(status))
      stop "Stopped"
    end if
  end subroutine check 

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 2020-06-12
    • 2015-10-30
    • 2015-11-03
    • 2012-08-01
    • 2016-03-25
    • 2017-04-24
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多