7.7 値の配列を書きこむ: nc_put_vara_ type
関数nc_put_vara_ typeはオープンされたNetCDFファイルのNetCDF変数のに値を書き込みます。書き込むNetCDF変数の部分は変数の部分配列の隅と縁の長さを与えることによって指定されます。書き込まれる値はNetCDF変数の最後の次元がCインターフェースにおいて最も早く変化するという仮定の下にNetCDF変数に関連付けられます。NetCDFファイルはデータモードになっていなければなりません。
用法
int nc_put_vara_ type (int ncid, int varid, const size_t start[],
const size_t count[], const type *valuesp);
int nc_put_vara_text (int ncid, int varid, const size_t start[],
const size_t count[], const char *tp);
int nc_put_vara_uchar (int ncid, int varid, const size_t start[],
const size_t count[], const unsigned char *up);
int nc_put_vara_schar (int ncid, int varid, const size_t start[],
const size_t count[], const signed char *cp);
int nc_put_vara_short (int ncid, int varid, const size_t start[],
const size_t count[], const short *sp);
int nc_put_vara_int (int ncid, int varid, const size_t start[],
const size_t count[], const int *ip);
int nc_put_vara_long (int ncid, int varid, const size_t start[],
const size_t count[], const long *lp);
int nc_put_vara_float (int ncid, int varid, const size_t start[],
const size_t count[], const float *fp);
int nc_put_vara_double(int ncid, int varid, const size_t start[],
const size_t count[], const double *dp);
ncid 以前のnc_open または nc_create呼び出しで返されたNetCDF ID varid 変数ID start 最初のデータ値が書き込まれる変数の中のインデックスを指定するsize_t型整数のベクトル。インデックスは零に相対的なものなので、変数の最初のデータ値のインデックスは(0, 0, … , 0) になります。startのサイズは指定された変数の次元数と同じでなければなりません。また、startの要素は変数の次元に順番に対応していなければなりません。従って、記録変数の場合には、最初のインデックスはデータ値を書き込むための開始記録番号に対応します。 count 書き込むデータ値のかたまりの各次元の縁の長さを指定する size_t型整数のベクトル。例えば単一のデータ値を書き込むためには、count を (1, 1, … , 1)と指定します。count の長さが指定された変数の次元数になります。count の要素は変数の次元に対応します。従って、記録変数の場合にはcountの最初の要素は書きこむ記録数のcount に対応します。 tp, up, cp, sp, ip, lp, fp, dp 書き込むデータ値のかたまりへのポインタ。指定された変数の最後の次元が最も早く変化するような順番でデータはNetCDF変数に書きこまれます。データ値の型がNetCDF変数型と異なる場合には型変換が行われます。詳細については3.3節「型変換」(p.24)を参照して下さい。
エラー
関数nc_put_vara_ typeはエラーが発生していない場合には NC_NOERR 値を返します。それ以外の場合には、返されたステータスがエラーの発生を示します。エラーの原因としては:
・ 変数IDが指定されたNetCDFファイルでは無効である。
・ 指定された隅のインデックスが指定された変数のランクの範囲外である。例えば、負のインデックス、または対応する次元長より大きなインデックスはエラーを引き起こします。
・ 指定された隅に指定された縁の長さを加えると、参照するデータが指定された変数のランクの範囲外になってしまう。例えば、対応する次元長から隅のインデックスを引いたものより縁の長さが大きい場合にはエラーが発生します。
・ 指定された値の一つ、もしくはそれ以上が変数の外部型として表現可能な値の範囲外にある。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDがオープンされたNetCDFファイルを参照していない。
例
この例はnc_put_vara_doubleを使用して既存のNetCDFファイル中foo.ncの変数rh を0.5を加えるか0.5にします。簡潔にするためにこの例では、変数 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]; /* 値を保持する配列 */
int i;
…
status = nc_open("foo.nc", NC_WRITE, &ncid);
if (status != NC_NOERR) handle_error(status);
…
status = nc_inq_varid (ncid, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);
…
for (i = 0; i < TIMES*LATS*LONS; i++)
rh_vals[i] = 0.5;
/* NetCDF変数に値を書き込む */
status = nc_put_vara_double(ncid, rh_id, start, count, rh_vals);
if (status != NC_NOERR) handle_error(status);
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |