gfortran: список имен и инициализация переменных

Я переношу с ifort на gfortran и у меня возникают проблемы со следующим кодом:

MODULE test
IMPLICIT NONE

REAL*8 :: a

CONTAINS

SUBROUTINE load
  a = 0.0d0
  NAMELIST /materialProperties/ a
END SUBROUTINE load

END MODULE test

Я получу ошибку компилятора о списке имен. В любом случае, если инициализация переменной отключена (закомментировано a=0.0d0), то ошибка исчезает. Этого нет в компиляторе Intel, и мне интересно, почему это так.


person DaPhil    schedule 11.10.2013    source источник
comment
Нам интересно, что такое сообщение об ошибке от gfortran. Почему вы думаете, что это не важная помощь в диагностике проблемы с вашим кодом, и почему вы скрываете это от нас?   -  person High Performance Mark    schedule 11.10.2013


Ответы (1)


Проблема заключается в определении NAMELIST после присвоения переменной a значения. Как вы видели, удаление/комментирование этой строки устраняет ошибку, но то же самое происходит и с перемещением объявления a в SUBROUTINE load.

Я предполагаю, что ifort игнорирует эту строку, а gfortran — нет.

person Kyle Kanos    schedule 11.10.2013
comment
В документации компилятора Intel Fortran указано, что разрешено нестандартное позиционирование операторов namelist. Я не думаю, что ifort игнорирует присваивание a, скорее он не жалуется на нестандартное позиционирование оператора namelist. Опция компилятора -warn stderrors выкурит эту (тип) ошибку. - person High Performance Mark; 11.10.2013