Up|<<Prev|Next>>


2.1 NetCDF データモデル

NetCDF ファイルは dimensions (次元)、 variables (変数)、 attributes (属性)等の情報を含み、全てに固有の名とID番号が割り振られています。データの意味や配列指向のデータフィールド間の関係をを把握するためにこれらの構成成分を同時に使用することが出来ます。 NetCDF ライブラリではファイル通常のファイル名のみでなくID番号によっても指定される複数のNetCDF ファイルに同時にアクセス可能です。

NetCDFファイルには記号テーブルが存在し、変数の名・データタイプ・ランク(次元数)・次元・開始ディスクアドレス等の情報が記載されています。 個々の要素はそのIDを表す配列索引(subscript、添字)の一次関数であるディスクアドレスに記憶されています。つまり、これらの索引を別々に保存する必要が無く(この点で関係データベースと異なる)、素早くコンパクトな記憶法である。

2.1.1 慣習(Conventions)の命名

次元、変数、属性の名はローマ字もしくはアンダースコアで始まる任意のローマ字と数字で構成されている文字列(アンダースコア'_’、ハイフン'-'を含む)で表されます。(ただし、アンダ-スコアで始まる名はシステム用にのみ使用します。)

2.1.2 Network Common Data Form Language (CDL)

ここで簡単なNetCDFの例を使い、 NetCDFデータモデルの原理を説明します。このデータには次元も変数も属性も含まれています。 この簡単な NetCDF オブジェクトの表記は CDL (network Common Data form Language)と呼ばれ、NetCDFファイルを表記するのに大変適しています。 NetCDFシステムにはバイナリのNetCDFファイルから人間指向のCDLテキストファイルを作成する、及び逆の操作を行うためのユーティリティが含まれています。

netcdf example_1 {  // example of CDL notation for a NetCDF dataset
 
dimensions:         // dimension names and lengths are declared first
        lat = 5, lon = 10, level = 4, time = unlimited;
 
variables:          // variable types, names, shapes, attributes
        float   temp(time,level,lat,lon);
                    temp:long_name     = "temperature";
                    temp:units         = "celsius";
        float   rh(time,lat,lon);
                    rh:long_name = "relative humidity";
                    rh:valid_range = 0.0, 1.0;      // min and max
        int     lat(lat), lon(lon), level(level);
                    lat:units       = "degrees_north";
                    lon:units       = "degrees_east";
                    level:units     = "millibars";
        short   time(time);
                    time:units      = "hours since 1996-1-1";
        // global attributes
                    :source = "Fictional Model Output";
 
data:                // optional data assignments
        level   = 1000, 850, 700, 500;
        lat     = 20, 30, 40, 50, 60;
        lon     = -160,-140,-118,-96,-84,-52,-45,-35,-25,-15;
        time    = 12;
        rh      =.5,.2,.4,.2,.3,.2,.4,.5,.6,.7,
                 .1,.3,.1,.1,.1,.1,.5,.7,.8,.8,
                 .1,.2,.2,.2,.2,.5,.7,.8,.9,.9,
                 .1,.2,.3,.3,.3,.3,.7,.8,.9,.9,
                  0,.1,.2,.4,.4,.4,.4,.7,.9,.9;
}

NetCDFファイル用の CDL表記は後述(ncdumpを参照)のユーティリティプログラム ncdump を使って簡単に自動作成できます。別の NetCDF ユーティリティである ncgen はNetCDF ファイル(もしくは随意にNetCDFファイルを作成するために必要な呼び出しを含むC及びFORTRANのソースコード)をCDLインプットから作成します。(ncgen)

CDL 表記法は単純で大部分が自明です。 NetCDFファイルの構成要素を説明してゆくに従いCDL 表記法のより詳細な部分を明らかにしていいkます。この時点では、 CDL文がセミコロンで終わることに注意してください。スペース・タブ・改行は自由に使って文を読みやすくしてください。 CDL のコメントはどの行においても `//' に続きます。NetCDFファイルはCDL では下のように記述されます。

 

  NetCDF name
 {
    dimensions: ... 
    variables: ... 
    data: ... 
  }

ここで name (名)は ncgen ユーティリティー を使ってファイル名を作成する際に単にデフォルトとして使用されます。 CDL記述には3つのオプションがあり、 dimensions variables data のキーワードによって開始されます。NetCDF 次元の宣言は dimensions の後に記述されます。NetCDF 変数及び属性は variables の後に定義され、変数データの割り当ては data の後に続きます。


Up|<<Prev|Next>>