【发布时间】:2023-02-03 02:10:59
【问题描述】:
我尝试寻找我遇到的这个问题的答案,但我找不到答案(或者如果可能的话,就此而言)。
我在两个计算流体动力学求解器上工作,它们都是用 Fortran 编写的。 这两个求解器共享处理数据 I/O 的源文件。 主要区别在于,一个求解器使用双精度实数 (real8),而另一个求解器使用单精度 (real4)。
对于最初的 HDF5 开发,我在双精度求解器中实现了 HDF5 I/O。一切都按预期工作,没有问题。存储库中提供的 HDF5 示例足以指导我。
现在我还想在单精度求解器中利用这些 HDF5 I/O 例程。 但是,写入实数会带来问题,因为我需要在 HDF5 API 调用中定义 H5T_NATIVE_DOUBLE 或 H5T_NATIVE_FLOAT。
我想要的是能够在编译时根据编译的求解器在 H5T_NATIVE_DOUBLE 或 H5T_NATIVE_FLOAT 之间切换。
由于对 HDF5 API 的调用超过 60 次,因此使用 Makefile 指令并不是一个优雅的解决方案。
我将如何着手完成这个?
由于 H5T_NATIVE_DOUBLE 和 H5T_NATIVE_FLOAT 都是 HDF5 类型,因此我无法找到其他可用的类型。也许我可以定义一个从 HDF5 类型继承 double 或 float 类型的符号类型?
我还没有遇到过像这个问题这样的事情,我不知道什么是好的方法。
【问题讨论】:
-
显示代码示例可能会有所帮助。
use hd5f, my_data_type=>h5t_native_float之类的东西在某些情况下可能有效,但在其他情况下则无效。 -
当然,必须有某种机制可以直接在单个数据文件中使用多种数据类型(例如 IEEE fpe 类型),而无需使用某些系统特定的 native_float。但我不使用 HDF。
-
自从我使用 HDF5 以来已经有一段时间了,所以我不确定这些建议可能需要付出多少努力,而且他们并没有回答这个问题,而是完全绕过它。 (1) 以双精度存储所有 f-p 数字,单精度版本的代码必须根据需要向上和向下转换数字 (2) 设计文件以存储单精度和双精度浮点数;求解器使用他们想要的精度。我轻率地挥舞着存在的一些过程会注意,如果一个文件包含两个版本,它们讲述的是同一个故事。
标签: floating-point fortran hdf5