gfortran 编译问题与双复杂变量

gfortran compiling issue with double complex variable

我一直在尝试编译一个程序并将 运行 变成一个看起来很简单的问题。但是,我还没有能够解决它。非常感谢任何想法。该程序如下所示,

代码:

  subroutine rescal(zy,nvar)

  integer nvar,i, nexponent
  double complex zy(nvar)
  double precision maxabs, scalfac

  maxabs = 0.d0
  do i = 1, nvar
    maxabs = max(zabs(zy),maxabs)
  enddo

maxabs((rank 0)) 应该存储 zymaxabs 的最大值。简单吧?

我尝试用 gfortran 编译这个程序并得到以下错误。我不明白为什么编译器抱怨 maxabs 应该是第 1 位而不是第 0 位。据我了解,zabs 是与双精度复数一起使用的正确函数。

gfortran -e -Ofast -ffixed-line-length-none -std=legacy -c -o rescal.o rescal.f
rescal.f:13.8:

maxabs = max(zabs(zy),maxabs)
1
Error: Incompatible ranks 0 and 1 in assignment at (1)
make: *** [rescal.o] Error 1

max 是一个基本函数,给定一个数组参数 returns 一个数组结果。那么,这里的问题是 zabs(zy) 是一个数组。

简单地说,您在遍历时缺少选择 zy 的元素:

do i = 1, nvar
  maxabs = max(zabs(zy(i)),maxabs)  ! Select the i-th element of zy
enddo

也就是说,有几点:

  • 您可以通过使用通用 abs;
  • 来避免非标准特定 zabs
  • maxval 功能可用。

您可以改为

maxabs = MAXVAL(ABS(zy))