2013-11-29 3 views
0

Добрый вечер,f90 набор параметров двух размеров (:, :) в модуле

Я работаю на F90, и я пытаюсь ввести параметр 2D значений размеров 9x2 так же, как:

integer, parameter:: v(0:8,0) = (/0,1,0,-1,0,1,-1,-1,1/) 
integer, parameter:: v(0:8,1) = (/0,0,1,0,-1,1,1,-1,-1/) 

, но на самом деле, он не работает, то ошибка, что apears после компиляции является:

--> gfortran -c main.f90 

main.f90:40.31:

integer, parameter:: v(0:8,0) = (/0,1,0,-1,0,1,-1,-1,1/)

Error: Incompatible ranks 2 and 1 in assignment at (1)

main.f90:41.31:

integer, parameter:: v(0:8,1) = (/0,0,1,0,-1,1,1,-1,-1/)

Error: Incompatible ranks 2 and 1 in assignment at (1)

, но я не понимаю эту проблему.

Я бы очень признателен чьей-либо помощи, чтобы исправить эту тривиальную ошибку.

Заранее спасибо.

Puigar

ответ

1

Вы пытаетесь определить массив в два раза, и это не допускается. Что вы хотите сделать, это

integer, parameter :: v(9,2) = reshape((/0, 1, 0,-1, 0, 1,-1,-1, 1,& 
              0, 0, 1, 0,-1, 1, 1,-1,-1/),(/9,2/)) 

Обратите внимание, что Fortran по умолчанию имеет 1-индексирование; если вы захотите, вы сможете сделать это с помощью 0-индекса, но это незначительное изменение выше.

+0

integer, параметр :: v (0: 8,0: 1) = reshape ((/ 0, 1, 0, -1, 0, 1, -1, -1, 1, & 0, 0, 1, 0, -1, 1, 1, -1, -1 /), (/ 9,2 /)) Я так выразился? –

+0

Как я уже сказал, небольшое изменение. Большая проблема заключается в том, что вы пытались определить массив дважды ('integer, parameter :: v (0: 8,0)' и 'integer, parameter :: v (0: 8,1)'), когда вы только хотели один массив. –

+0

спасибо большое Кайл –

Смежные вопросы