Fortran Coder

查看: 9477|回复: 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
给出的错误如下:

请问各位大神,如何解决。先谢了
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
沙发
发表于 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
这个能怎么办,凉拌……
看子进程这个定义,就是很老很老的程序了
那个时候的程序,好多处理复数的输入输出 ...

谢谢,我找找看。

835

帖子

2

主题

0

精华

大宗师

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

5

帖子

1

主题

0

精华

新人

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

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

5

帖子

1

主题

0

精华

新人

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

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

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
8#
发表于 2019-4-22 21:53:53 | 只看该作者
li913 发表于 2019-4-22 09:43
如果确认代码无误,在设置里关闭接口检查即可。老代码中这种写法很常见,基本原理是用两个实数存储一个复数 ...

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

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
9#
发表于 2019-4-23 11:44:20 | 只看该作者
liudy02 发表于 2019-4-22 21:53
唔,还可以这样啊,我以前用的老程序都是操作矩阵的,都是用两个实矩阵表示复矩阵
像你这种思路,矩阵是 ...

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

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
10#
发表于 2019-4-23 12:37:08 | 只看该作者
li913 发表于 2019-4-23 11:44
写成行或者列都行。fortran数组是列优先,一般用 a(2,n) 或 a(2*n) 存储复数数组c(n)。 ...

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

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 09:45

Powered by Tencent X3.4

© 2013-2024 Tencent

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