我最近才接触到netcdf,对它的使用没有多少头绪。此外,我的问题是具体的,我还没有找到任何有用的东西。我有一个使用MPI在parralel中执行计算的fortran代码。最终结果-笛卡尔坐标系统中的3D字段-然后使用netcdf将每个字段写入另一个文件。编写过程由以下代码定义:
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格式编写所需的数据,而不会出现上述问题。如果问题的表达不清楚,我可以提供给我带来麻烦的原始子例程。
感谢您提前提出的所有意见
发布于 2014-02-18 18:22:03
您是否检查了NetCDF例程返回的状态?以并行方式写入NetCDF3格式无论如何都是不可能的,因此nf90_open语句中可能已经存在错误。尝试将NetCDF调用封装到提供的Check子例程中。这应该会给出更有意义的错误消息:
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 https://stackoverflow.com/questions/21817158
复制相似问题