找回密码
 注册
Simdroid-非首页
查看: 201|回复: 6

[3. Fortran] 一个非常奇怪的Fortran现象。

[复制链接]
发表于 2010-9-17 22:30:25 | 显示全部楼层 |阅读模式 来自 辽宁大连
本人编fortran程序多年,这回遇到了很特殊的问题。
我做fortran程序的时候,出现一个非常奇怪的现象,一个很长的程序,在CVF下编译正常,计算结果也正常。但是我用intel fortran编译,则出现一个数组下标是一个很大的负数(定义的是下标最小是1),找了很长时间,没有找到原因,但是偶然间发现,写一行输出语句,则错误就没有了。
这就是加上输出的一段:
        CALL CYTOPI(CLIN(N),CLOUT(N),AAN(N),0.5,ACM(NCYL,NLO),
     *  RCM(NCYL,NLO),AP(N),RP(N),ct)
        IF(CT.GT.100000)WRITE(2888,*)CT !如果不加此句,则计算机车管时cl1下标会出现非常大的负值

我这个程序上一个版本,两种编译程序都用了,都很正常,因为程序是fortran77版,有些数组说明不合理,我改动一点,但是反复检查都没有问题。
有遇到过这种现象的吗?怎么解决的,请传授一下。
发表于 2010-9-19 20:10:37 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
本帖最后由 铁道科学 于 2010-9-19 20:12 编辑

楼主的问题的确比较棘手,我以前碰到此类问题大多是源于变量未初始化,当你不给一个变量赋值的时候,他会随便取值(不同编译器不一样),至于CVF,好像它检查数组越界的能力比较弱,我有个老程序CVF用了十多年没问题,换成IVF才发现程序有个错误的地方,导致数组越界

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-21 20:08:59 | 显示全部楼层 来自 辽宁大连
谢谢,我查查看!
回复 不支持

使用道具 举报

发表于 2010-10-10 21:54:24 | 显示全部楼层 来自 云南红河州开远
如果变量未初始化,CVF赋值为0,IVF为随机数。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-21 16:12:48 | 显示全部楼层 来自 辽宁大连
楼上说的很对,一个问题就是这个原因,CVF编译时一个变量没有赋初值,默认是0,就是我要的,没有出错。但是INtel fortran编译时,这个值赋的随机值,很大,出现了错误,但是不是在这个值附近表现的,是影响到其他值,出现莫名其妙的结果,最后还是找到了。
另外一个错误很奇怪,是变量传递问题,请看这段程序
subroutine aaa
  integer kkk
  call bbb(kkk)
  call ccc(kkk)
return
end
子程序aaa中说明了变量kkk,没有赋值,在子程序bbb中赋值,应该传出来有一个确定值,然后传递到CCC,CCC子程序根据这个值计算。但是bbb中计算的结果正确,传递到CCc中已经是一个随机值了。这个很奇怪。
回复 不支持

使用道具 举报

发表于 2010-10-23 11:41:34 | 显示全部楼层 来自 陕西西安
楼上说的很对,一个问题就是这个原因,CVF编译时一个变量没有赋初值,默认是0,就是我要的,没有出错。但是INtel fortran编译时,这个值赋的随机值,很大,出现了错误,但是不是在这个值附近表现的,是影响到其他值, ...
weiwei43 发表于 2010-10-21 16:12

应该是子程序bbb没有给出返回参数的原因。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-23 19:03:02 | 显示全部楼层 来自 辽宁大连
本帖最后由 weiwei43 于 2010-10-23 19:59 编辑

在bbb程序中kkk就是返回的参数。ccc程序中kkk就是输入参数。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 14:07 , Processed in 0.043448 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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