Разница в выводе, когда код f77 скомпилирован с помощью ifort и gfortran

Мне нужно несколько указателей для решения проблемы, которую я могу описать лишь в ограниченном виде. Я получил код, написанный на f77, от старшего научного сотрудника. Я не могу дать код на общедоступном форуме по вопросам собственности. Он небольшой (750 строк), но с учетом неявных объявлений и операторов gotos он очень нечитаем. Следовательно, у меня возникают проблемы с поиском источника ошибки. Вот проблема:

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

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


person toylas    schedule 13.09.2013    source источник
comment
Всегда используйте тег fortran и добавляйте версию только при необходимости, чтобы отличить конкретный вопрос. Например, что вы не можете использовать Fortran 2008, а только Fortran 90.   -  person Vladimir F    schedule 17.12.2015


Ответы (1)


Некоторые вещи для исследования, не обязательно в том порядке, в котором я бы попробовал их:

  1. Используйте свой компилятор (ы), чтобы проверить все, что ваш компилятор (и) способен проверить, включая и особенно границы массива (для уверенности во время выполнения) и сопоставление аргументов подпрограммы.
  2. Использование неинициализированных переменных.
  3. Виды вещественных, комплексных и целочисленных переменных; компиляторы (или ваши параметры компиляции) могут по умолчанию использовать разные типы.
  4. Общие блоки, эквиваленты, вход, ... другие устаревшие или устаревшие функции.

Наконец, возможно, это не вопрос для немедленного изучения, но то, что вы должны сделать раньше (правильный выбор) или позже (неправильный выбор), попытаться объявить IMPLICIT NONE во всех областях и написать явные объявления для всех сущностей.

person High Performance Mark    schedule 13.09.2013
comment
Может быть, также автоматически СОХРАНЯЕТСЯ переменные? - person ; 13.09.2013
comment
Проверьте длину строки: вы можете изменить длину строки на обоих компиляторах на 72, 80 или 132. Проверьте строки, начинающиеся с D. Предполагается, что они предназначены для отладки в ifort, но они могут содержать присваивания. Они будут рассматриваться как комментарии в gfortran. - person cup; 14.09.2013
comment
Предложения HP Marks хороши. В ifort также можно использовать -gen-interfaces, -132 и -warn truncated_source. Некоторые стандартные входные файлы и их выходные данные могут быть полезны для проверки правильности ответов. -onetrip может быть чем-то, что нужно исследовать. - person Holmz; 17.10.2016