使用外部.dat文件中的2列数组计算渐变

时间:2017-04-11 18:55:59

标签: fortran fortran77

我有一个.dat文件,其中有2列和14000到36000之间的行保存在文件中,如下所示:

0.00   0.00
2.00   1.00
2.03   1.01
2.05   1.07
.
.
.
79.03  23.01

第1列是延伸,第2列是应变。当我想计算渐变来指定绘图的Hooks Law时,我使用下面的代码。

CCCCCC
      Program gradient
      REAL S(40000),E(40000),GRAD(40000,1)
      open(unit=300, file='Probka1A.dat', status='OLD')
      open(unit=321, file='result.out', status='unknown')
      write(321,400)
400   format('alfa')
260   DO 200 i=1, 40000
      read(300,30) S(i),E(i)
30    format(2F7.2)
      GRAD(i,1)=(S(i)-S(i-1))/(E(i)-E(i-1))
      write(321,777) GRAD(i,1)
777   Format(F7.2)
200   Continue
      END

但是在我执行之后我收到了警告

PGFIO-F-231/formatted read/unit=300/error on data conversion.
 File name = Probka1A.dat    formatted, sequential access   record = 1
 In source file gradient1.f, at line number 9

如何在Fortran 77中通过这种方式或其他方式计算渐变?

1 个答案:

答案 0 :(得分:1)

您正在从文件中读取而不检查文件的结尾。你的代码应该是这样的:

260   DO 200 i=1, 40000
      read(300,*,ERR=400,END=400) S(i),E(i)
      if (i>1) then
          GRAD(i-1,1)=(S(i)-S(i-1))/(E(i)-E(i-1))
          write(321,777) GRAD(i-1,1)
      end if
777   Format(F7.2)
200   Continue
400   continue