【问题标题】:Checking if a NETCDF file already exists检查 NETCDF 文件是否已存在
【发布时间】:2020-10-19 07:21:21
【问题描述】:

检查给定的 netCDF 文件是否存在于 Fortran90 中的最佳方法是什么?我有一个 Fortran 程序,它模拟多个系统并将数据存储在 NETCDF 文件中,我希望能够对其进行设置,以便我可以使用已经存在的 netCDF 文件运行代码并附加额外的数据。

它似乎适用于以下内容:

status = nf90_open(filePath, NF90_WRITE, netcdfID)
if (status /= nf90_noerr) then
    new_status = nf90_create(filePath, NF90_NETCDF4, netcdfID)
    ! setup
else
    ! check file has correct dimensions etc
end if

但我希望能够具体说明错误,但the documentation 并没有非常具体地说明当文件已经存在时错误代码是什么。

我也考虑过检查nf90_create(...)调用的状态,但不知道如何同时指定cmode=NF90_NETCDF4cmode=NF90_NOCLOBBER

【问题讨论】:

    标签: fortran netcdf netcdf4


    【解决方案1】:

    老实说,当我将 NetCDF 与 Fortran 一起使用并需要查看文档时,我会查看 https://www.unidata.ucar.edu/software/netcdf/docs/modules.html 的 C 文档并将其“翻译”为 Fortran API(例如将 nc_ 替换为nf90_) 因为 C 文档比 Fortran 文档更新得多。

    似乎有这些可能的状态结果:

    • NF90_NOERR 没有错误。
    • NF90_EPERM 尝试在您无权打开文件的目录中创建 netCDF 文件。
    • NF90_ENFILE打开的文件太多
    • NF90_ENOMEM 内存不足。
    • NF90_EHDFERR HDF5 错误。 (仅限 NetCDF-4 文件。)
    • NF90_EDIMMETA netCDF-4 维度元数据中的错误。 (仅限 NetCDF-4 文件。)

    这些都表明您正在打开一个不存在的文件。试试看?

    但是如果你只想知道文件是否已经存在,为什么不使用Fortran的INQUIRE语句呢?

    logical :: fileExists
    ...
    inquire(file=filePath, exist=fileExists)
    if (fileExists) then
        call nf90_open(
    else
        call nf90_create(
    end if
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多