Fortran Coder

查看: 528|回复: 4
打印 上一主题 下一主题

[子程序] 数组传递

[复制链接]

48

帖子

15

主题

0

精华

熟手

F 币
179 元
贡献
104 点
跳转到指定楼层
楼主
发表于 2023-12-13 20:33:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 caimaxwell 于 2023-12-13 20:35 编辑

大佬们问个问题,TmpiSubblocks数组有值,为什么call之后sbtmp没有被赋值呢?这个数组的值为什么没有被传递过去呢?

3.png (5.95 KB, 下载次数: 53)

3.png

2.png (13.32 KB, 下载次数: 59)

2.png

1.png (4.83 KB, 下载次数: 50)

1.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2023-12-14 08:40:52 | 只看该作者
这个不好说,需要更多的代码才好判断。

你可以检查一下 TmpiSubblocks 数组的大小,是否和子程序中 sbtmp 的一致?
尝试用假定形状传递方式?

48

帖子

15

主题

0

精华

熟手

F 币
179 元
贡献
104 点
板凳
 楼主| 发表于 2023-12-14 20:26:45 | 只看该作者
十分感谢您的回答!对于接口处的数组,应该设置为传入数组的最大维度这样应该没错吧?问题在于,我在call subroutine前,输出
do j = 1, NLayer
  do i = 1,sbnum(j)
    write(*,*) j,i,TmpiSubblocks(1,i,j),TmpiSubblocks(2,i,j)
  end do
end do

是有值的,然后
subroutine FiLLMatrix(sbtmp, untmp, atmp, amax, unmax, sbmax, cts, sbnum)
  !为了将远近区块填充至所构建的矩阵中
  implicit none
  integer*4  :: unmax, amax, sbmax, cts
  integer*4  :: untmp(2, unmax), atmp(2, amax)
  integer*4  :: sbtmp(2, sbmax, NLayer)
  integer*4  :: i, j, k, j1, j2, k1, k2, t
  integer*4  :: BParam1(sbmax),sbnum(NLayer)
  integer*4  :: row, coL

  allocate(iSubblocks(sbmax,NLayer))

  write(*,*) "FiLLMatrix",sbmax,NLayer

  do i = 1,NLayer
    do j = 1,sbnum(i)
        write(*,*) i,j,sbtmp(1,j,i),sbtmp(2,j,i)
    end do
  end do
end subroutine !省略版

到这里sbtmp只能输出sbtmp(1,1,1)和sbtmp(2,1,1)的值,其余值为0,我实在想不明白这样为什么会出错。之前的代码是sbtmp(i,j),有值,为什么改成sbtmp(i,j,k)就出错呢?
我正尝试用假定形状传递。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2023-12-14 21:40:47 | 只看该作者
试试传入真实的数组大小。
认真检查实参数组的大小,虚参数组的大小,是否一致。比如 write(*,*) shape(tmpiSubblocks)

48

帖子

15

主题

0

精华

熟手

F 币
179 元
贡献
104 点
5#
 楼主| 发表于 2023-12-26 20:29:03 | 只看该作者
确实是这样的问题!是我没有认真细致的检查导致的,谢谢大佬们的解答!十分感谢!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-29 05:05

Powered by Tencent X3.4

© 2013-2024 Tencent

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