在我编写的fortran代码中,使用多维数组有一些问题。
基本上,我定义了一个二维数组,它被传递给membrane,然后必须将它的一维版本传递给set。
Case (1)
Call membrane ("Set", scv(i,:), sty)下面是接受一维数组的例程。
Subroutine membrane (tsk, scv, sty)
Implicit None
Character (Len=*), Intent (In) :: tsk
Logical, Intent (In), Optional :: scv(:,:)
Character (Len=*), Intent (In), Optional :: sty
Select Case (tsk)
Case ("Set")
Call set (tsk, scv(1,:), sty)
...这是我的套装子例程
Subroutine set (tsk, scv, sty)
Implicit None
Character (Len=*), Intent (In) :: tsk
Logical, Intent (In), Optional :: scv(:)
Character (Len=*), Intent (In), Optional :: sty然后,当我试图编译我的代码时,我会得到这个错误。
sct/btun/membrane.f:185:35:
Call membrane ("Set", scv(i,:), sty)
1
Error: Rank mismatch in argument 'scv' at (1)
(rank-2 and rank-1)发布于 2015-07-14 12:38:33
您正在使用一维的membrane切片调用例程scv。因为该子例程需要一个二维数组:
Logical, Intent (In), Optional :: scv(:,:)你会发现错误的。我不太确定您想要实现什么,但是由于您正在访问膜中数组的第一列(硬编码),我会将虚拟参数scv更改为membrane中的一维参数:
Subroutine membrane (tsk, scv, sty)
...
Logical, Intent (In), Optional :: scv(:)
...
Select Case (tsk)
Case ("Set")
Call set (tsk, scv(:), sty)
...注意,现在整个数组被传递给set。
或者,将完整的2D数组与计数器i一起传递给i,并将i-th行传递给set。
发布于 2015-07-14 12:38:23
“然后必须传递它的一个一维版本来设置”
但是子例程需要一个2D数组,因为
Logical, Intent (In), Optional :: scv(:,:)要么修复声明,要么传递一个2D数组。
https://stackoverflow.com/questions/31406203
复制相似问题