1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
#include <stdio.h>
#include <stdlib.h>
#include <netcdf.h>
typedef struct obs_t {
signed char obs_t_PERIOD_day;
short obs_t_PERIOD_elev;
int obs_t_PERIOD_count;
float obs_t_PERIOD_relhum;
double obs_t_PERIOD_time;
unsigned char obs_t_PERIOD_category;
unsigned short obs_t_PERIOD_id;
unsigned int obs_t_PERIOD_particularity;
signed long long obs_t_PERIOD_attention_span;
} obs_t;
static size_t var2_chunksizes[2] = {6, 7} ;
static size_t var3_chunksizes[3] = {6, 7, 8} ;
static size_t var4_chunksizes[3] = {6, 7, 8} ;
static size_t var5_chunksizes[1] = {6} ;
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 ref_tst_special_atts.nc */
int stat; /* return status */
int ncid; /* netCDF id */
/* group ids */
int tst_special_atts_grp;
/* type ids */
int obs_t_typ;
/* dimension ids */
int dim1_dim;
int dim2_dim;
int dim3_dim;
/* dimension lengths */
size_t dim1_len = 10;
size_t dim2_len = 20;
size_t dim3_len = 30;
/* variable ids */
int var1_id;
int var2_id;
int var3_id;
int var4_id;
int var5_id;
int var6_id;
int var7_id;
/* rank (number of dimensions) for each variable */
# define RANK_var1 1
# define RANK_var2 2
# define RANK_var3 3
# define RANK_var4 3
# define RANK_var5 1
# define RANK_var6 1
# define RANK_var7 0
/* variable shapes */
int var1_dims[RANK_var1];
int var2_dims[RANK_var2];
int var3_dims[RANK_var3];
int var4_dims[RANK_var4];
int var5_dims[RANK_var5];
int var6_dims[RANK_var6];
/* enter define mode */
stat = nc_create("ref_tst_special_atts.nc", NC_CLOBBER|NC_NETCDF4, &ncid);
check_err(stat,__LINE__,__FILE__);
tst_special_atts_grp = ncid;
stat = nc_def_compound(tst_special_atts_grp, sizeof(obs_t), "obs_t", &obs_t_typ); check_err(stat,__LINE__,__FILE__);
{
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "day", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_day), NC_BYTE); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "elev", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_elev), NC_SHORT); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "count", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_count), NC_INT); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "relhum", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_relhum), NC_FLOAT); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "time", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_time), NC_DOUBLE); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "category", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_category), NC_UBYTE); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "id", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_id), NC_USHORT); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "particularity", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_particularity), NC_UINT); check_err(stat,__LINE__,__FILE__);
stat = nc_insert_compound(tst_special_atts_grp, obs_t_typ, "attention_span", NC_COMPOUND_OFFSET(obs_t,obs_t_PERIOD_attention_span), NC_INT64); check_err(stat,__LINE__,__FILE__);
}
/* define dimensions */
stat = nc_def_dim(tst_special_atts_grp, "dim1", dim1_len, &dim1_dim);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_dim(tst_special_atts_grp, "dim2", dim2_len, &dim2_dim);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_dim(tst_special_atts_grp, "dim3", dim3_len, &dim3_dim);
check_err(stat,__LINE__,__FILE__);
/* define variables */
var1_dims[0] = dim1_dim;
stat = nc_def_var(tst_special_atts_grp, "var1", NC_INT, RANK_var1, var1_dims, &var1_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var1_id, NC_CONTIGUOUS, NULL);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var1_id, NC_ENDIAN_LITTLE);
check_err(stat,__LINE__,__FILE__);
var2_dims[0] = dim1_dim;
var2_dims[1] = dim2_dim;
stat = nc_def_var(tst_special_atts_grp, "var2", NC_INT, RANK_var2, var2_dims, &var2_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var2_id, NC_CHUNKED, var2_chunksizes);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_fletcher32(tst_special_atts_grp, var2_id, 1);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var2_id, NC_ENDIAN_BIG);
check_err(stat,__LINE__,__FILE__);
var3_dims[0] = dim1_dim;
var3_dims[1] = dim2_dim;
var3_dims[2] = dim3_dim;
stat = nc_def_var(tst_special_atts_grp, "var3", NC_INT, RANK_var3, var3_dims, &var3_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var3_id, NC_CHUNKED, var3_chunksizes);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_deflate(tst_special_atts_grp, var3_id, NC_NOSHUFFLE, 1, 2);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var3_id, NC_ENDIAN_LITTLE);
check_err(stat,__LINE__,__FILE__);
var4_dims[0] = dim1_dim;
var4_dims[1] = dim2_dim;
var4_dims[2] = dim3_dim;
stat = nc_def_var(tst_special_atts_grp, "var4", NC_INT, RANK_var4, var4_dims, &var4_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var4_id, NC_CHUNKED, var4_chunksizes);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_deflate(tst_special_atts_grp, var4_id, NC_SHUFFLE, 1, 2);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var4_id, NC_ENDIAN_LITTLE);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_fill(tst_special_atts_grp, var4_id, NC_NOFILL, NULL);
check_err(stat,__LINE__,__FILE__);
var5_dims[0] = dim1_dim;
stat = nc_def_var(tst_special_atts_grp, "var5", obs_t_typ, RANK_var5, var5_dims, &var5_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var5_id, NC_CHUNKED, var5_chunksizes);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_fletcher32(tst_special_atts_grp, var5_id, 1);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_deflate(tst_special_atts_grp, var5_id, NC_SHUFFLE, 1, 2);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_fill(tst_special_atts_grp, var5_id, NC_NOFILL, NULL);
check_err(stat,__LINE__,__FILE__);
var6_dims[0] = dim1_dim;
stat = nc_def_var(tst_special_atts_grp, "var6", NC_INT, RANK_var6, var6_dims, &var6_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var6_id, NC_COMPACT, NULL);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var6_id, NC_ENDIAN_LITTLE);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var(tst_special_atts_grp, "var7", NC_INT, RANK_var7, 0, &var7_id);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_chunking(tst_special_atts_grp, var7_id, NC_COMPACT, NULL);
check_err(stat,__LINE__,__FILE__);
stat = nc_def_var_endian(tst_special_atts_grp, var7_id, NC_ENDIAN_LITTLE);
check_err(stat,__LINE__,__FILE__);
/* leave define mode */
stat = nc_enddef (tst_special_atts_grp);
check_err(stat,__LINE__,__FILE__);
/* assign variable data */
stat = nc_close(tst_special_atts_grp);
check_err(stat,__LINE__,__FILE__);
return 0;
}
|