7.2 変数を生成する: nc_def_var
関数nc_def_var は定義モードにあるオープンされたNetCDFファイルに新たに変数を追加します。NetCDF ID・変数名・変数型・次元数・次元IDのリストを与えると、(引数として)変数IDを返します。
用法
int nc_def_var (int ncid, const char *name, nc_type xtype,
int ndims, const int dimids[], int *varidp);
エラー
エラーが発生していなければ nc_def_var 関数は NC_NOERR の値を返します。それ以外の場合は、返されたステータスがエラーを示します。エラーの原因としては:
・ NetCDF ファイルが定義モードになっていない。
・ 指定された変数名は既存の別な変数の名前である。
・ 指定された型が有効なNetCDF型ではない。
・ 指定された次元の数が負、もしくはNetCDF変数に許された最大の次元の数を表す定数 NC_MAX_VAR_DIMS より大きい。
・ 次元のリストの中の 次元IDのひとつ、もしくはそれ以上がNetCDFファイル中で有効ではない次元IDである。
・ 変数の数がNetCDF変数に許された最大の次元の数を表す定数NC_MAX_VARS より大きい。
・ 指定されたNetCDF IDが開いているNetCDFファイルを参照していない。
例
この例では nc_def_var を使用して、新しいfoo.ncという名前のNetCDFファイル中に、time, lat, lonの3つの次元を持つ、変数名rhの倍精度型の変数を生成します:
#include <netcdf.h>
…
int status; /* エラーステータス */
int ncid; /* NetCDF ID */
int lat_dim, lon_dim, time_dim; /* 次元 ID */
int rh_id; /* 変数 ID */
int rh_dimids[3]; /* 変数の形 */
…
status = nc_create("foo.nc", NC_NOCLOBBER, &ncid);
if (status != NC_NOERR) handle_error(status);
…
/* 次元の定義 */
status = nc_def_dim(ncid, "lat", 5L, &lat_dim);
if (status != NC_NOERR) handle_error(status);
status = nc_def_dim(ncid, "lon", 10L, &lon_dim);
if (status != NC_NOERR) handle_error(status);
status = nc_def_dim(ncid, "time", NC_UNLIMITED, &time_dim);
if (status != NC_NOERR) handle_error(status);
…
/* 変数の定義 */
rh_dimids[0] = time_dim;
rh_dimids[1] = lat_dim;
rh_dimids[2] = lon_dim;
status = nc_def_var (ncid, "rh", NC_DOUBLE, 3, rh_dimids, &rh_id);
if (status != NC_NOERR) handle_error(status);
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |