大橙子cqx 发表于 2021-1-24 22:04:16

关于数组传递的问题

在module中定义:
INTEGER DEMENSION(1,2) :: A
然后在子程序中:
SUROUTINE TEST
   INTEGER DEMENSION(:,:) :: A
END SUROUTINE TEST
这样仅仅是写在形参表中就会导致错误,但是如果定义的数组是一维的话则不会出错。
因为程序运行环境比较复杂,包的错误和MPI有关,因此不确定是环境的问题还是这样传递数组有问题。

vvt 发表于 2021-1-25 08:19:37

如果你不确定是环境的问题还是这样传递数组有问题。请用一个简短的代码尝试重现该问题。

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

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

大橙子cqx 发表于 2021-1-25 10:59:04

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

你需要明确的描述 ...

不好意思写的有点不清楚了
TEST和module处于不同的程序单元,但是use了module
SUROUTINE TEST(A)
   INTEGER DEMENSION(:,:) :: A
END SUROUTINE TEST

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


vvt 发表于 2021-1-25 12:09:23

那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulename , aa => a 对 module 中的 a 改临时名字。

li913 发表于 2021-1-25 18:52:14

遇到问题一定要给出 错误提示。目测你是语法错误,integer后面需要逗号。

大橙子cqx 发表于 2021-1-25 20:15:54

vvt 发表于 2021-1-25 12:09
那么虚参的 A 和 module 里面的 a 会发生命名冲突。尝试改一下虚参的A的名字,或者 use 时用 use modulenam ...

理解了 感谢!
页: [1]
查看完整版本: 关于数组传递的问题