TOC PREV NEXT INDEX

Put your logo here!


3.2.2 配列断面のアクセス例


先に扱ったNetCDFファイルの例(2.1.2節「Network Common Data Form Language (CDL)」(p.12))において、あるレベル(例えば2段目)のtemp変数の全データの断面を読み取りたいとし、そしてそのNetCDFファイルには記録が3つ(time値)あるとます。次元は

lat = 5, lon = 10, level = 4, time = unlimited;

と定義されます。そして、変数 temp はCDL表記においては

float temp(time, level, lat, lon);

と宣言されます。

対応するC変数で、ある一つのレベルのみのデータを保持しているものは、データを1次元配列に留めておくために、

#define LATS 5
#define LONS 10
#define LEVELS 1
#define TIMES 3 /* 現在 */

float temp[TIMES*LEVELS*LATS*LONS];

と宣言されるかもしれません。または、多次元配列を使って


float temp[TIMES][LEVELS][LATS][LONS];

と宣言されます。

2段目のレベルにある全時刻・全緯度・全経度のデータブロックを識別するためには、始点インデックスとブロックの縁の長さを与えなければなりません。timelonlat次元については最初の値から、そしてlevel次元については2番目の値から開始されるので始点インデックスはCでは(0, 1, 0, 0)になります。time値については3個すべて、level値については1個のみ、lat値については5個すべて、そしてlon値については10個すべてを取得したいので、縁の長さはCでは(3, 1, 5, 10)になります。この操作によって合計150個(3*1*5*1)の浮動小数点数が返されるので、これだけの数を収容するのに十分な配列スペースを確保しなければなりません。このデータが返される順番は最も早く変化する最後の次元lonになります:

temp[0][1][0][0]
temp[0][1][0][1]
temp[0][1][0][2]
temp[0][1][0][3]



temp[2][1][4][7]
temp[2][1][4][8]
temp[2][1][4][9]

CやFORTRANなどの異なる言語インターフェースにおける次元の順番が異なるのはディスク上で保存されている順番が異なるからではなく、単に各言語に対する手続きインターフェースによってサポートされている順番が異なっているからです。一般的に、NetCDFファイルがCやFORTRAN、または他の言語インターフェースで作成されていても何も変わりません。NetCDFをサポートする言語で作成されたNetCDFファイルは他の言語で書かれたプログラムを使って読み取ることができます。



Quadralay Corporation
http://www.webworks.com
Voice: (512) 719-3399
Fax: (512) 719-3606
sales@webworks.com
TOC PREV NEXT INDEX