24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1358  |  回复: 2

fmying

银虫 (小有名气)

[求助] 请问Fortran读取文件数据不同写法的差别

我的FORTRAN程序有如下代码(读取双电子积分用):
OPEN(UNIT=IR,FILE="A",STATUS="OLD"
REWIND(IR)
READ(IR,*)(GG(I),I=1,NB4)
CLOSE(IR)

其中NB4是双电子积分数,GG是存储数组,文件A的格式如下:
1.0000
2.0000
...
每行一个数据。

在计算小体系的时候没问题。但是在涉及200个基函数体系的时候,总的双电子积分数目为202015050,也就是说文件中有202015050行,这时候这段代码就会出现错误,提示End of File。但是我明明在读之前REWIND了啊。查了一下发现NB4和文件的行数是一样的,更不应该出错了。之后我将代码的读取部分变成:
DO I = 1,NB4
READ(IR,*)GG(I)
END DO
就通过了。
请问这两种写法有什么不一样?为什么 READ(IR,*)(GG(I),I=1,NB4)和READ(IR,*)GG(1:NB4)都会出错,而将循环直接写出就可以通过?另外,两种写法的效率有什么区别么?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

上善若水
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

【答案】应助回帖

感谢参与,应助指数 +1
READ(IR,*)(GG(I),I=1,NB4)
是横向读数据
DO I = 1,NB4
READ(IR,*)GG(I)
END DO
是纵向读数据
2楼2013-04-18 09:41:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jerkwin

专家顾问 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
这几种写法没有什么区别,理论上应该得到同样的结果。
若是运行结果不同,则可能和编译器有关。
一般说隐式循环效率高些。
3楼2013-04-18 11:39:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fmying 的主题更新
信息提示
请填处理意见