関数 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);
全ての書き込まれるデータの中で先頭のデータ値が読み込まれる変数を指定する、サイズ_tの整数のベクトル。インデックスは零に相対的なので、変数の最初のデータ値のインデックスは(0,0、...、0)になります。 start の長さは 指定された変数の次元数と一致していなければなりません。 start の要素は指定された変数の次元と順番に対応しています。よって、記録変数の場合には、最初のインデックスはデータ値を読み取る開始記録番号に相当する。 |
|
読み取るデータ値の塊の各次元の辺の長さを指定するサイズ_t の整数ベクトル。 例えば単一の値を読み取る場合には、 count を (1, 1, ... , 1) と指定すればよい。 count の長さは指定された変数の次元の数に相当する。 count の要素は変数の次元に順番に対応する。よって、記録変数の場合には count の最初の要素が読み取る記録数の総計に対応する。 |
|
データ値が読み込まれる位置へのポインタ。データ型がNetCDF変数型と異なる場合にはタイプ変換が行なわれます。 詳細はタイプ変換を参照のこと。 |
エラーが発生していなければ、関数 nc_get_vara_ type は NC_NOERR の値を返します。それ以外の場合は、返されたステータスがエラーが発生したことを示します。エラーの原因としては:
指定された隅のインデックスが指定された変数のランクの範囲外であった。例えば、負のインデックス、もしくは対応する次元の長さよりも大きいインデックスなどを与えるとエラーが発生する。
指定された縁の長さを指定された隅に加えると、参照すべきデータ値が指定された変数のランクの範囲外になってします。例えば、指定された次元長よりも大きい縁の長さから隅のインデックスを引くとエラーを生じる。
値の一つもしくはそれ以上が望まれるタイプで表現できる値の範囲外になってします。
この例では nc_get_vara_double を使用して 既存の NetCDF ファイル foo.nc の変数 rh から値の配列を読み込みます。簡潔のためにこの例では変数 rh の次元は time , lat , と lon であり、 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);