前のページはありません |
2000年11月30日 豊田英司
本稿では gtool4 の変数というものが現実のデータをどのようにモデル化したものなのかについて議論を試みます。
gtool4 は netCDF に依存しているわけではありませんが、netCDF ファイル形式を使うことを前提として設計され、またその設計にあたっては netCDF に深い影響を受けました。では、netCDF のデータはどういうものでしょうか。
ひとつの netCDF ファイルはデータセットと呼ばれます。データセットには任意個の変数、任意個の次元、任意個の大域属性を作ることができます。
変数とはあらかじめ決められた名前、次元、型を持った多次元配列です。変数には任意個の属性を作ることができます。
次元とは配列添字に名前を与えるもので、名前と長さを持ちます。長さは固定長と不定長がありますが、ひとつのデータセットに作ることのできる不定長次元は最大で1つに制限されています。
属性は名前と型と長さを持った1次元配列です。文字型1次元配列は文字列と解される慣例です。
型は char, byte, short, int, float, double のいずれかです。これは典型的な 32bit機における C の型と同じ意味を持ちます。ただし、byte は char と同じ大きさの整数で、char は文字型です。
ということがいえます。
次元は属性も格子点の位置情報も持つことができませんが、次元と同名の変数を作って格納する慣用が広く行われています。これを次元変数といいます。
データ型の変換はライブラリが担当します。つまり、データセットにおける型と異なるアプリケーションの内部的な変数に入出力しようとするときには、数値によって正しく変換が行われます。ただし文字型と数値型は相互に変換できません。
gtool の変数は netCDF の変数にほぼ対応するものですが、以下のような整理が行なわれています。これは最初はアプリケーションプログラムとの界面を簡素化するためでしたが、結果的に論理モデルの抽出に寄与していると考えています。
構造のフラット化のために、ファイルという概念が消去されました。変数は変数名だけではなく、その前にファイル名(ネットワークへの拡張を考慮し URL を用いるのを本則とする)を連結した変数URL という文字列で識別されます。
NetCDF ユーザはファイルを開き、そのファイルから変数名を検索して変数を参照しますが、gtool ユーザは変数 URL を使って変数を開き、直接これを参照します。
ファイルの消去にともない、大域属性という概念も消去されます。実際にはデータ互換性のため大域属性を設けることがあるのですが、この属性は gtool では配下の変数すべてに共有されているものとみなします。
NetCDF 次元を作るたびに必ず同名の次元変数を作成するという表現は無駄です。そこで、次元と次元変数を同一視することにしました。
NetCDF では変数は次元を持つといいましたが、gtool では「ある変数は他の変数の次元である」という関係としてとらえます。
属性は型を持たないことにしました。netCDF では文字型属性と数値型属性の自動変換がなく、たとえば任意の型の属性を文字列として解釈しようとすると(解釈は一義的に定まり運用上も要請があるものと思われるにもかかわらず)大変なコードを書かなければなりません。それはライブラリでやろうというわけです。
gtool4 では属性には型がないものとみなします。実際の外部表現では書き込みを行なったときに最適な型を選択し、入力時はあらゆる外部表現を目的の型に自動的に変換します。
前のページはありません |