Fortran Coder

查看: 85|回复: 2

[子程序] fortran 数组作为参数传递

[复制链接]

7

帖子

2

主题

0

精华

入门

F 币
51 元
贡献
27 点
发表于 2017-12-18 00:54:35 | 显示全部楼层 |阅读模式
我正在读一段代码,其中有段数组作为子程序参数传递没有看懂,特来求助:

在主程序里面代码如下:

[Fortran] 纯文本查看 复制代码
  do icx=1,ncx
   call var_pack(nx,idimx(icx),wmh,xpac,Vt(1,1,icx),nx*2,&
     &            St(1,icx),Ct(1,1,icx),iprint)
...


这里数组 Ct 是三维数组,在调用语句里面用的是它的某一个元素 Ct(1,1,icx)。

而在子程序 var_pack 里面,对应的 C1 这个数组是两维的:

subroutine var_pack(n,nc,wmh,xpac,V,m,S,C1,iprint)

REAL*8 V(m,m),xpac(0:m),S(m),C1(m,m)

那么,在子程序里面计算得到的 C1(m,m) 这个矩阵的 m*m 个元素如何和主程序里面的三维矩阵 Ct 的元素对应呢?

谢谢!



回复

使用道具 举报

1155

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂

F 币
1170 元
贡献
916 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2017-12-18 08:33:21 | 显示全部楼层
按顺序对应,如果 Ct 的第一维和第二维大小都是 m 的话。相当于把 Ct(:,:,icx) 传递进去了,也就是 Ct 第三维度为 icx 时的所有第一维度和第二维度。

这种方式非常不建议使用。可以用 Ct(:,:,icx) 代替

7

帖子

2

主题

0

精华

入门

F 币
51 元
贡献
27 点
 楼主| 发表于 2017-12-18 08:52:37 | 显示全部楼层
谢谢回复!我也是第一次见这种写法,觉得挺不符合我的习惯。我得再理解理解。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2018-1-23 09:57

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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