如何将旧的fortran 77脚本更新为f90或更新的脚本?

时间:2020-04-23 02:46:06

标签: fortran declaration

我通常处理具有多个数据块的数据文件,重复n行数m次。

这是示例之一:

9276
4900000
      AA      4       4    6260     519    8350    1571       0       0       0       0       0       0       0   0.934   0.933    0.93   0.935       0       0       0       0       0       0   3.867     0.0   1.541
      BB      3       3    3388    8391    6637       0       0       0       0       0       0       0       0   0.939   0.565   0.361       0       0       0       0       0       0       0   1.913     2.0  -0.732
      CC      3       2     241     694       0       0       0       0       0       0       0       0       0   0.933   0.941       0       0       0       0       0       0       0       0   1.888     2.0  -0.834
      ...

第一行是数据块的行总数,第二行是其他值,这两行是标题。然后是9276行。一个数据块有9278行,然后对于m个数据块,从9279行开始重复相同格式的数据块。通常,m变得非常大。

到目前为止,我使用类似f77格式的内容:

       program test

       parameter (nn = 20000)
       integer,dimension(nn,nn) :: conn
       integer,dimension(nn) :: aaa,bbb,ccc,ddd,eee
       real,dimension(nn) :: fff,ggg,hhh,iii,zzz
       real,dimension(nn,nn) :: bos
       character*2,dimension(nn) :: elem

       open (2, file = 'input.txt', status = 'old')
       iframe=0
  100  continue
       iframe=iframe+1

       read (2,15, err = 50,end= 50) nat2
       read (2,15) framenum2
       do i=1,nat2
       read (2,42) elem(i),aaa(i),ccc(i),(conn(i,j),j=1,10),ddd(i),(bos(i,j),j=1,10),fff(i),ggg(i),zzz(i)
       enddo

       do something using do and if loops

       write (120,15) nat2
       write (120,15) framenum2
       do i=1,nat
        write (120,75) elem(i),test(i),result(i)
       write (121,76) iframe, zzz2, iii2
       enddo
       goto 100

我不需要编写格式,所有格式都正确。如您所见,我的脚本读取每个数据块的数据,执行某些操作,打印它们,然后转到下一个数据块。

我很久以前就学习过fortran,而且我不太在意自己的风格,也不认为我应该学习新的风格。但是这些天我觉得我应该对新的fortran样式更加熟悉。我觉得现在学习新语言为时已晚(主要是由于时间限制),所以我认为我最好坚持使用fortran ...

无论如何,我想将其更改为f90样式。但是我不确定应该从哪里开始。如何改善这种声明,打开,读取和写入的样式,使其更高效,更快捷?有什么建议吗?我更喜欢f90风格,但是如果有任何新的fortran方式,我会感兴趣(如果它是免费软件,并且可以与f90或intel fortran一起编译)

0 个答案:

没有答案