-
Notifications
You must be signed in to change notification settings - Fork 266
/
Copy pathref_ctest_special_atts_4.c
190 lines (161 loc) · 6.97 KB
/
ref_ctest_special_atts_4.c
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, int line, const char* file, const char* func) {
if (stat != NC_NOERR) {
(void)fprintf(stderr,"line %d of %s.%s: %s\n", line, file, func, nc_strerror(stat));
fflush(stderr);
exit(1);
}
}
#define CHECK_ERR(err) check_err(err, __LINE__, __FILE__, __func__)
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);
tst_special_atts_grp = ncid;
stat = nc_def_compound(tst_special_atts_grp, sizeof(obs_t), "obs_t", &obs_t_typ); CHECK_ERR(stat);
{
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);
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);
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);
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);
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);
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);
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);
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);
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);
}
/* define dimensions */
stat = nc_def_dim(tst_special_atts_grp, "dim1", dim1_len, &dim1_dim);
CHECK_ERR(stat);
stat = nc_def_dim(tst_special_atts_grp, "dim2", dim2_len, &dim2_dim);
CHECK_ERR(stat);
stat = nc_def_dim(tst_special_atts_grp, "dim3", dim3_len, &dim3_dim);
CHECK_ERR(stat);
/* 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);
stat = nc_def_var_chunking(tst_special_atts_grp, var1_id, NC_CONTIGUOUS, NULL);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var1_id, NC_ENDIAN_LITTLE);
CHECK_ERR(stat);
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);
stat = nc_def_var_chunking(tst_special_atts_grp, var2_id, NC_CHUNKED, var2_chunksizes);
CHECK_ERR(stat);
stat = nc_def_var_fletcher32(tst_special_atts_grp, var2_id, 1);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var2_id, NC_ENDIAN_BIG);
CHECK_ERR(stat);
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);
stat = nc_def_var_chunking(tst_special_atts_grp, var3_id, NC_CHUNKED, var3_chunksizes);
CHECK_ERR(stat);
stat = nc_def_var_deflate(tst_special_atts_grp, var3_id, NC_NOSHUFFLE, 1, 2);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var3_id, NC_ENDIAN_LITTLE);
CHECK_ERR(stat);
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);
stat = nc_def_var_chunking(tst_special_atts_grp, var4_id, NC_CHUNKED, var4_chunksizes);
CHECK_ERR(stat);
stat = nc_def_var_deflate(tst_special_atts_grp, var4_id, NC_SHUFFLE, 1, 2);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var4_id, NC_ENDIAN_LITTLE);
CHECK_ERR(stat);
stat = nc_def_var_fill(tst_special_atts_grp, var4_id, NC_NOFILL, NULL);
CHECK_ERR(stat);
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);
stat = nc_def_var_chunking(tst_special_atts_grp, var5_id, NC_CHUNKED, var5_chunksizes);
CHECK_ERR(stat);
stat = nc_def_var_fletcher32(tst_special_atts_grp, var5_id, 1);
CHECK_ERR(stat);
stat = nc_def_var_deflate(tst_special_atts_grp, var5_id, NC_SHUFFLE, 1, 2);
CHECK_ERR(stat);
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);
stat = nc_def_var_chunking(tst_special_atts_grp, var6_id, NC_COMPACT, NULL);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var6_id, NC_ENDIAN_LITTLE);
CHECK_ERR(stat);
stat = nc_def_var(tst_special_atts_grp, "var7", NC_INT, RANK_var7, 0, &var7_id);
CHECK_ERR(stat);
stat = nc_def_var_chunking(tst_special_atts_grp, var7_id, NC_COMPACT, NULL);
CHECK_ERR(stat);
stat = nc_def_var_endian(tst_special_atts_grp, var7_id, NC_ENDIAN_LITTLE);
CHECK_ERR(stat);
/* leave define mode */
stat = nc_enddef (tst_special_atts_grp);
CHECK_ERR(stat);
/* assign variable data */
stat = nc_close(tst_special_atts_grp);
CHECK_ERR(stat);
return 0;
}