Fortran Coder

查看: 24106|回复: 13
打印 上一主题 下一主题

[子程序] 请教一下Fortran程序中子程序参数为何发生变化

[复制链接]

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
楼主
发表于 2018-11-21 08:20:20 | 显示全部楼层
天哪,这是基础知识呀。子程序局部变量,在子程序返回之后,就被回收了。
下一次调用子程序,局部变量成为“未初始化状态”

如果你想保留上一次的值,可以定义其具有 save 属性:
real , save :: B1

此外,变量都不定义,是一个不好的习惯。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2018-11-21 10:53:34 | 显示全部楼层
加上 save 以后,是否 B1 的值就正常了?
NaN 可能出在别处,继续调试就好了。

没输入文件没法判断。而且我也不知道你的程序正常逻辑应该是怎样的,所以这种很难帮助你。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
板凳
发表于 2018-11-21 19:53:50 | 显示全部楼层
就是你运行程序以后该输入什么?

READ(*,'(A)')S
READ(*,*)W,US,FF
READ(*,*)NZ,CU

这些

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2018-11-21 21:49:51 | 显示全部楼层
这程序你也别改了,错误太多太多了。各种变量都需要 save
比如
UCAL 函数里的 A1 A2 A3
THERM 函数里的 T
TCAL 函数里的 A1 A2 A3 A4 A5 A6
等等

如果你使用的 IVF,你可以在工程属性里这样设置:

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
5#
发表于 2018-11-22 12:21:51 | 显示全部楼层
本帖最后由 vvt 于 2018-11-22 12:23 编辑

你可以在每个子程序里都加上
save

比如
subroutine sub()
  save
end subroutine sub

然后编译选项加上
-finit-local-zero
QQ微信就不用加了,你可以加本论坛QQ群:2338021

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
6#
发表于 2018-11-26 08:32:28 | 显示全部楼层
Projects 菜单,Build Options,Other Options
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 10:38

Powered by Tencent X3.4

© 2013-2024 Tencent

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