#include#include #include 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 regions.nc */ int stat; /* return status */ int ncid; /* netCDF id */ /* group ids */ int root_grp; int USA_grp; int USA_Colorado_grp; int USA_Wyoming_grp; int USA_Alaska_grp; /* dimension ids */ int USA_time_dim; int USA_Colorado_stations_dim; int USA_Wyoming_stations_dim; int USA_Alaska_stations_dim; /* dimension lengths */ size_t USA_time_len = NC_UNLIMITED; size_t USA_Colorado_stations_len = 5; size_t USA_Wyoming_stations_len = 4; size_t USA_Alaska_stations_len = 3; /* variable ids */ int USA_average_temperature_id; int USA_Colorado_temperature_id; int USA_Wyoming_temperature_id; int USA_Alaska_temperature_id; /* rank (number of dimensions) for each variable */ # define RANK_USA_average_temperature 1 # define RANK_USA_Colorado_temperature 2 # define RANK_USA_Wyoming_temperature 2 # define RANK_USA_Alaska_temperature 2 /* variable shapes */ int USA_average_temperature_dims[RANK_USA_average_temperature]; int USA_Colorado_temperature_dims[RANK_USA_Colorado_temperature]; int USA_Wyoming_temperature_dims[RANK_USA_Wyoming_temperature]; int USA_Alaska_temperature_dims[RANK_USA_Alaska_temperature]; /* enter define mode */ stat = nc_create("regions.nc", NC_CLOBBER|NC_NETCDF4, &ncid); check_err(stat,__LINE__,__FILE__); root_grp = ncid; stat = nc_def_grp(root_grp, "USA", &USA_grp); check_err(stat,__LINE__,__FILE__); stat = nc_def_grp(USA_grp, "Colorado", &USA_Colorado_grp); check_err(stat,__LINE__,__FILE__); stat = nc_def_grp(USA_grp, "Wyoming", &USA_Wyoming_grp); check_err(stat,__LINE__,__FILE__); stat = nc_def_grp(USA_grp, "Alaska", &USA_Alaska_grp); check_err(stat,__LINE__,__FILE__); /* define dimensions */ stat = nc_def_dim(USA_grp, "time", USA_time_len, &USA_time_dim); check_err(stat,__LINE__,__FILE__); stat = nc_def_dim(USA_Colorado_grp, "stations", USA_Colorado_stations_len, &USA_Colorado_stations_dim); check_err(stat,__LINE__,__FILE__); stat = nc_def_dim(USA_Wyoming_grp, "stations", USA_Wyoming_stations_len, &USA_Wyoming_stations_dim); check_err(stat,__LINE__,__FILE__); stat = nc_def_dim(USA_Alaska_grp, "stations", USA_Alaska_stations_len, &USA_Alaska_stations_dim); check_err(stat,__LINE__,__FILE__); /* define variables */ USA_average_temperature_dims[0] = USA_time_dim; stat = nc_def_var(USA_grp, "average_temperature", NC_FLOAT, RANK_USA_average_temperature, USA_average_temperature_dims, &USA_average_temperature_id); check_err(stat,__LINE__,__FILE__); USA_Colorado_temperature_dims[0] = USA_time_dim; USA_Colorado_temperature_dims[1] = USA_Colorado_stations_dim; stat = nc_def_var(USA_Colorado_grp, "temperature", NC_FLOAT, RANK_USA_Colorado_temperature, USA_Colorado_temperature_dims, &USA_Colorado_temperature_id); check_err(stat,__LINE__,__FILE__); USA_Wyoming_temperature_dims[0] = USA_time_dim; USA_Wyoming_temperature_dims[1] = USA_Wyoming_stations_dim; stat = nc_def_var(USA_Wyoming_grp, "temperature", NC_FLOAT, RANK_USA_Wyoming_temperature, USA_Wyoming_temperature_dims, &USA_Wyoming_temperature_id); check_err(stat,__LINE__,__FILE__); USA_Alaska_temperature_dims[0] = USA_time_dim; USA_Alaska_temperature_dims[1] = USA_Alaska_stations_dim; stat = nc_def_var(USA_Alaska_grp, "temperature", NC_FLOAT, RANK_USA_Alaska_temperature, USA_Alaska_temperature_dims, &USA_Alaska_temperature_id); check_err(stat,__LINE__,__FILE__); /* leave define mode */ stat = nc_enddef (root_grp); check_err(stat,__LINE__,__FILE__); /* assign variable data */ { float USA_average_temperature_data[2] = {13.4167, 63.416698} ; size_t USA_average_temperature_startset[1] = {0} ; size_t USA_average_temperature_countset[1] = {2} ; stat = nc_put_vara(USA_grp, USA_average_temperature_id, USA_average_temperature_startset, USA_average_temperature_countset, USA_average_temperature_data); stat = nc_put_vara(USA_grp, USA_average_temperature_id, USA_average_temperature_startset, USA_average_temperature_countset, USA_average_temperature_data); check_err(stat,__LINE__,__FILE__); } { float USA_Colorado_temperature_data[10] = {11, 12, 13, 14, 15, 61, 62, 63, 64, 65} ; size_t USA_Colorado_temperature_startset[2] = {0, 0} ; size_t USA_Colorado_temperature_countset[2] = {2, 5} ; stat = nc_put_vara(USA_Colorado_grp, USA_Colorado_temperature_id, USA_Colorado_temperature_startset, USA_Colorado_temperature_countset, USA_Colorado_temperature_data); stat = nc_put_vara(USA_Colorado_grp, USA_Colorado_temperature_id, USA_Colorado_temperature_startset, USA_Colorado_temperature_countset, USA_Colorado_temperature_data); check_err(stat,__LINE__,__FILE__); } { float USA_Wyoming_temperature_data[8] = {12, 13, 14, 15, 62, 63, 64, 65} ; size_t USA_Wyoming_temperature_startset[2] = {0, 0} ; size_t USA_Wyoming_temperature_countset[2] = {2, 4} ; stat = nc_put_vara(USA_Wyoming_grp, USA_Wyoming_temperature_id, USA_Wyoming_temperature_startset, USA_Wyoming_temperature_countset, USA_Wyoming_temperature_data); stat = nc_put_vara(USA_Wyoming_grp, USA_Wyoming_temperature_id, USA_Wyoming_temperature_startset, USA_Wyoming_temperature_countset, USA_Wyoming_temperature_data); check_err(stat,__LINE__,__FILE__); } { float USA_Alaska_temperature_data[6] = {13, 14, 15, 63, 64, 65} ; size_t USA_Alaska_temperature_startset[2] = {0, 0} ; size_t USA_Alaska_temperature_countset[2] = {2, 3} ; stat = nc_put_vara(USA_Alaska_grp, USA_Alaska_temperature_id, USA_Alaska_temperature_startset, USA_Alaska_temperature_countset, USA_Alaska_temperature_data); stat = nc_put_vara(USA_Alaska_grp, USA_Alaska_temperature_id, USA_Alaska_temperature_startset, USA_Alaska_temperature_countset, USA_Alaska_temperature_data); check_err(stat,__LINE__,__FILE__); } stat = nc_close(root_grp); check_err(stat,__LINE__,__FILE__); return 0; }