【问题标题】:Reading dates from a NetCDF file using Fortran使用 Fortran 从 NetCDF 文件中读取日期
【发布时间】:2014-06-30 08:45:12
【问题描述】:

我必须使用 Fortran 使用 NetCDF 文件中的数据进行一些计算。而且,根据用户的选择,我只需要从每年中选择一个或几个月。

NetCDF 文件中的日期有时编码为“自 XXXX-XX-XX 以来的月份”,有时编码为“自 XXXX-XX-XX 以来的天数”,其他时间编码为“自 XXXX-XX-XX XX:XX 以来的小时数”等。

此外,这些必须被解释为属于某种类型的日历,可以是公历、儒略历、公历、360天等。

经过多次搜索,我有一个解决这个问题的计划,但想先问问专家。

我的计划如下:

  1. 使用UDUNITS package 将NetCDF 文件中包含的日期信息转换为儒略/公历日期。为此,我必须:

    • 将 UDUNITS 的 C 代码绑定到 Fortran。
  2. 将获得的日期转换为所需的日历。为此,我认为我必须使用日历包。哪个是一个不错的选择?。

你同意吗?

【问题讨论】:

  • 您的链接已损坏。另一种方法是自己做,如果您不关心准确处理 1580 年之前的日期,这会简化很多..
  • 不,我不同意。真的,真正的问题是什么?您可以查看由 SO Fortran 专家之一制作的 github.com/milancurcic/datetime-fortran
  • 看来他们更新了udunits的版本。我已经更新了链接,所以现在可以使用了。
  • 我似乎您建议的库旨在对时间和日期进行操作,而不是将它们从一个日历转换为另一个日历。这是必需的,因为 netcdf 文件中的日期存储在许多不同的日历类型中。例如,您可以遇到我在问题中列出的那些。
  • 如果您发现 netcdf 文件的日历为 360 天,并且日期定义为“自 2000 年 12 月 29 日以来的天数”,则为每个时间步分配一个整数。第一个可以是:0, 1, 2, 3, .. 并且必须被解释为 2000-12-29, 2000-12-30, 2001-01-01, 2001-01-02, ...,但在公历中,它必须被解释为 2000-12-29, 2000-12-30, 2000-12-31, 2001-01-01, ...

标签: date datetime calendar fortran netcdf


【解决方案1】:

我想我找到了一个很好的解决方案:cdi libraries,由 Max-Plank Institute 开发并在 GNU GENERAL PUBLIC LICENSE Version 2 下分发。

它定义了以下类型的日历:CALENDAR STANDARD、CALENDAR PROLEPTIC、CALENDAR 360DAYS、CA​​LENDAR 365DAYS 和 CALENDAR 366DAYS。

这似乎是一个非常成熟的代码,因为它被 cdo 使用,这是一个广泛使用的管理 netcdf 文件的工具。

【讨论】:

  • 只是一个问题:如果我开发一个有用的库来管理基于这些库的 netcdf 文件,我可以在哪里将代码发布给认为它有用的人?。
  • 哪里都有很多网站en.wikipedia.org/wiki/…
猜你喜欢
  • 2020-03-13
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2017-03-29
相关资源
最近更新 更多