Инициализация массива Fortran 2D

Следующая программа компилируется с помощью ifort (версия 12), но не с помощью GFortran (до версии 4.8):

PROGRAM TEST
IMPLICIT NONE
REAL,DIMENSION(2,2)::X=(/1,2,3,4/)

WRITE(*,*) X

END PROGRAM TEST

GForran выдает ошибку

REAL,DIMENSION(2,2)::X=(/1,2,3,4/)  
                       1  
Error: Incompatible ranks 2 and 1 in assignment at (1)

Ifort компилирует программу и выдает ожидаемый результат. Является ли это ошибкой в ​​GFortran или Intel Fortran просто допускает нестандартную инициализацию массива?


person user1390070    schedule 11.05.2012    source источник
comment
Компилируется ли он с оператором RESHAPE() при инициализации.   -  person John Alexiou    schedule 11.05.2012


Ответы (1)


Перепишите строку объявления массива как:

REAL,DIMENSION(2,2) :: X = RESHAPE([1,2,3,4],[2,2])

Причина, по которой ifort скомпилировал его по-другому, — нестандартная реализация. Таким образом вы можете инициализировать массивы с рангом выше 1.

person milancurcic    schedule 11.05.2012
comment
Ударь меня. См. также этот ответ stackoverflow.com/a/3708370/623518. Как ни странно, я не могу заставить ifort жаловаться на инициализацию массива OP, даже со всеми флагами предупреждений, ошибок и стандартных версий, которые я могу придумать, хотя я уверен, что это нестандартно. Есть предположения? - person Chris; 11.05.2012
comment
Хм... не уверен. ifort обычно более строг, чем pgf90, при выборе ярлыков, по крайней мере, с тем, что я делаю, поэтому я был немного удивлен, что ifort разрешил это. У меня очень мало опыта работы с gfortran. - person milancurcic; 11.05.2012
comment
Спасибо вам всем. Я уже знал о ключевом слове RESHAPE. Просто было интересно, принимает ли ifort нестандартный код. Кажется, что да. - person user1390070; 11.05.2012