Fortran Coder

查看: 154|回复: 5

[Module] 关于数组传递的问题

[复制链接]

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
发表于 2021-1-24 22:04:16 | 显示全部楼层 |阅读模式
在module中定义:
[Fortran] 纯文本查看 复制代码
INTEGER DEMENSION(1,2) :: A

然后在子程序中:
[Fortran] 纯文本查看 复制代码
SUROUTINE TEST
     INTEGER DEMENSION(:,:) :: A
END SUROUTINE TEST

这样仅仅是写在形参表中就会导致错误,但是如果定义的数组是一维的话则不会出错。
因为程序运行环境比较复杂,包的错误和MPI有关,因此不确定是环境的问题还是这样传递数组有问题。
回复

使用道具 举报

856

帖子

0

主题

0

精华

宗师

F 币
1466 元
贡献
814 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2021-1-25 08:19:37 | 显示全部楼层
如果你不确定是环境的问题还是这样传递数组有问题。请用一个简短的代码尝试重现该问题。

你需要明确的描述你的问题,才能让别人听懂。

1. SUBROUTINE TEST 和 module 的关系?是contains在module里,还是另外的程序单元?
2. SUBROUTINE TEST 是否 use 了 module?
3. SUBROUTINE TEST 是否有虚参?并且 A 是否是虚参?

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
 楼主| 发表于 2021-1-25 10:59:04 | 显示全部楼层
vvt 发表于 2021-1-25 08:19
如果你不确定是环境的问题还是这样传递数组有问题。请用一个简短的代码尝试重现该问题。

你需要明确的描述 ...

不好意思写的有点不清楚了
TEST和module处于不同的程序单元,但是use了module
[Fortran] 纯文本查看 复制代码
SUROUTINE TEST(A)
     INTEGER DEMENSION(:,:) :: A
END SUROUTINE TEST

TEST的A为形参,由调用TEST的子程序传入,调用TEST的子程序contain在module中


856

帖子

0

主题

0

精华

宗师

F 币
1466 元
贡献
814 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2021-1-25 12:09:23 | 显示全部楼层
那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulename , aa => a 对 module 中的 a 改临时名字。

586

帖子

1

主题

0

精华

大宗师

F 币
2908 元
贡献
1836 点
发表于 2021-1-25 18:52:14 | 显示全部楼层
遇到问题一定要给出 错误提示。目测你是语法错误,integer后面需要逗号。

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
 楼主| 发表于 2021-1-25 20:15:54 | 显示全部楼层
vvt 发表于 2021-1-25 12:09
那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulenam ...

理解了 感谢!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2021-3-6 07:29

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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