高潮シミュレーション(伊勢湾台風) 2

やっと間違いが分かった。
後日、修正したコードで再計算してみようと思う。

さて、間違いは単純だったがこれの間違いが分かるのには相当時間が掛かった。
簡単に言うと、、、

int  foo( int W, int H, int i, int j, Foo& f );

という関数の呼び出しを間違えていた(Wは領域の横、H領域の縦の格子数、i,jが計算しようとしている格子座標。

呼び出しは次のようにしていた。

int status = foo( i, j, W, H, f );

これはコンパイルエラーも警告も何にも出ない。
コードを眺めていても全く分からなかったが経度緯度から計算する部分で距離がマイナスになってきている部分があったことではこの引数入れ違いに気が付いた。
 これが正しい結果になるはずが無い!!。

しかし、不思議なのはなんでアクセス違反のようなエラーが生じなかったのかだ。
不幸な事に関数fooの内部では(i,j)が(W<H)を逸脱する場合は何もせずにreturnしていた。
しかもstatusも正常を意味する0を返していた。