[英]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.