繁体   English   中英

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

[英]Reading Real data into Complex variables in Fortran using binary read and write

我有一个代码,我必须在其中执行大量文件 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 我想将真正的二进制数据读入一个复杂的变量数组?

谢谢。

如果您的编译器是最新的,或者甚至声称符合 Fortran 2008,您可以使用受支持最少的 F2008 功能之一并阅读真正的部分

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM