mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-11-27 07:30:33 +08:00
171 lines
6.9 KiB
C
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;
|
|
}
|