関数 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);
最初のデータ値が書き込まれる変数の中のインデックスを指定するサイズ_t の整数のベクトル。インデックスは零に相対的なものなので、変数の最初のデータ値のインデックスは (0, 0, ... , 0) になります。 Start のサイズは指定された変数の次元数と同じでなければなりません。 又、 start の要素は変数の次元に順番に対応していなければならない。従って、記録変数の場合には、最初のインデックスはデータ値を書き込むための開始記録番号に対応する。h |
|
書き込むデータ値の塊の各次元の縁の長さを指定する サイズ_t の整数のベクトル。 例えば単一のデータ値を書き込む為には、 count を (1, 1, ... , 1) と指定します。 Count の長さが指定された変数の次元数になります。 Count の要素は変数の次元に対応します。 従って、記録変数の場合には count の最初の要素は書きこむ記録数の count に対応します。 |
|
書き込むデータ値の塊へのポインタ。指定された変数の最後の次元が最も早く変化するような順番でデータはNetCDF変数に書きこまれます。データ値の型がNetCDF変数型と異なる場合にはタイプ変換が行われます。詳細についてはタイプ変換を参照のこと。 |
関数 nc_put_vara_ type はエラーが発生していない場合には NC_NOERR 値を返します。それ以外の場合には、返されたステータスがエラーの発生を示します。エラーの原因としては::
この 例は nc_put_vara_double を使用して既存のNetCDFファイル中 foo.nc の変数 rh に10.5をp加えるか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);