忍者ブログ

!===== implicit none

設計と実装を同時にやるのは…やめようね!!(血涙)

maxloc(minloc)について

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

maxloc(minloc)について

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
と正しく返されました。
PR

コメント

プロフィール

HN:
NoName
性別:
男性
職業:
おっさん
趣味:
無趣味
自己紹介:
すーぱーぷろぐらまー()になりたい

スポンサードリンク

スポンサードリンク

P R

リンク