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

[dennou-ruby:002535] Re: NetCDF のunits




NetCDF の正義にはいろいろあります。numru/units の実態というものはあると思いますが、修正してなんらかの正義に合わせるべきものです。

gtool4 規約は "1" にしろと言っています。
http://www.gfd-dennou.org/library/gtool4/gt4ncconv/gt4ncconv_current/trad.html#general

NetCDF ユーザーズガイドは udunits の範囲内ならいいんじゃないかと言っています。(緩い)
http://www.unidata.ucar.edu/software/netcdf/docs/netcdf/Attribute-Conventions.html#Attribute-Conventions
引用しませんが、そのなかには percent とかも含まれることになります。

参考までに、CF は無次元量について "1" とか "1e-6" とかを例示しています。
http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#units

しかし今から思うと gtool4 規約の規定はちょっとキビシすぎますね。CF
規約と同列までは緩めないと輸入問題が起こってしまう。今回のも輸入問題みたいなもんでしょう。

で、numru/units はスクリプト内部に単位名の表を持っているのですよ。原状、udunits
みたいに利用者定義の表に差し替えることはできません。もし units = "1e-2" が許容できない事情があって percent
が使いたいなら、とりあえずの対策は dcunits.txt に percent なり何なりを書いてリビルド、ですね。

On 12/6/05, KOSHIRO Tsuyoshi <koshiro@xxxxxxxxxxxxxx> wrote:
> 神代です.
>
> 単位についての質問です.
>
> 雲量のデータをNetCDF化して使っているんですが,単位を "percent" として
> います.
> このデータをGPhysで読んで,GPhysどうしを足し算すると,
>
> /usr/local/lib/site_ruby/1.8/numru/units.rb:2918:in `reduce5': method `reduce5' called on terminated object (0x40281888) (NotImplementedError)
>         from /usr/local/lib/site_ruby/1.8/numru/units.rb:3054:in `=='
>         from /usr/local/lib/site_ruby/1.8/numru/units.rb:2987:in `convert2'
>         from /usr/local/lib/site_ruby/1.8/numru/gphys/varray.rb:796:in `+'
>         from /usr/local/lib/site_ruby/1.8/numru/gphys/gphys.rb:707:in `+'
>         from scat_comp_glob5x5_stcloud.rb:15:in `mean5x5'
>         from scat_comp_glob5x5_stcloud.rb:40
>
> のようなエラーになってしまうのですが,これは numru/units で percent と
> いう単位を扱えないということですかね.
>
> 値を1/100すればそれでいいんですけど,そもそもNetCDFで無次元量にどう単
> 位をつけたらいいんでしょう."1"でいいんでしょうか,それとも定義しない
> ほうがいいんでしょうか.
>
> NetCDFの規約としてどうかというのと,GPhys(numru/units)で扱う場合にどう
> かというのと,両方あると思うんですけども.


--
TOYODA Eizi (aka Eiji): toyoda@xxxxxxxxxxxxxx / toyoda@xxxxxxxx
Environmental Remote Sensing Center, University of Wisconsin-Madison
1219 AOSS bldg, 1225 W Dayton St, Madison, WI 53706
Phone: 608-263-6584