Как я могу обновить мой старый скрипт на Фортран 77 до f90 или новее? - PullRequest
1 голос
/ 23 апреля 2020

Я обычно имею дело с файлом данных с несколькими блоками данных, повторяя число строк по n раз.

Это один из примеров:

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 строк, а затем тот же формат блока данных повторяется с 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

Мне не нужно писать форматы, они все правильно отформатированы. Как вы могли видеть, мой скрипт считывает данные для каждого блока данных, что-то делает, печатает их, а затем go до следующего блока данных.

Я так долго изучал фортран go, и я не особо заботился о своем стиле и не думал, что должен изучать новый стиль. Но в эти дни я чувствую, что должен быть более знаком с более новым стилем Fortran. Я чувствую, что уже слишком поздно изучать новый язык (в основном из-за нехватки времени), поэтому я думаю, что лучше придерживаться фортрана ...

В любом случае, я хочу изменить это на стиль f90 , Но я не уверен, с чего мне начинать. Как я могу улучшить этот стиль объявления, открытия, чтения и записи, чтобы быть более эффективным и быстрым? Любое предложение о тех? Я предпочитаю стиль f90, но если есть какой-нибудь более новый способ Fortran, мне будет интересно (если он бесплатен и компилируется с F90 или Intel Fortran)

...