関数 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[],
int nc_put_vars_uchar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_vars_schar (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_vars_short (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_vars_int (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_vars_long (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_vars_float (int ncid, int varid, const size_t start[],
const size_t count[], const ptrdiff_t stride[],
int nc_put_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の最初の要素は書き込まれる記録数にのカウントに相当する。 |
|
NetCDF変数の各次元に沿ってのサンプリング間隔を指定する ptrdiff_t 整数のベクトル。ストライドベクトルの要素はNetCDF変数の次元に順番に対応する。(stride[0] はNetCDF変数の次元中で最も遅く変化する次元のサンプリング間隔を与える。)サンプリングの間隔は要素の型独立の単位で指定される。(値が1は対応する次元に沿って隣接するNetCDF変数をせん定する。値が2ならばNetCDF変数の次元に沿って一つおきの値にアクセスする。) ストライドが NULL (0)の場合には各次元に沿って (1, 1, ... , 1) 、つまり隣接した値にアクセスしていくとデフォルトで定義されている。 |
|
データ値の塊を指し示すポインタ。NetCDF変数にデータが書き込まれていく順番は指定された最後の変数の次元が最も早く変化していくような順番である。 もしデータの型が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);