将共轭应用于实数组 (Fortran)

Apply conjugation to real array (Fortran)

在 Fortran 中,我有一个实数 real :: work(2*N) 类型的一维数组,它表示 N 复数。我对数组的声明没有任何影响。

稍后我需要在 work 上应用复杂的共轭。但是,conjg(work(:)) 不起作用,因为它是实数类型。

有没有一种有效的方法可以说服编译器将 conjg 应用于我的数组?

使用复杂变量,COMPLEX :: temp(N) 并对其应用共轭。然后,您可以使用 REAL(temp)AIMAG(temp) 剖析真实的和复杂的部分并将它们放回您的工作数组中。 不过,从一开始就将 work 设为复杂类型可能更好。

最简单的方法已经在HighPerformanceMark的评论中,只需将代表虚部的元素乘以-1即可。

您还可以在实数数组和复数数组之间使用equivalence。它将只是一个阵列,但被视为既真实又复杂。也许不严格符合标准(不确定)但只要 N 不变就可以工作。

等效项用作:

real :: work(2*N)
complex :: cwork(N)

!both work and cwork point to the same data
equivalence (work, cwork)

work = some_initial_value

!this conjugates work at the same time as cwork because they are just different names for the same array
cwork = conjg(cwork)