1 /* This is part of the netCDF package.
2 
3    Copyright 2005-2018, University Corporation for Atmospheric
4    Research/Unidata See COPYRIGHT file for conditions of use.
5 
6    This program creates a test file with groups for ncdump to read.
7 
8    $Id: tst_group_data.c,v 1.3 2008/08/07 00:07:52 ed Exp $
9 */
10 
11 #include <netcdf.h>
12 #include <nc_tests.h>
13 #include "err_macros.h"
14 
15 #define FILE_NAME "tst_group_data.nc"
16 #define DIM_NAME "dim"
17 #define DIM_LEN 4
18 #define DIM_LEN1 1
19 #define DIM_LEN2 2
20 #define DIM_LEN3 3
21 #define VAR_NAME "var"
22 #define VAR_RANK 1
23 #define VAR2_NAME "var2"
24 #define VAR2_RANK 3
25 #define ATT_NAME "units"
26 #define ATT_VAL "m/s"
27 #define ATT_VAL1 "km/hour"
28 #define ATT_VAL2 "cm/sec"
29 #define ATT_VAL3 "mm/msec"
30 #define GATT_NAME "title"
31 #define GATT_VAL "for testing groups"
32 #define GATT_VAL1 "in first group"
33 #define GATT_VAL2 "in second group"
34 #define GATT_VAL3 "in third group"
35 #define G1_NAME "g1"
36 #define G2_NAME "g2"
37 #define G3_NAME "g3"
38 
39 int
main(int argc,char ** argv)40 main(int argc, char **argv) {
41     int ncid, dimid, dimid1, dimid2, dimid3, varid, var2id;
42     int var_dims[VAR_RANK], var2_dims[VAR2_RANK];
43     int g1id, g2id, g3id;
44     float vals[] = {1.0, 2.0, 3.0, 4.0};
45     float vals2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
46 		     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
47 
48     printf("\n*** Testing groups.\n");
49     printf("*** creating nested group file %s...", FILE_NAME);
50 
51     /* Create a file with nested groups. */
52     if (nc_create(FILE_NAME, NC_CLOBBER | NC_NETCDF4, &ncid)) ERR;
53     /* At root level define dim, var, atts */
54     if (nc_def_dim(ncid, DIM_NAME, DIM_LEN, &dimid)) ERR;
55     var_dims[0] = dimid;
56     if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, VAR_RANK, var_dims, &varid)) ERR;
57     if (nc_put_att_text(ncid, varid, ATT_NAME, strlen(ATT_VAL), ATT_VAL)) ERR;
58     if (nc_put_att_text(ncid, NC_GLOBAL, GATT_NAME, strlen(GATT_VAL),
59 			GATT_VAL)) ERR;
60     if (nc_enddef(ncid)) ERR;
61     if (nc_put_var_float(ncid, varid, vals)) ERR;
62 
63     /* put dim, var, atts with same names in a group */
64     if (nc_def_grp(ncid, G1_NAME, &g1id)) ERR;
65     if (nc_def_dim(g1id, DIM_NAME, DIM_LEN1, &dimid1)) ERR;
66     var_dims[0] = dimid1;
67     if (nc_def_var(g1id, VAR_NAME, NC_FLOAT, VAR_RANK, var_dims, &varid)) ERR;
68     if (nc_put_att_text(g1id, varid, ATT_NAME, strlen(ATT_VAL1), ATT_VAL1)) ERR;
69     if (nc_put_att_text(g1id, NC_GLOBAL, GATT_NAME, strlen(GATT_VAL1),
70 			GATT_VAL1)) ERR;
71     if (nc_enddef(g1id)) ERR;
72     if (nc_put_var_float(g1id, varid, vals)) ERR;
73 
74     /* put dim, var, atts with same names in a second group */
75     if (nc_def_grp(ncid, G2_NAME, &g2id)) ERR;
76     if (nc_def_dim(g2id, DIM_NAME, DIM_LEN2, &dimid2)) ERR;
77     var_dims[0] = dimid2;
78     if (nc_def_var(g2id, VAR_NAME, NC_FLOAT, VAR_RANK, var_dims, &varid)) ERR;
79     if (nc_put_att_text(g2id, varid, ATT_NAME, strlen(ATT_VAL2), ATT_VAL2)) ERR;
80     if (nc_put_att_text(g2id, NC_GLOBAL, GATT_NAME, strlen(GATT_VAL2),
81 			GATT_VAL2)) ERR;
82     if (nc_enddef(g2id)) ERR;
83     if (nc_put_var_float(g2id, varid, vals)) ERR;
84 
85     /* put dim, var, atts with same names in a subgroup of second group */
86     if (nc_def_grp(g2id, G3_NAME, &g3id)) ERR;
87     if (nc_def_dim(g3id, DIM_NAME, DIM_LEN3, &dimid3)) ERR;
88     var_dims[0] = dimid3;
89     if (nc_def_var(g3id, VAR_NAME, NC_FLOAT, VAR_RANK, var_dims, &varid)) ERR;
90     if (nc_put_att_text(g3id, varid, ATT_NAME, strlen(ATT_VAL3), ATT_VAL3)) ERR;
91     if (nc_put_att_text(g3id, NC_GLOBAL, GATT_NAME, strlen(GATT_VAL3),
92 			GATT_VAL3)) ERR;
93     var2_dims[0] = dimid;
94     var2_dims[1] = dimid2;
95     var2_dims[2] = dimid3;
96     if (nc_def_var(g3id, VAR2_NAME, NC_FLOAT, VAR2_RANK, var2_dims, &var2id)) ERR;
97     if (nc_enddef(g3id)) ERR;
98     if (nc_put_var_float(g3id, varid, vals)) ERR;
99     if (nc_put_var_float(g3id, var2id, vals2)) ERR;
100 
101     if (nc_close(ncid)) ERR;
102 
103     SUMMARIZE_ERR;
104     FINAL_RESULTS;
105 }
106