7.13 部分サンプルされた配列の値を読み取る: nc_get_vars_ type
関数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[],
char *tp);
int nc_get_vars_uchar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
unsigned char *up);
int nc_get_vars_schar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
signed char *cp);
int nc_get_vars_short (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
short *sp);
int nc_get_vars_int (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int *ip);
int nc_get_vars_long (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
long *lp);
int nc_get_vars_float (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
float *fp);
int nc_get_vars_double(int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
double *dp)
ncid 以前のnc_openまたはnc_create呼び出しで返されたNetCDF ID varid 変数ID start 先頭のデータ値が読み込まれる変数を指定する、size_tの整数のベクトル。インデックスは零に相対的なので、変数の最初のデータ値のインデックスは(0,0,…,0)になります。startの要素は指定された変数の次元と順番に対応しています。よって、記録変数の場合には、最初のインデックスはデータ値を読み取る開始記録番号に相当します。 count 各次元に沿っていくつのインデックスが選定されるかを指定するsize_tの整数ベクトル。例えば単一の値を読み取る場合には、countを(1, 1, … , 1)と指定して下さい。countの要素は変数の次元に順番に対応します。よって、記録変数の場合にはcountの最初の要素が読み取る記録数の総計に対応します。 stride 各次元ごとに選定されたインデックスの間隔を指定するサイズptrdiff_tの整数ベクトル。ストライドベクトルの要素は変数の次元に順番に対応します。値が1ならば、対応する次元のNetCDF変数で隣接する値をアクセスします。値が2の場合には対応するNetCDF変数の値を一つおきにアクセスします。NULLストライド引数は(1, 1, … , 1)として扱われます。 tp, up, cp, sp, ip, lp, fp, dp データ値が読み込まれる位置へのポインタ。データ型がNetCDF変数型と異なる場合には型変換が行なわれます。詳細は3.3節「型変換」(p.24)を参照して下さい。
エラー
エラーが発生していない場合には、関数nc_get_vars_ typeはNC_NOERRの値を返します。それ以外の場合には返されたステータスがエラーの発生を示します。エラーの原因としては:
・ 変数IDが指定されたNetCDFファイルに対して有効ではない。
・ 指定されたstart・count・strideでは範囲外のインデックスを生成してしまう。
・ 一つもしくはそれ以上の値が希望の型で表わせる値の範囲外である。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照しない。
例
この例では関数nc_get_vars_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};
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);
…
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |