Fortran Coder

标题: 关于数组传递的问题 [打印本页]

作者: 大橙子cqx    时间: 2021-1-24 22:04
标题: 关于数组传递的问题
在module中定义:
[Fortran] 纯文本查看 复制代码
INTEGER DEMENSION(1,2) :: A

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

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

作者: vvt    时间: 2021-1-25 08:19
如果你不确定是环境的问题还是这样传递数组有问题。请用一个简短的代码尝试重现该问题。

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

1. SUBROUTINE TEST 和 module 的关系?是contains在module里,还是另外的程序单元?
2. SUBROUTINE TEST 是否 use 了 module?
3. SUBROUTINE TEST 是否有虚参?并且 A 是否是虚参?
作者: 大橙子cqx    时间: 2021-1-25 10:59
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中



作者: vvt    时间: 2021-1-25 12:09
那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulename , aa => a 对 module 中的 a 改临时名字。
作者: li913    时间: 2021-1-25 18:52
遇到问题一定要给出 错误提示。目测你是语法错误,integer后面需要逗号。
作者: 大橙子cqx    时间: 2021-1-25 20:15
vvt 发表于 2021-1-25 12:09
那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulenam ...

理解了 感谢!




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