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

[dennou-ruby:003619] Re: GPhys::Grib_IO で grib データを読みたい



堀之内です。

> 最近触っていないので、遅いし、変数名も変わってしまうままです。

補足です。GPhys では,(rb-gribを使うように指定しなければ)
GRIB ファイル中の変数の名前は基本的に wgrib と同じ名前で
扱うようになってます。なので,rb-grib もそうなるように
しましょうという話になってるのですが,まだそうなってない
ということです(だから GPhys ホームページでも rb-grib
の利用は非推奨としてます)。名前だけの問題でなくて,
C なのに遅い ECMWF のライブラリは使わないようにする
というのとセットなので,作業は結構大変なのです。

今の rb-grib を使ってしまうと,将来の rb-grib を使うと
名前が非互換になって,同じプログラムがそのままでは
使えなくなります(変数名だけの問題ですが)。

そこでそれまでのつなぎとしては GRIB2 ファイルは wgrib2 
を使って,NetCDF に変換してから使うのをお勧めします。

http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/netcdf.html

などをみてください。

# 西澤さん,やっぱいそがしいかなぁ...。

> 西澤です
> 
> あ、rb-gribapi でなくて、 rb-grib でしたね。
> 
> 最近触っていないので、遅いし、変数名も変わってしまうままです。
> 
> 西澤誠也
> 
> 2013年1月18日 19:08 Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>:
> > 堀之内です。
> >
> > そしたらあとは GRIB2 対応ね。しかし,
> > http://ruby.gfd-dennou.org/products/rb-grib/
> > って,まだあまりよくない状態 (遅いし,GRIB1のほうも
> > 変数名がかわってしまう) のままでしたっけ? > 西澤さま
> >
> > # (もしも変わってなければ)今のところの個人的お勧めは,
> >    wgrib2 でデコードしてしまう,です。
> >
> >> 内藤です。
> >>
> >> 西澤くんもありがとうございます!
> >>
> >> 先ほど、石岡さんが gphys のバージョンを 1.2.2 に上げてくださいました。
> >> おかげさまで T.jan.grib は問題なく読めるようになりました。
> >>
> >> まだ JRA データは読めていません。
> >> ruby-gribapi を入れれば grib2 な JRA データも読めるようになるのかも。
> >>
> >> #----------------------
> >> % dpkg -s gphys
> >> Package: gphys
> >> Status: install ok installed
> >> Priority: optional
> >> Section: ruby
> >> Installed-Size: 3364
> >> Maintainer: Youhei SASAKI <uwabami@xxxxxxxxxxxxxx>
> >> Architecture: amd64
> >> Version: 1.2.2-2
> >> Depends: libc6 (>= 2.2.5), libruby1.8 (>= 1.8.7.302) | libruby1.9.1 (>=
> >> 1.9.2.0), ruby | ruby-interpreter, ruby-narray, ruby-narray-miss,
> >> ruby-netcdf, ruby-dcl, ruby-numru-units, ruby-numru-met,
> >> ruby-numru-misc, ruby-fftw3, ruby-lapack, ruby-gsl | libgsl-ruby1.8,
> >> ruby-gsl | libgsl-ruby1.9.1, libdap-dev
> >> Recommends: ruby-gpv, ruby-nusdas, ruby-hdfeos5 | libhdfeos5-ruby1.8,
> >> ruby-hdfeos5 | libhdfeos5-ruby1.9.1
> >> Description: Multi-purpose class to handle Gridded Physical quantities
> >>  comprehensive library for self-descriptive gridded physical data
> >>  (in NetCDF, GrADS, or on memory) with graphics
> >> Homepage: http://ruby.gfd-dennou.org/products/gphys
> >> Ruby-Versions: ruby1.8 ruby1.9.1
> >> #----------------------
> >>
> >> 内藤
> >>
> >> (2013/01/18 17:45), Seiya Nishizawa wrote:
> >> > 西澤です
> >> >
> >> > gphys に入っている grib パーサーは、
> >> > 元々 ruby で書いていましたが、
> >> > ある時から、 C の拡張ライブラリを利用するように変更しました。
> >> > (おそらく、1.1.0 から)
> >> >
> >> > 以下、推測も混じっています。
> >> >
> >> > 内藤さんのエラーは、その拡張ライブラリの中で、
> >> > ファイルから取った文字列の中に、null 文字が埋め込まれている場合に出るものだと思います。
> >> > ruby の1.8 のそれなりのバージョン以降を使っている場合は、
> >> > その拡張ライブラリの中で、 null 文字があってもエラーとならないものを使うようになっているので、
> >> > ruby のバージョンが古いとだめです。
> >> > 詳しくいうと、
> >> > StringValuePtr を使うと問題無いのですが、
> >> > それが無い場合は、STR2CSTR を使います。
> >> > これが問題を起こしているのだと想像します。
> >> >
> >> > 西本さんがうまくいく原因は、
> >> > 拡張ライブラリを利用する前のバージョンだからでしょう。
> >> >
> >> >
> >> > ちなみに、JRA データのエラーは、
> >> > grib2 だからで、
> >> > grib2 を読むためには、ruby-gribapi が必要です。
> >> >
> >> >
> >> > 西澤誠也
> >> >
> >> >
> >> >
> >> > 2013年1月18日 16:57 西本絵梨子 <eriko@xxxxxxxxxxxxxx>:
> >> >> 内藤さん
> >> >>
> >> >> Debian lenny なマシンとgphys-1.0.0-1という、とっても古い組み合わせで、
> >> >> チュートリアルのgribデータを読んでみると、成功しました。
> >> >> なので、バージョンが原因ではなさそうです。
> >> >>
> >> >> $ ruby -v
> >> >> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
> >> >> $ wget http://www.gfd-dennou.org/library/ruby/products/gphys/tutorial/T.jan.grib
> >> >> $ irb
> >> >> irb(main):001:0> require "numru/gphys"
> >> >> => true
> >> >> irb(main):002:0> NumRu::GPhys::Grib_IO.var_names("T.jan.grib")
> >> >> => ["TMP"]
> >> >>
> >> >> debianパッケージをインストールされているようなので、再インストール(aptitude reinstall)してみると
> >> >> 状況がかわったりしないでしょうか?
> >> >>
> >> >> 西本
> >> >>
> >> >> 2013/1/18 Yoko NAITO <naito@xxxxxxxxxxxxxxxxxx>:
> >> >>> 内藤です。
> >> >>>
> >> >>> 堀之内さん、ありがとうございます!
> >> >>>
> >> >>> ▼ GPhys のバージョン
> >> >>> こちらは 1.1.0-3 です。堀之内さんが試してくださったのが 1.2.2 。
> >> >>> 1.2.0 の時に GRIB2 のサポートが加わったようですが関係あるでしょうか?
> >> >>>
> >> >>> ▼ データファイル T.jan.grib
> >> >>> ダウンロードし直して diff を取ってみましたが違いがありませんし、
> >> >>> inspect_varnames.rb の結果も変わりませんね。。。
> >> >>> wget
> >> >>> http://www.gfd-dennou.org/library/ruby/products/gphys/tutorial/T.jan.grib
> >> >>> したのですが、付け忘れているオプションなどあるでしょうか?
> >> >>>
> >> >>> あと書き忘れましたが debian squeeze です。
> >> >>> 引き続き、みなさまのご助言をいただければ幸いです。
> >> >>>
> >> >>> 内藤
> >> >>>
> >> >>> (2013/01/18 13:09), Takeshi Horinouchi wrote:
> >> >>>> 堀之内です。
> >> >>>>
> >> >>>>> 旧チュートリアルから T.jan.grib と contour1000mb_grib.rb を
> >> >>>>> 取ってきて実行すると、下記のようなエラーが出ます。
> >> >>>>
> >> >>>> とりあえずこれについてのみ。
> >> >>>>
> >> >>>> 私のところでは正常に実行できます
> >> >>>> (内藤さんとおなじく ruby 1.8 で, GPhysは 1.2.2)。
> >> >>>> 使ってるGPhysのバージョンはなんでしょう?
> >> >>>> (あまりGPhysのバージョンに左右されそうに
> >> >>>> ないですが)。また,grib ファイルが壊れたりしてませんか。
> >> >>>>
> >> >>>>> 内藤@京大です。
> >> >>>>>
> >> >>>>> GPhys で grib データを読もうとして、はまっています。
> >> >>>>> JRA-25 のデータを読みたいのですが、それ以前に、
> >> >>>>> 旧チュートリアルにある T.jan.grib がちゃんと読めません。
> >> >>>>> 初歩的な躓きかもしれませんが、アドバイスいただけないでしょうか。
> >> >>>>>
> >> >>>>> 旧チュートリアルから T.jan.grib と contour1000mb_grib.rb を
> >> >>>>> 取ってきて実行すると、下記のようなエラーが出ます。
> >> >>>>> inspect_varnames.rb でも同様です。
> >> >>>>>
> >> >>>>> #----------------------
> >> >>>>> /usr/lib/ruby/1.8/numru/gphys/grib.rb:377:in `to_uint1': string contains
> >> >>>>> null byte (ArgumentError)
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/grib.rb:377:in `version'
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/grib.rb:210:in `parse'
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/grib.rb:1431:in `parse'
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/grib.rb:1411:in `open'
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/gphys_grib_io.rb:80:in `open'
> >> >>>>>           from /usr/lib/ruby/1.8/numru/gphys/gphys_io.rb:121:in `open'
> >> >>>>>           from contour1000mb_grib.rb:3
> >> >>>>> #----------------------
> >> >>>>>
> >> >>>>> また、JRA-25 のデータファイル (たとえば anl_mdl.197901.gr) を
> >> >>>>> inspect_varnames.rb もどき
> >> >>>>> #----------------------
> >> >>>>> require "numru/ggraph"
> >> >>>>> p NumRu::GPhys::Grib_IO.var_names('anl_mdl.197901.gr')
> >> >>>>> p NumRu::GPhys::IO.var_names('anl_mdl.197901.gr')
> >> >>>>> #----------------------
> >> >>>>> で読もうとすると、別のエラーが出ます。
> >> >>>>>
> >> >>>>> #----------------------
> >> >>>>> This Grib version (201) has not supported yet
> >> >>>>> []
> >> >>>>> /usr/lib/ruby/1.8/numru/gphys/gphys_io.rb:257:in `var_names': undefined
> >> >>>>> method `var_names' for nil:NilClass (NoMethodError)
> >> >>>>>           from inspect_varnames_JRA.rb:3
> >> >>>>> #----------------------
> >> >>>>>
> >> >>>>> それぞれ問題が違うような気もするのですが、いずれにしても
> >> >>>>> どうしたらよいかわからなくて困っています。
> >> >>>>> どなたかお知恵を貸してください。よろしくお願いします。
> >> >>>>>
> >> >>>>> ------------------------------------------------------------
> >> >>>>> 内藤 陽子 <naito@xxxxxxxxxxxxxxxxxx>
> >> >>>>
> >> >>>> 堀之内 武
> >> >>>> 北海道大学 地球環境科学研究院 地球圏科学部門
> >> >>>> 〒060-0810 札幌市北区北10条西5丁目
> >> >>>>
> >> >>>
> >> >>
> >> >
> >> >
> >> >
> >
> > 堀之内 武
> > 北海道大学 地球環境科学研究院 地球圏科学部門
> > 〒060-0810 札幌市北区北10条西5丁目
> >
> >
> 
> 
> 
> -- 
> Seiya Nishizawa
> RIKEN Advanced Institute for Computational Science
> Tel: +81-78-940-5754, Fax: +81-78-304-4972
> 7-1-26, Minatojima-minami-machi, Chuo-ku, Kobe, Hyogo 650-0047, Japan

堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門
〒060-0810 札幌市北区北10条西5丁目