【发布时间】:2016-04-26 20:20:39
【问题描述】:
我试图理解 Fortran 77 代码,但偶然发现了代码上的 EQUIVALENCE() 语句。
下面是部分代码:
REAL*8 DATA1(0:N-1)
COMPLEX*16 DATA2(0:N/2-1)
EQUIVALENCE(DATA1, DATA2)
...
...
CALL FFT(DATA1, N/2, -1)
FFT 子程序基本上是一个一维复数到复数 FFT 引擎。子程序中有一些置换和矩阵向量乘法。
代码稍后以这种方式调用DATA2:
K0=DATA2(0)
K1=DCONJG(DATA2(0))
谁能告诉我为什么使用 EQUIVALENCE() 语句?我的假设是 DATA1,它是 REAL,被更改为 DATA2,它是 COMPLEX 变量,在 FFT 子程序上执行了一些更改。但如果是这样,那DATA2的虚部呢?因为 FFT 子程序只包含 REAL 变量。为什么 DATA1 和 DATA2 的数组大小不同?
我在这个论坛上找不到任何可以满足我的问题的答案。感谢您的回答。这对我有很大帮助。
【问题讨论】:
-
感谢链接,之前没找到。
-
@HighPerformanceMark 所以,让我说,如果 DATA1(0) 包含值 1,DATA2(0) 包含值 1 实部和虚部?
-
data1(0)和data1(1)是data2(0)的实部和虚部。 -
@agentp 谢谢!现在更有意义了。 :)
-
是的,金锤是双向的。缺点是链接现在消失了。我不记得它与哪个问题有关。