Fortran Coder

标题: FFT实参为复数,形参为实数,类型不一致咋办 [打印本页]

作者: laojv1976    时间: 2019-4-22 08:15
标题: FFT实参为复数,形参为实数,类型不一致咋办
实参的定义和调用
complex*16, allocatable :: work3(:,:)
call ZFFTB(this%nx,work3(ii,:),this%Wsx)

形参的定义
  SUBROUTINE ZFFTB (N,C,WSAVE)
  IMPLICIT DOUBLE PRECISION (A-H,O-Z)
  DIMENSION C(1),WSAVE(1)
  IF (N .EQ. 1) RETURN
  IW1 = N+N+1
  IW2 = IW1+N+N
  CALL CFFTB1 (N,C,WSAVE,WSAVE(IW1),WSAVE(IW2))
  RETURN
  END
给出的错误如下:

请问各位大神,如何解决。先谢了

作者: liudy02    时间: 2019-4-22 08:23
这个能怎么办,凉拌……
看子进程这个定义,就是很老很老的程序了
那个时候的程序,好多处理复数的输入输出接口都是实部虚部分两个参数的
所以要不然找到复数版的程序,要不然自己写……
作者: laojv1976    时间: 2019-4-22 08:29
谢谢,我找找看。
作者: laojv1976    时间: 2019-4-22 08:30
liudy02 发表于 2019-4-22 08:23
这个能怎么办,凉拌……
看子进程这个定义,就是很老很老的程序了
那个时候的程序,好多处理复数的输入输出 ...

谢谢,我找找看。
作者: li913    时间: 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数,即形参数组长度是实参的两倍。
作者: laojv1976    时间: 2019-4-22 15:20
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

谢谢。对于编译器不是很懂。我用的VS2012平台、IVF编译器,请问具体在哪里设置-关闭接口检查?拜托啦
作者: laojv1976    时间: 2019-4-22 15:31
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

太感谢你啦,成功啦。谢谢,谢谢!
作者: liudy02    时间: 2019-4-22 21:53
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

唔,还可以这样啊,我以前用的老程序都是操作矩阵的,都是用两个实矩阵表示复矩阵
像你这种思路,矩阵是怎么弄呢,两个矩阵写成一行还是写成一列?
作者: li913    时间: 2019-4-23 11:44
liudy02 发表于 2019-4-22 21:53
唔,还可以这样啊,我以前用的老程序都是操作矩阵的,都是用两个实矩阵表示复矩阵
像你这种思路,矩阵是 ...

写成行或者列都行。fortran数组是列优先,一般用 a(2,n) 或 a(2*n) 存储复数数组c(n)。
作者: liudy02    时间: 2019-4-23 12:37
li913 发表于 2019-4-23 11:44
写成行或者列都行。fortran数组是列优先,一般用 a(2,n) 或 a(2*n) 存储复数数组c(n)。 ...

非常感谢




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2