Fortran:Incompatible ranks 0 and 1 in assignment at (1)

FortranでIncompatible ranks 0 and 1 in assignment at (1)というエラーメッセージが出たので、その解決方法を紹介します。

原因

=の右辺と左辺で次元数が異なる場合、このようなエラーメッセージが表示されます。

Incompatibleは、非互換性で、この場合、=の左右の変数や配列間で相容れないよといっています。

ここのランク0や1は、変数や配列の次元数を表しています。

変数は、0次元、今回のエラーメッセージでは、配列は、1次元ということです。

配列が2次元になれば、エラーメッセージの1が2になります。

具体例を示します。

implicit none
integer::i
integer::array(10),out(10)
array=(/1,2,3,4,5,6,7,8,9,10/)
do i=1,10
   out(i)=array
enddo
stop
end

配列arrayの要素を配列outに代入するプログラムです。

しかし、実行すると

   out(i)=array
   1
Error: Incompatible ranks 0 and 1 in assignment at (1)

とエラーメッセージが出力されます。

6行目でout配列の要素(0次元)にarray配列(1次元)を代入しようとしているからです。

解決方法

具体例の場合、以下のように記述すれば問題ありません。

implicit none
integer::i
integer::array(10),out(10)
array=(/1,2,3,4,5,6,7,8,9,10/)
do i=1,10
   out(i)=array(i)
enddo
stop
end

6行目で、array配列の要素を指定することで、out配列の0次元にarray配列の0次元を代入することになり、

次元数が合致したため、エラーメッセージが出力されません。

まとめ

Incompatible ranks 0 and 1 in assignment at (1)は、左右の次元数が異なりますよという意味。

左辺の次元数が0、右辺の次元数が1を表しています。