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 - пройдет некоторое время, прежде чем вы сможете его использовать.
(И до того, как кто-то начнет делать язвительные комментарии о фортране - да, да, там много старого дерьмового кода на фортране, но это вряд ли уникально для фортрана, правда?)