#include#include #include #define Clear ((signed char)0) #define Cumulonimbus ((signed char)1) #define Stratus ((signed char)2) #define Stratocumulus ((signed char)3) #define Cumulus ((signed char)4) #define Altostratus ((signed char)5) #define Nimbostratus ((signed char)6) #define Altocumulus ((signed char)7) #define Missing ((signed char)127) typedef signed char cloud_t; void check_err(const int stat, const int line, const char *file) { if (stat != NC_NOERR) { (void)fprintf(stderr,"line %d of %s: %s\n", line, file, nc_strerror(stat)); fflush(stderr); exit(1); } } int main() {/* create clouds.nc */ int stat; /* return status */ int ncid; /* netCDF id */ /* group ids */ int root_grp; /* type ids */ int cloud_t_typ; /* dimension ids */ int time_dim; /* dimension lengths */ size_t time_len = NC_UNLIMITED; /* variable ids */ int primary_cloud_id; /* rank (number of dimensions) for each variable */ # define RANK_primary_cloud 1 /* variable shapes */ int primary_cloud_dims[RANK_primary_cloud]; /* enter define mode */ stat = nc_create("clouds.nc", NC_CLOBBER|NC_NETCDF4, &ncid); check_err(stat,__LINE__,__FILE__); root_grp = ncid; { signed char econst; stat = nc_def_enum(root_grp, NC_BYTE, "cloud_t", &cloud_t_typ); check_err(stat,__LINE__,__FILE__); econst = 0; stat = nc_insert_enum(root_grp, cloud_t_typ, "Clear", &econst); econst = 1; stat = nc_insert_enum(root_grp, cloud_t_typ, "Cumulonimbus", &econst); econst = 2; stat = nc_insert_enum(root_grp, cloud_t_typ, "Stratus", &econst); econst = 3; stat = nc_insert_enum(root_grp, cloud_t_typ, "Stratocumulus", &econst); econst = 4; stat = nc_insert_enum(root_grp, cloud_t_typ, "Cumulus", &econst); econst = 5; stat = nc_insert_enum(root_grp, cloud_t_typ, "Altostratus", &econst); econst = 6; stat = nc_insert_enum(root_grp, cloud_t_typ, "Nimbostratus", &econst); econst = 7; stat = nc_insert_enum(root_grp, cloud_t_typ, "Altocumulus", &econst); econst = 127; stat = nc_insert_enum(root_grp, cloud_t_typ, "Missing", &econst); } /* define dimensions */ stat = nc_def_dim(root_grp, "time", time_len, &time_dim); check_err(stat,__LINE__,__FILE__); /* define variables */ primary_cloud_dims[0] = time_dim; stat = nc_def_var(root_grp, "primary_cloud", cloud_t_typ, RANK_primary_cloud, primary_cloud_dims, &primary_cloud_id); check_err(stat,__LINE__,__FILE__); /* assign per-variable attributes */ { /* _FillValue */ static const cloud_t primary_cloud_FillValue_att[1] = {127} ; stat = nc_put_att_schar(root_grp, primary_cloud_id, "_FillValue", cloud_t_typ, 1, primary_cloud_FillValue_att); check_err(stat,__LINE__,__FILE__); } /* leave define mode */ stat = nc_enddef (root_grp); check_err(stat,__LINE__,__FILE__); /* assign variable data */ { cloud_t primary_cloud_data[5] = {0, 2, 4, 127, 1} ; size_t primary_cloud_startset[1] = {0} ; size_t primary_cloud_countset[1] = {5} ; stat = nc_put_vara(root_grp, primary_cloud_id, primary_cloud_startset, primary_cloud_countset, primary_cloud_data); check_err(stat,__LINE__,__FILE__); } stat = nc_close(root_grp); check_err(stat,__LINE__,__FILE__); return 0; }