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を表しています。