Fortran Coder

查看: 2977|回复: 6
打印 上一主题 下一主题

[子程序] 求助大佬,动态数组如何作子程序形参

[复制链接]

237

帖子

0

主题

0

精华

版主

World Analyser

F 币
638 元
贡献
468 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
楼主
发表于 2022-7-30 11:00:31 | 显示全部楼层
1. 主程序中的动态数组,分配之后传递给子程序。无需额外操作,不会造成堆栈溢出。
2. 如果不需要在子程序中完成分配,释放。对子程序来说,虚参就是普通数组(实际是对应的实参可以是动态数组,也可以是普通数组)。
3. 如果要在子程序中完成分配,释放。则需要把虚参定义为可分配数组。
并且该子程序需要书写 interface 才能在主程序使用。(也可把子程序包含在module中,避免手动书写interface)
例如
[Fortran] 纯文本查看 复制代码
subroutine assembly(a)
  real(8),allocatable::a(:,:)
end subroutine assembly

call assembly(a)


237

帖子

0

主题

0

精华

版主

World Analyser

F 币
638 元
贡献
468 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2022-7-30 16:51:52 | 显示全部楼层
原因可能不是因为主程序中分配的数组。

那你看看是否子程序中定义了其他(非虚参)的大数组?

如果没有,需要你给出足够多的,能让别人复现问题的代码。

237

帖子

0

主题

0

精华

版主

World Analyser

F 币
638 元
贡献
468 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
板凳
发表于 2022-7-30 21:36:44 | 显示全部楼层
lu_crout 函数中     real(kind=8) L(N,N),U(N,N) 这两个(非虚参)数组占用了太多的堆栈。改成动态数组。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 16:51

Powered by Tencent X3.4

© 2013-2024 Tencent

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