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

Re: [jmadata-users33] software to read GPV (and to convert intoNetCDF)



堀之内様
(Bjmadata-users の皆様
(B
(B防災科研の鈴木です。
(Bすいません、ちょっと長いです。
(B
(B>>>>> In article '[jmadata-users33] software to read GPV (and to convert into NetCDF)',
(B>>>>>   on Thu, 18 Jul 2002 12:05:57 +0900,
(B>>>>> horinout@xxxxxx(Takeshi Horinouchi)  said ...
(B> 
(B> MSM及びRSMのデータ(in「国内2進形式」)を読むためのソフトを作り
(B> ました。気象庁の豊田さんにアドバイスを頂きましたので、記して感謝
(B> 致します。
(B
(Bこれを利用して、msm のデータを netcdf へ変換してみました。
(B私は GrADS ユーザなので、GrADS で直接読めると大変便利なのですが、
(Bこのソフトで変換したものを GrADS 上で開くと
(Bga-> sdfopen MSM00PLM018_1.nc 
(BScanning self-describing file:  MSM00PLM018_1.nc
(BSDF file has no discernable X coordinate.
(Bのようになってしまい、うまく読めません。
(B
(Bncdump でファイルの様子をみると、GrADS で表示可能なファイルは
(B--------------------------------------------------------------ここから
(Bvariables:
(B        float level(level) ;
(B                level:units = "millibar" ;
(B                level:actual_range = 1000.f, 10.f ;
(B                level:long_name = "Level" ;
(B                level:positive = "down" ;
(B                level:GRIB_id = 100s ;
(B                level:GRIB_name = "hPa" ;
(B        float lat(lat) ;
(B                lat:units = "degrees_north" ;
(B                lat:actual_range = 90.f, -90.f ;
(B                lat:long_name = "Latitude" ;
(B        float lon(lon) ;
(B                lon:units = "degrees_east" ;
(B                lon:long_name = "Longitude" ;
(B                lon:actual_range = 0.f, 357.5f ;
(B        double time(time) ;
(B                time:units = "hours since 1-1-1 00:00:0.0" ;
(B                time:long_name = "Time" ;
(B                time:actual_range = 17531687.999998, 17540442. ;
(B                time:delta_t = "0000-00-00 06:00:00" ;
(B--------------------------------------------------------------ここまで
(Bのように次元の変数が定義されていますが、msm のデータを変換したものは
(B--------------------------------------------------------------ここから
(B        float lon(lon) ;
(B        float lat(lat) ;
(B        float p(p) ;
(B        float time(time) ;
(B--------------------------------------------------------------ここまで
(Bとなっています。
(B
(Bここをなんとかすればいいのかな、と思い、ソフトのソースの
(Bgpv2nc.rb というファイルを変更してみました。
(Bまず、鉛直方向の関数が p になっているのを level に変えてみました。
(Bまた、
(B--------------------------------------------------------------ここから
(B    output.def_var('lon', "sfloat", [dimx])
(B    output.def_var('lat', "sfloat", [dimy])
(B    output.def_var('level', "sfloat", [dimz])  if not plane.first.nil?
(B    output.def_var('time', "sfloat", [dimt])
(B--------------------------------------------------------------ここまで
(Bとなっている部分を
(B--------------------------------------------------------------ここから
(B    output.def_var('lon', "sfloat", [dimx])
(B    output.var('lon').put_att('units', 'degrees_east')
(B    output.var('lon').put_att('long_name', 'Longitude')
(B    output.def_var('lat', "sfloat", [dimy])
(B    output.var('lat').put_att('units', 'degrees_north')
(B    output.var('lat').put_att('long_name', 'Latitude')
(B    output.def_var('level', "sfloat", [dimz])  if not plane.first.nil?
(B    output.var('level').put_att('units', 'millibar') if not plane.first.nil?
(B    output.var('level').put_att('long_name', 'Level') if not plane.first.nil?
(B    output.var('level').put_att('positive', 'down')  if not plane.first.nil?
(B    output.def_var('time', "sfloat", [dimt])
(B    output.var('time').put_att('units', 'hours')
(B    output.var('time').put_att('long_name', 'Time')
(B--------------------------------------------------------------ここまで
(Bと書き加えて変更しました。
(Bすると、とりあえず GrADS で表示できるようになりました。
(Bが、まだ改善したいことがあります。
(B
(Blon, lat, level に関してはどのファイルもほぼ同じでしょうから
(Bこのままでもいいのですが、時間に関してはファイル毎に違います。
(B今の状態ではどうしたものかわからないので、とりあえず設定はせず、
(B結果として1年1月1日00Z から3時間おき、という内容になっています。
(Bおそらく、もとの msm のデータファイルから時間の値を読んで netcdf 
(Bファイルに書きこめるのではないかと思っているのですが、
(B今の私には手が余りそうです。
(B
(Bまた、私は ruby は全くいじったことはなく、netcdf ファイルの編集も
(B自分でプログラムは書いたことがないので、ちゃんとしたことをやっているのか
(B不安です。特に 'level' の項周辺など。どなたか見ていただけないでしょうか。
(B
(B大変申し訳ないですが、「こういう関数でプログラム中で扱っている」など、
(Bどなたかアドバイスをいただけないでしょうか。
(B# もちろん、直接改良してくれればありがたいですが……
(B
(B--------------------------------------------------
(B 鈴木 真一 / 防災科学技術研究所 総合防災研究部門
(B e-mail : ssuzuki@xxxxxx  
(B--------------------------------------------------