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)) 应该存储 zy
和 maxabs
的最大值。简单吧?
我尝试用 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))
我一直在尝试编译一个程序并将 运行 变成一个看起来很简单的问题。但是,我还没有能够解决它。非常感谢任何想法。该程序如下所示,
代码:
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)) 应该存储 zy
和 maxabs
的最大值。简单吧?
我尝试用 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
; 来避免非标准特定 maxval
功能可用。
zabs
您可以改为
maxabs = MAXVAL(ABS(zy))