Выделенные массивы в Фортран 77 и Гфортран

Я пытаюсь скомпилировать некоторые старые программы на fortran77 с помощью gfortran и получаю сообщение об ошибке с размещаемыми массивами. Если я определю массивы в стиле f90, например:

REAL*8,allocatable::somearray(:)

все хорошо, но в этих старых программах массивы определены как:

REAL*8  somearray[ALLOCATABLE](:)

которые вызывают ошибку gfortran:

REAL*8,allocatable::somearray[ALLOCATABLE](:)                        
                             1
Fatal Error: Coarrays disabled at (1), use -fcoarray= to enable

Я действительно хочу избежать переписывания целых программ в стиле f90, поэтому, скажите, пожалуйста, есть ли способ заставить gfortran скомпилировать его? Большое спасибо.

3 ответа

Решение

Для стандартной проверки вы можете использовать флаг -std

-std=std Укажите стандарт, которому должна соответствовать программа, который может быть одним из f95',F2003', f2008',гну "или" наследие ".

"Заставить" gfortran чтобы скомпилировать ваш код, вы должны использовать синтаксис, который он распознает

Для чего стоит компилятор Intel Fortran (v13.something), без жалоб компилирует следующую микропрограмму. Это выполняет и пишет 10 до терминала:

  REAL*8  somearray[ALLOCATABLE](:)
  allocate(somearray(10))
  print *, size(somearray)
  end

Учитывая историю компилятора Intel, я подозреваю, что странное объявление является расширением, предоставленным DEC Fortran, возможно, ранней реализацией того, что позже было стандартизировано в Fortran 90.

Я бы, наверное, пошел на поиск и замену. Например,

  sed 's/\(REAL\*8\)[[:blank:]]\+\([^[]\+\)\[ALLOCATABLE\]\(.*\)/\1, allocatable :: \2\3/' <old.source> > <new.source>

где сед доступен.

Конечно, будьте осторожны с sed:).

В любом случае, поскольку кажется, что ваш код был написан в какой-то нестандартной версии старого Фортрана, вам, вероятно, потребуется внести изменения в любом случае.

Другие вопросы по тегам