Fortran 使用netcdf4编写netcdf经典格式文件

Fortran 使用netcdf4编写netcdf经典格式文件,fortran,mpi,netcdf,Fortran,Mpi,Netcdf,我最近才看到netcdf,对使用它没有太多的线索。此外,我的问题是具体的,我还没有发现任何有用的。我有一个fortran代码,它使用MPI在parralel中执行计算。最终结果-笛卡尔坐标系中的三维字段然后使用netcdf将每个字段写入另一个文件。编写过程由以下代码定义: nf90_create(path=file_name,& cmode=IOR(NF90_NETCDF4,NF90_MPIIO),ncid=ncid,& comm=mp

我最近才看到netcdf,对使用它没有太多的线索。此外,我的问题是具体的,我还没有发现任何有用的。我有一个fortran代码,它使用MPI在parralel中执行计算。最终结果-笛卡尔坐标系中的三维字段然后使用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_模型更改cmode NF90_NETCDF4。当我这样做时,代码会编译、运行,但它以完全错误的方式写入数据。此外,在将变量A写入变量B之前,或者在必须退出使用此命令的子例程之前,它会停止。更清楚一点:在给出的命令之后,代码根据MPI定义start和count,并使用以下IND 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)
因此,我感兴趣的是,我应该对代码进行哪些更改,以便在没有提到问题的情况下,以经典或64位_offstring格式编写所需的数据。如果问题的描述不清楚,我可以提供给我带来麻烦的原始子程序


感谢您提前提供的所有评论

您是否检查了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 

从代码的CMAKEL列表中,我看到使用了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-lhdf-lhdf-lh5-lz-lcurl;