TOC PREV NEXT INDEX

Put your logo here!


7.8 部分サンプルされた配列の値を書き込む: nc_put_vars_ type


関数nc_put_vars_ typeのファミリーに属するものはそれぞれ部分サンプルされた(ストライドされた)配列断面をオープンされたNetCDFファイルの変数に書き込みます。部分サンプルされた配列断面は隅、カウントのベクトル、そしてストライドベクトルを与えることによって指定します。NetCDFファイルはデータモードになっていなければなりません。

用法
int nc_put_vars_text (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const char *tp);
int nc_put_vars_uchar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const unsigned char *up);
int nc_put_vars_schar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const signed char *cp);
int nc_put_vars_short (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const short *sp);
int nc_put_vars_int (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const int *ip);
int nc_put_vars_long (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const long *lp);
int nc_put_vars_float (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const float *fp);
int nc_put_vars_double(int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
const 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 NetCDF変数の各次元に沿ってのサンプリング間隔を指定する ptrdiff_t 整数のベクトル。ストライドベクトルの要素はNetCDF変数の次元に順番に対応します。(stride[0] はNetCDF変数の次元中で最も遅く変化する次元のサンプリング間隔を与える。)サンプリングの間隔は要素の型独立の単位で指定される。(値が1ならば対応する次元に沿って隣接するNetCDF変数を選定します。値が2ならばNetCDF変数の次元に沿って一つおきの値にアクセスします。) ストライドが NULL (0)の場合には各次元に沿って(1, 1, … , 1)、つまり隣接した値にアクセスしていくとデフォルトで定義されています。
tp, up, cp, sp, ip, lp, fp, dp データ値のかたまりを指し示すポインタ。NetCDF変数にデータが書き込まれていく順番は指定された最後の変数の次元が最も早く変化していくような順番です。もしデータの型がNetCDF変数型と異なる場合には型変換が行われます。詳細については 3.3節「型変換」(p.24)を参照のして下さい。

エラー

エラーが発生していない場合にはnc_put_vars_ typeNC_NOERR の値を返します。その他の場合には、返されたステータスがエラーの発生を示します。エラーの原因としては:

・ 変数IDが指定されたNetCDFファイルに対して有効ではない。
・ 指定されたstart・count・strideが領域外のインデックスを生成してしまう。
・ 指定された値のうち、少なくとも一つが変数の外部データ型で表現可能な値の範囲外である。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照しない。

この例は nc_put_vars_float を使用して、内部配列から、rhと言う名のNetCDF変数を一つおきに書き込んでいく例です。変数rhはC宣言文 float rh[4][6]において定義されています。(次元の大きさに注目してください。)

#include <netcdf.h>

#define NDIM 2 /* NetCDF変数のランク */
int ncid; /* NetCDF ID */
int status; /* エラーステータス */
int rhid; /* 変数 ID */
static size_t start[NDIM] /* NetCDF 変数のスタート地点: */
= {0, 0}; /* 最初の要素 */
static size_t count[NDIM] /* 内部配列のサイズ:全体 */
= {2, 3}; /* (部分サンプルされた)NetCDF変数( */
static ptrdiff_t stride[NDIM] /* 変数の部分サンプル間隔: */
= {2, 2}; /* NetCDF要素に一つおきにアクセス */
float rh[2][3]; /* 部分サンプルのサイズを記録 */
/* NetCDF変数の次元 */

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

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

status = nc_put_vars_float(ncid, rhid, start, count, stride, rh);
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