[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002138] Re: class handling GRIB dataset



西澤さま

> Grib ファイルを扱う必要ができたので ruby で Grib を扱うクラスを作りました。

素晴らしいです! 私も最近扱う必要があったのですが、根性なくて
wgrib 使いました。grib処理の関数は一から書いたのですか?
拡張ライブラリー? それとも pure ruby? grib の場合テーブル処理
などやることが沢山ありますので、pure ruby だと処理速度が気にな
りますが、どんなもんでしょう。例えば wgrib と比べて。まあ、遅け
れば将来的に一部拡張ライブラリー化すればいいんでしょうけど ---
理想的には各セクションの処理レベルは C でやってしまうのがいいと
思います。wgrib も置いてある
http://dss.ucar.edu/libraries/grib/
のが参考になりそう。各種テーブルの実装は wgrib にありますね。

> 読み込みのみ

普通それで十分でしょうね。

> LON-LAT座標のみ

同じ lon-lat でも緯度がガウシアンの場合は扱えますか?
ガウス緯度に関しては、grib は緯度範囲しか入れられないみたいなの
で、ちょっと高度な推測が必要なはずです。(極 - 極データなら格
子点数から分解能がわかりますが、そうでない場合もあり得るので、平
均的な dlat から推測してガウス緯度を生成してみて、答えあわせ → 
あわなければイテレーション。どっちにしろガウス緯度を計算しないと
なりませんね。GSLを使えば簡単?)

水平については、あと残るは地図投影座標でしょうか。これは必要に迫
られない限りやる気起きないでしょうね。

鉛直はどうでしょう? hybrid 扱えますか? Gauss緯度とhybridが扱え
れば、客観解析の生データが扱えます。なお、hybrid (109番) の場合、
gribできちんと規格があるのは鉛直レベル番号の入れ方だけみたいです。
(ECMWFのgribデータには hybrid の係数 a, b が入ってますが、私の
勘違いでなければ入れ方は ECMWF 独自仕様のようです)。でも、とり
あえずは鉛直レベル番号だけでいいでしょう。GPhys化さえ出来れば、
後から座標変数を設定するのは簡単ですので。

なお、ガウス緯度についても同様に、例外を上げずにGPhys化さえ出来
れば、座標変数の中身はとりあえず通し番号でもいいです。

ということで、別便で Gauss緯度-hybrid のサンプルファイルをお送り
します。(押し売りごめんなさい。気が向かなれば何もしなくていいで
す。希望としては、とりあえず例外上げずに GPhys 化されるなら嬉し
いです。)

> データパッキングのビット数が4の倍数のみ

拙作の多ビット整数ライブラリーが電脳 ruby HP に置いてありますの
で、もしやる気になったらその一部を取り込むなど自由に使ってくださ
い。

> などまだ限られた機能しかありません。
> VArrayGrib class, GPhys::Grib_IO module
> も作りましたので一様 GPhys に対応しています。
> 
> ERA40とJAR25でテストしました。
> とりあえずどこに置いたらいいですかね?
> サンプルファイルが1Mくらいあります

もし良ければ GPhys にマージしませんか。
サンプルファイルについては、1M もあるとちょっと
抵抗ありますので、別途相談させてください。wgrib を使えば
レコード単位でサブセットを作れますので、例えば鉛直レベル
や時間に関し簡単に間引けます。依頼して貰えばこちらでやっ
てもいいです。

堀之内 武                    horinout@xxxxxxxxxxxxxxxxxx
京都大学生存圏研究所               611-0011 宇治市五ヶ庄