使用二进制读写将实数据读入Fortran中的Complex变量

电磁脉冲

我有一个代码,我必须在其中执行大量文件I / O,因此,我想以一种非常有效的方式来处理以下问题。为了方便起见,我的代码始终只编写要重新启动文件的真实部分,编码如下:

OPEN(UNIT = 2, FILE = filename, STATUS = 'UNKNOWN', form = 'unformatted')
    write(2) CFL
    write(2) W
CLOSE(2)

当我在真实分析模式下运行代码时,读取这些文件很简单:

OPEN(UNIT = 2, FILE = filename, STATUS = 'OLD', form = 'unformatted')
    read(2) CFL
    read(2) W
CLOSE(2)

但是当我在复杂环境中运行时,我必须做一些笨拙的hack:

open(UNIT = funit, FILE = filename, STATUS = 'old', form='unformatted')
#ifdef COMPLEX_ON
        read(funit) CFL
        read(funit) W_t
        CFL_in = CFL
        W = W_t
#else                                                                                                                                                                   
        read(funit) CFL_in
        read(funit) W
#endif
close(funit)

这意味着现在我需要数据的两个副本,并且如果我像以前一样使用隐式do循环,则可以一次破解一个条目并将其复制到W数组,但这是一种较慢的方法处理I / O。有没有办法告诉fortran我想将实际的二进制数据读入复杂的变量数组中?

谢谢。

弗拉基米尔F

如果您的编译器是最新的,甚至声称符合Fortran 2008,则可以使用受支持最少的F2008功能之一,并仅阅读真实内容。

write(2) CFL%re
write(2) W%re

您仍然需要#ifdef,但不需要另一个数组。但是,无论如何,编译可能很需要创建一个临时数组。

否则,您可以使用普通的旧equivalence视图将复杂数组视为具有额外维度的真实数组。或存储过程参数的关联也可以这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章