Unidata Program Centerが開発した単位ライブラリによって フォーマットされたバイナリ形式の単位間の変換を行い、また、バイナリ形式で単位型代数演算を行なうことが可能です。単位ライブラリそのものは自己完結型であり、NetCDFライブラリとの間には依存性はありません。それでもこのライブラリは一般的なNetCDFプログラムを書く際には非常に有用ですので、手に入れることをお勧めします。この ライブラリと関連文書は http://www.unidata.ucar.edu/packages/udunits/ から取得できます。
以下に Unidata 単位ライブラリの関数 utScan() によって解釈できる単位文字列の例を挙げてあります。
10 kilogram.meters/seconds2
10 kg-m/sec2
10 kg m/s^2
10 kilogram meter second-2
(PI radian)2
degF
100rpm
geopotential meters
33 feet water
milliseconds since 1992-12-31 12:34:0.1 -7:00
単位とは単位の任意の整数冪に任意の定数を掛けたものとして指定されます。割り算はスラッシュ `/' 、掛け算は空白・ピリオド `.' ・ハイフン `-' ,のいずれか、冪算は 整数の添え字又は冪乗演算子 `^' ・ `**' で表わされます。括弧を用いて表記をグループ化したり明瞭化することもできます。 最後の例のタイムススタンプは特殊なケースとして扱われます。
任意のガリレオ変換( すなわち、 y = ax + b )も許されています。特に、温度の変換は正しく扱われています。次の指定:
degF @ 32
は原点を華氏32度(つまり摂氏0度)にシフトした華氏での温度表記です。従って、摂氏での表記は次のような単位と等しくなります:
1.8 degF @ 32
原点シフトの演算が掛け算より優先されることに注意してください。演算の優先順位は(下位から上位に向かって)除算、乗算、原点移動、冪算になります。
関数utScan() は全てのSI接頭語(つまり、 "mega" 、 "milli" )やそれらの短縮形(つまり、 "M" 、 "m" )に対応できます。
関数 utPrint() は常に単位指定を一意にコード化します。誤った解釈を防ぐために、このコード化のスタイルをデフォルトとして使用することをお勧めします。一般的には、単位は基本単位・因数・ 冪指数によってコード化されます。基本単位は空白によって区切られ、冪指数は対応する単位に直接付加されます。上記の例は次のようにコード化されます:
10 kilogram meter second-2
9.8696044 radian2
0.555556 kelvin @ 255.372
10.471976 radian second-1
9.80665 meter2 second-2
98636.5 kilogram meter-1 second-2
0.001 seconds since 1992-12-31 19:34:0.1000 UTC
(華氏単位が原点255.372 kelvinからの分数の偏差としてkelvin単位の分数としてコード化されていることに注意してください。さらに、最後の例では時刻がUTCに変換されていることにも注意してください。)
単位ライブラリのデータベースはフォーマットされたファイルで単位定義を含み、このパッケージを初期化するのに使われます。有効な単位名や記号等はまずここで探して下さい。
この単位ファイルのフォーマットに関しては内部に文書があり、ユーザーは必要に応じてファイルを 修正することが出来ます。特に、単位や定数(さらに既存の単位や定数の異なった綴り)は簡単に付け足していくことが出来ます。
関数utScan() は大文字小文字を区別します。これによって不都合が生じるようでしたら、単位ファイルに適切な項目を追加してください。
デフォルト単位ファイルにある単位の短縮形は直感的ではないかもしれません。特に次に挙げるものについては注意が必要です: