Translate

2016/03/25

気象データでRange check error

TRNSYSでタイムステップを1h未満(例えば0.25h)にして1年以上の期間を計算しようとすると、2年目でRange check errorになってしまいます。

調べてみるとType99(気象データリーダー)で発生しています。

さっそくType99をデバッグしてみると2年目の計算に入る際に宣言した配列を超えて値を参照しようとしています(配列100個なのに101番目を参照している感じ。ソースコードがあると、こういうとき便利でいい)

どうも補間処理が絡んで発生している印象なんだけど、複雑すぎていまいちよく分からない。

悩むこと数時間。ソースコードを解析して修正を試みるも、うまく行かない。(思ったのと違う処理をしているっぽい)迂闊に書き換えると、他の影響も気になる。締め切りは迫る。。。ああ、どうしよう。

で、最終的には気象データを2年分用意する事で解決しました。

これどういう理屈かというと、Type99は1年分のデータを読み込んで順に値を出力しますが、年を超える計算ではデータの先頭へ戻って値を出力を継続します。エラーは先頭へ戻す処理で発生するので、戻らないようにデータを多めに用意してあげれば回避することができます。(早く気づけよ自分。。。)

実は気象データって24hの倍数のデータが用意されていれば何日分でも処理してくれます。通常は1年分のデータが用意されているわけですが、その部分を計算期間に合わせて2年分用意してあげれば先頭へ戻らなくなります。

気象データ

ということで、データをコピーして、単純に(先頭へ戻らないよう)2年目のデータを用意してあげます。

気象データ2年

こうすると、エラーの原因が回避できるので、2年分の計算もできるようになります。

0 件のコメント:

コメントを投稿