netcdf-c/ncdump/ref_ctest_special_atts_4.c
Dennis Heimbigner 9e016b85aa Add test cases
2019-11-03 12:03:13 -07:00

171 lines
6.9 KiB
C

#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;
/* 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
/* 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];
/* 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__);
/* 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;
}