Fortran90でmaxlocの使い方がよくわからんかったので、忘れないようまとめておきます。
ある1次元配列 a(ini:fin) に対して用いた時にうまく使えていなかった。
まず次の記述をするとgfortranでerrorが出た。
loc = maxloc(a)
1
Error: Incompatible ranks 0 and 1 in assignment at (1)
よくわからんが次元を指定せねばならないようで
loc = maxloc(a,1)
とすると通った。
が、しかし今度は読み込んだ位置がずれている様子、例えば
real(8) :: a(5:15), maxa
integer :: loc
配列aに適当な数値を代入しておいて
loc = maxloc(a,1)
maxa = maxval
print *, a(loc)
print *, maxa
とすると返されたのは
11.073754263633985
15.217951726338473
となってしまった。値を見てみると、maxlocで数えるときは配列の番号が常に1からになるよう数えるみたい。
なので番号を数えるときに、(初期番号-1)を余分に足すことで解決した。上の例だと
loc = maxloc(a,1) + ini - 1
とすると
15.217951726338473
15.217951726338473
と正しく返されました。