Fortran Coder

查看: 257|回复: 9

[子程序] FFT实参为复数,形参为实数,类型不一致咋办

[复制链接]

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
12 点
发表于 2019-4-22 08:15:35 | 显示全部楼层 |阅读模式
实参的定义和调用
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
给出的错误如下:

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

使用道具 举报

120

帖子

8

主题

0

精华

宗师

F 币
2906 元
贡献
509 点
发表于 2019-4-22 08:23:22 | 显示全部楼层
这个能怎么办,凉拌……
看子进程这个定义,就是很老很老的程序了
那个时候的程序,好多处理复数的输入输出接口都是实部虚部分两个参数的
所以要不然找到复数版的程序,要不然自己写……

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
12 点
 楼主| 发表于 2019-4-22 08:29:37 | 显示全部楼层
谢谢,我找找看。

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
12 点
 楼主| 发表于 2019-4-22 08:30:14 | 显示全部楼层
liudy02 发表于 2019-4-22 08:23
这个能怎么办,凉拌……
看子进程这个定义,就是很老很老的程序了
那个时候的程序,好多处理复数的输入输出 ...

谢谢,我找找看。

360

帖子

1

主题

0

精华

宗师

F 币
1904 元
贡献
1248 点
发表于 2019-4-22 09:43:08 | 显示全部楼层
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数,即形参数组长度是实参的两倍。

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
12 点
 楼主| 发表于 2019-4-22 15:20:31 | 显示全部楼层
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

谢谢。对于编译器不是很懂。我用的VS2012平台、IVF编译器,请问具体在哪里设置-关闭接口检查?拜托啦

5

帖子

1

主题

0

精华

新人

F 币
22 元
贡献
12 点
 楼主| 发表于 2019-4-22 15:31:53 | 显示全部楼层
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

太感谢你啦,成功啦。谢谢,谢谢!

120

帖子

8

主题

0

精华

宗师

F 币
2906 元
贡献
509 点
发表于 2019-4-22 21:53:53 | 显示全部楼层
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

唔,还可以这样啊,我以前用的老程序都是操作矩阵的,都是用两个实矩阵表示复矩阵
像你这种思路,矩阵是怎么弄呢,两个矩阵写成一行还是写成一列?

360

帖子

1

主题

0

精华

宗师

F 币
1904 元
贡献
1248 点
发表于 2019-4-23 11:44:20 | 显示全部楼层
liudy02 发表于 2019-4-22 21:53
唔,还可以这样啊,我以前用的老程序都是操作矩阵的,都是用两个实矩阵表示复矩阵
像你这种思路,矩阵是 ...

写成行或者列都行。fortran数组是列优先,一般用 a(2,n) 或 a(2*n) 存储复数数组c(n)。

120

帖子

8

主题

0

精华

宗师

F 币
2906 元
贡献
509 点
发表于 2019-4-23 12:37:08 | 显示全部楼层
li913 发表于 2019-4-23 11:44
写成行或者列都行。fortran数组是列优先,一般用 a(2,n) 或 a(2*n) 存储复数数组c(n)。 ...

非常感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-8-21 12:34

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表