Ошибка компиляции Scientific Fortran - PullRequest
4 голосов
/ 22 февраля 2011

Я работаю над программой научного моделирования и еще не успела скомпилировать свою программу. Я не касался кода, который, как настаивает мой профессор, работал раньше, только make-файл. После многих попыток самая большая, что я получил, была эта ошибка:

Error on line 1112: Declaration error for xxmf: adjustable dimension on non-argument
   upcase:
   intrpl:
   splin:
   mtrnpr:

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

 -Mipa=safeall

в make-файле, но я не уверен, помещаю ли я его в нужное место или оно изменилось, так как я все еще получаю ту же ошибку.

1 Ответ

11 голосов
/ 22 февраля 2011

Oof - Похоже, у вас есть старый код, который отлично работает с конкретной версией вашего старшего компилятора f77 вашего руководителя, но на какое-то время вызовет у вас душевную боль, поскольку вы постепенно приведете его к стандарту, чтобы стандарты - Компиляторы компиляции будут делать правильные вещи.

Настраиваемые массивы такие вещи:

subroutine mysub(a,n)
integer n
real a(n)

- то есть передача массивов более или менее так, как вы делаете это в C. Fortran90 и далее позволяет использовать массивы предполагаемой формы

subroutine mysub90(a)
real a(:)
n=size(x,1)

, что намного чище, так как компилятор обеспечивает передачу правильного размера массива.

Похоже, код вашего супервизора использует такую ​​конструкцию в чем-то, что не является аргументом в подпрограмме, предположительно, как способ создания массивов определенного размера во время выполнения. Стандартный Fortran77 никогда не допускал этого, но несколько компиляторов сделали это как расширения. К счастью, теперь вы можете использовать выделяемые массивы сейчас в качестве стандартного способа сделать это, поэтому я бы предложил просто изменить переменную, дающую вам горе, на выделяемый массив.

Между прочим, существует множество инструментов для статического анализа кода, которые позволят вам заранее найти подобные проблемы и отследить их. Поймите, - это хороший коммерческий продукт с оценочной лицензией ~ 2 недели, который найдет много проблем. Forcheck , хотя и не так удобен для пользователя, но очень тщателен. Использование таких инструментов для перетаскивания кода вашего супервайзера в 2010-е годы будет непростой задачей, но это будет отличным вложением вашего времени. Еще один хороший набор инструментов - eclipse + photran , но, к сожалению, он уже предполагает, что у вас есть хороший код fortran90 - пройдет некоторое время, прежде чем вы сможете его использовать.

(И до того, как кто-то начнет делать язвительные комментарии о фортране - да, да, там много старого дерьмового кода на фортране, но это вряд ли уникально для фортрана, правда?)

...