首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子程序中传递的秩值

子程序中传递的秩值
EN

Stack Overflow用户
提问于 2015-07-14 12:10:32
回答 2查看 70关注 0票数 1

在我编写的fortran代码中,使用多维数组有一些问题。

基本上,我定义了一个二维数组,它被传递给membrane,然后必须将它的一维版本传递给set

代码语言:javascript
复制
Case (1)
  Call membrane ("Set", scv(i,:), sty)

下面是接受一维数组的例程。

代码语言:javascript
复制
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) 

...

这是我的套装子例程

代码语言:javascript
复制
Subroutine set (tsk, scv, sty)

Implicit None
Character (Len=*), Intent (In) :: tsk
Logical, Intent (In), Optional :: scv(:)
Character (Len=*), Intent (In), Optional :: sty

然后,当我试图编译我的代码时,我会得到这个错误。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-14 12:38:33

您正在使用一维的membrane切片调用例程scv。因为该子例程需要一个二维数组:

代码语言:javascript
复制
Logical, Intent (In), Optional :: scv(:,:)

你会发现错误的。我不太确定您想要实现什么,但是由于您正在访问膜中数组的第一列(硬编码),我会将虚拟参数scv更改为membrane中的一维参数:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2015-07-14 12:38:23

“然后必须传递它的一个一维版本来设置”

但是子例程需要一个2D数组,因为

代码语言:javascript
复制
Logical, Intent (In), Optional :: scv(:,:)

要么修复声明,要么传递一个2D数组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31406203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档