TOC PREV NEXT INDEX

Put your logo here!


7.12 値の配列を読む: nc_get_vara_ type


関数nc_get_vara_ typeのファミリーはオープンされたNetCDFファイルの変数から値の配列を読み取ります。配列は隅の位置と各辺の長さを表わすベクトルを与えて指定します。値は最後の次元が最も早く変化するように、次々と読み込まれます。

用法
int nc_get_vara_text (int ncid, int varid, const size_t start[],
const size_t count[] char *tp);
int nc_get_vara_uchar (int ncid, int varid, const size_t start[],
const size_t count[] unsigned char *up);
int nc_get_vara_schar (int ncid, int varid, const size_t start[],
const size_t count[] signed char *cp);
int nc_get_vara_short (int ncid, int varid, const size_t start[],
const size_t count[] short *sp);
int nc_get_vara_int (int ncid, int varid, const size_t start[],
const size_t count[] int *ip);
int nc_get_vara_long (int ncid, int varid, const size_t start[],
const size_t count[] long *lp);
int nc_get_vara_float (int ncid, int varid, const size_t start[],
const size_t count[] float *fp);
int nc_get_vara_double(int ncid, int varid, const size_t start[],
const size_t count[] double *dp);
ncid 以前のnc_open または nc_create呼び出しで返されたNetCDF ID
varid 変数ID
start すべての書き込まれるデータの中で先頭のデータ値が読み込まれる変数を指定する、size_tの整数のベクトル。インデックスは零に相対的なので、変数の最初のデータ値のインデックスは(0,0,,0)になります。startの長さは指定された変数の次元数と一致していなければなりません。startの要素は指定された変数の次元と順番に対応しています。よって、記録変数の場合には、最初のインデックスはデータ値を読み取る開始記録番号に相当します。
count 読み取るデータ値のかたまりの各次元の辺の長さを指定するsize_t の整数ベクトル。例えば単一の値を読み取る場合には、 count(1, 1, … , 1)と指定してください。 countの長さは指定された変数の次元の数に相当します。countの要素は変数の次元に順番に対応します。よって、記録変数の場合にはcountの最初の要素が読み取る記録数の総計に対応します。
tp, up, cp, sp, ip, lp, fp, dp データ値が読み込まれる位置へのポインタ。データ型がNetCDF変数型と異なる場合には型変換が行なわれます。詳細は3.3節「型変換」(p.24)を参照して下さい。

エラー

エラーが発生していなければ、関数nc_get_vara_ typeNC_NOERR の値を返します。それ以外の場合は、返されたステータスがエラーを示します。エラーの原因としては:

・ 変数IDが指定されたNetCDFファイルに対して有効ではない。
・ 指定された隅のインデックスが指定された変数のランクの範囲外であった。例えば、負のインデックス、もしくは対応する次元の長さよりも大きいインデックスなどを与えるとエラーが発生する。
・ 指定された縁の長さを指定された隅に加えると、参照すべきデータ値が指定された変数のランクの範囲外になってしまう。例えば、指定された次元長よりも大きい縁の長さから隅のインデックスを引くとエラーを生じる。
・ 値の一つもしくはそれ以上が望まれる型で表現できる値の範囲外になってしまう。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照しない。

この例ではnc_get_vara_doubleを使用して既存のNetCDFファイルfoo.ncの変数rhから値の配列を読み込みます。簡潔にするためにこの例では変数rhの次元はtime, latlonであり、time値は3個、lat値は5個、そしてlon値は10個あることを既知とします。

#include <netcdf.h>

#define TIMES 3
#define LATS 5
#define LONS 10
int status; /* エラーステータス */
int ncid; /* NetCDF ID */
int rh_id; /* 変数 ID */
static size_t start[] = {0, 0, 0}; /* 最初の値から開始 */
static size_t count[] = {TIMES, LATS, LONS};
double rh_vals[TIMES*LATS*LONS]; /* 値を保持する配列 */

status = nc_open("foo.nc", NC_NOWRITE, &ncid);
if (status != NC_NOERR) handle_error(status);

status = nc_inq_varid (ncid, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);

/* NetCDF変数から値を読み取る */
status = nc_get_vara_double(ncid, rh_id, start, count, rh_vals);
if (status != NC_NOERR) handle_error(status);



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