関数 nc_get_vars_ type の一族は開かれたNetCDFファイルから部分サンプルされた (ストライドした) NetCDF変数の配列断面 の値を読みます。部分サンプルされた配列断面は隅・縁の長さを示すベクトル・ ストライドベクトルを与えることによって指定されます。値はNetCDF変数の中で最初の 次元が最も早く変化する用に読まれます。NetCDFファイルはデータモードに無くてはなりません。
int nc_get_vars_text (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_uchar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_schar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_short (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_int (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_long (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_float (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_get_vars_double(int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
先頭のデータ値が読み込まれる変数を指定する、サイズ_tの整数のベクトル。インデックスは零に相対的なので、変数の最初のデータ値のインデックスは(0,0、...、0)になります。 start の要素は指定された変数の次元と順番に対応しています。よって、記録変数の場合には、最初のインデックスはデータ値を読み取る開始記録番号に相当する。 |
|
各次元に沿って幾つのインデックスが選定されるかを指定するサイズ_t の整数ベクトル。 例えば単一の値を読み取る場合には、 count を (1, 1, ... , 1) と指定すればよい。 count の要素は変数の次元に順番に対応する。よって、記録変数の場合には count の最初の要素が読み取る記録数の総計に対応する。 |
|
各次元ごとに選定されたインデックスの間隔を指定するサイズptrdiff_t の整数ベクトル 。 ストライドベクトルの要素は変数の次元に順番に対応する。値が1ならば、対応する次元のNetCDF変数で隣接する値をアクセスする。値が2の場合には対応するNetCDF変数の値を一つおきにアクセスする。 NULL ストライド引数は (1, 1, ... , 1) として扱われる。 |
|
データ値が読み込まれる位置へのポインタ。データ型がNetCDF変数型と異なる場合にはタイプ変換が行なわれます。 詳細はタイプ変換を参照のこと。 |
この例では 関数 nc_get_vars_double を使用して、既存のNetCDFファイル foo.nc の変数 rh の各次元から値を一つおきに読みます。簡潔のために、この例では rh の次元が time , lat , と lon であり、 time 値は3個、 lat 値は5個、そしてvalues, and ten 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};
static ptrdiff_t stride[] = {2, 2, 2};/* 一つおきの値 */
double data[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_vars_double(ncid, rh_id, start, count, stride,
&data[0][0][0]);
if (status != NC_NOERR) handle_error(status);
...