7.6 すべての値を変数に書きこむ: nc_put_var_ type
関数nc_put_var_ typeのファミリーはオープンされたNetCDFファイルのNetCDF変数にすべての値を書きこみます。これはスカラー変数に値を書き込んだり多次元変数の値が一度にすべて書き込める場合に使用できるもっとも単純なインターフェースです。書きこまれる値は、Cインターフェースにおいて最も早く変化するNetCDF変数が最後の次元であるという仮定の下にNetCDF変数と関連付けられます。必要に応じて、値は外部データ型に変換されます。
用法
int nc_put_var_text (int ncid, int varid, const char *tp);
int nc_put_var_uchar (int ncid, int varid, const unsigned char *up);
int nc_put_var_schar (int ncid, int varid, const signed char *cp);
int nc_put_var_short (int ncid, int varid, const short *sp);
int nc_put_var_int (int ncid, int varid, const int *ip);
int nc_put_var_long (int ncid, int varid, const long *lp);
int nc_put_var_float (int ncid, int varid, const float *fp);
int nc_put_var_double(int ncid, int varid, const double *dp);
ncid 以前のnc_open または nc_create呼び出しで返されたNetCDF ID varid 変数ID tp, up, cp, sp, ip, lp, fp, dp 書きこまれるデータ値のかたまりへのポインタ。指定された変数の最後の次元が最も早く変化する順番でデータ値がNetCDF変数に書き込まれます。データ値の型がNetCDF変数型と異なる場合には型変換が行われます。詳細については 3.3節「型変換」(p.24)を参照してください。
エラー
関数nc_put_var_ typeファミリーに属する関数は、エラーが発生していない場合には NC_NOERR の値を返します。その他の場合には、返されたステータスがエラーを示します。エラーの原因としては:
・ 変数IDが指定されたNetCDFファイルでは有効ではない。
・ 指定されたデータ値の一つ、もしくはそれ以上が変数の外部型として表現できる値の範囲外である。
・ 指定されたNetCDFファイルがデータモードではなく定義モードになっている。
・ 指定されたNetCDF IDが開いているNetCDFファイルを参照していない。
例
この例はnc_put_var_doubleを使用して、既存のNetCDFファイルfoo.ncの変数rhの値のすべてを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 */
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_var_double(ncid, rh_id, 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 |