17 int createNCDF(
int ncid,
const char *sname,
const char *lname,
20 const char *flag_values,
const char *flag_meanings,
21 double low,
double high,
int nt,
22 int rank,
int *dimids,
size_t *chunksize) {
28 status = nc_def_var(ncid, sname, nt,
rank, dimids, &varid);
30 printf(
"-E- %s %d: %s for %s\n",
31 __FILE__, __LINE__, nc_strerror(
status), sname);
36 double fill_value_dbl;
37 memcpy(&fill_value_dbl, fill_value,
sizeof (
double));
46 if ((low < high) && (low != fill_value_dbl)) {
50 status = nc_def_var_fill(ncid, varid, 0, (
void *) &i8);
51 }
else if (nt == NC_UBYTE) {
54 status = nc_def_var_fill(ncid, varid, 0, (
void *) &ui8);
55 }
else if (nt == NC_SHORT) {
58 status = nc_def_var_fill(ncid, varid, 0, (
void *) &i16);
59 }
else if (nt == NC_INT) {
62 status = nc_def_var_fill(ncid, varid, 0, (
void *) &i32);
63 }
else if (nt == NC_FLOAT) {
66 status = nc_def_var_fill(ncid, varid, 0, (
void *) &
f32);
69 status = nc_def_var_fill(ncid, varid, 0, (
void *) &fill_value_dbl);
75 status = nc_put_att_text(ncid, varid,
"long_name", strlen(lname), lname);
77 printf(
"-E- %s %d: %s for %s\n",
78 __FILE__, __LINE__, nc_strerror(
status),
"long_name");
83 if (strcmp(flag_values,
"") != 0) {
84 status = nc_put_att_text(ncid, varid,
"flag_values",
85 strlen(flag_values), flag_values);
87 printf(
"-E- %s %d: %s for %s\n",
88 __FILE__, __LINE__, nc_strerror(
status),
"flag_values");
94 if (strcmp(flag_meanings,
"") != 0) {
95 status = nc_put_att_text(ncid, varid,
"flag_meanings",
96 strlen(flag_meanings), flag_meanings);
98 printf(
"-E- %s %d: %s for %s\n",
99 __FILE__, __LINE__, nc_strerror(
status),
"flag_meanings");
110 vr[0] = (uint8_t) low;
111 vr[1] = (uint8_t) high;
112 status = nc_put_att_uchar(ncid, varid,
"valid_min", NC_BYTE, 1, &vr[0]);
114 printf(
"-E- %s %d: %s for %s\n",
115 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
118 status = nc_put_att_uchar(ncid, varid,
"valid_max", NC_BYTE, 1, &vr[1]);
120 printf(
"-E- %s %d: %s for %s\n",
121 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
129 vr[0] = (uint8_t) low;
130 vr[1] = (uint8_t) high;
131 status = nc_put_att_uchar(ncid, varid,
"valid_min", NC_UBYTE, 1, &vr[0]);
133 printf(
"-E- %s %d: %s for %s\n",
134 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
137 status = nc_put_att_uchar(ncid, varid,
"valid_max", NC_UBYTE, 1, &vr[1]);
139 printf(
"-E- %s %d: %s for %s\n",
140 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
148 vr[0] = (int16_t) low;
149 vr[1] = (int16_t) high;
150 status = nc_put_att_short(ncid, varid,
"valid_range", NC_SHORT, 1, &vr[0]);
152 printf(
"-E- %s %d: %s for %s\n",
153 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
156 status = nc_put_att_short(ncid, varid,
"valid_max", NC_SHORT, 1, &vr[1]);
158 printf(
"-E- %s %d: %s for %s\n",
159 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
167 vr[0] = (int32_t) low;
168 vr[1] = (int32_t) high;
169 status = nc_put_att_int(ncid, varid,
"valid_min", NC_INT, 1, &vr[0]);
171 printf(
"-E- %s %d: %s for %s\n",
172 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
175 status = nc_put_att_int(ncid, varid,
"valid_max", NC_INT, 1, &vr[1]);
177 printf(
"-E- %s %d: %s for %s\n",
178 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
187 vr[1] = (
float) high;
188 status = nc_put_att_float(ncid, varid,
"valid_min", NC_FLOAT, 1, &vr[0]);
190 printf(
"-E- %s %d: %s for %s\n",
191 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
194 status = nc_put_att_float(ncid, varid,
"valid_max", NC_FLOAT, 1, &vr[1]);
196 printf(
"-E- %s %d: %s for %s\n",
197 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
207 status = nc_put_att_double(ncid, varid,
"valid_min", NC_DOUBLE, 1, &vr[0]);
209 printf(
"-E- %s %d: %s for %s\n",
210 __FILE__, __LINE__, nc_strerror(
status),
"valid_min");
213 status = nc_put_att_double(ncid, varid,
"valid_max", NC_DOUBLE, 1, &vr[1]);
215 printf(
"-E- %s %d: %s for %s\n",
216 __FILE__, __LINE__, nc_strerror(
status),
"valid_max");
222 fprintf(
stderr,
"-E- %s line %d: ", __FILE__, __LINE__);
223 fprintf(
stderr,
"Got unsupported number type (%d) ", nt);
224 fprintf(
stderr,
"while trying to create NCDF variable, \"%s\", ", sname);
225 return (EXIT_FAILURE);
233 printf(
"-E- %s %d: %s for %s\n",
234 __FILE__, __LINE__, nc_strerror(
status),
"units");
241 status = nc_put_att_text(ncid, varid,
"standard_name",
244 printf(
"-E- %s %d: %s for %s\n",
245 __FILE__, __LINE__, nc_strerror(
status),
"standard_name");