1/* This is part of the netCDF package. Copyright 2009 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use.
4
5   Test netcdf-4 coordinate variables and dimensions.
6
7   $Id: tst_coords2.c,v 1.3 2010/06/01 15:34:51 ed Exp $
8*/
9
10#include <nc_tests.h>
11#include "err_macros.h"
12#include "netcdf.h"
13
14#define FILE_NAME "tst_coords2.nc"
15
16
17int
18main(int argc, char **argv)
19{
20   printf("\n*** Testing netcdf-4 coordinate dimensions and variables, some more.\n");
21
22   printf("**** testing more complex 2D coordinate variable with dimensions defined in different order...");
23   {
24#define NDIMS 5
25#define NVARS 4
26#define LON_NAME "lon"
27#define LAT_NAME "lat"
28#define LVL_NAME "lvl"
29#define TIME_NAME "time"
30#define TEXT_LEN_NAME "text_len"
31#define TEMP_NAME "temp"
32#define PRES_NAME "pres"
33#define LON_LEN 5
34#define LAT_LEN 3
35#define LVL_LEN 7
36#define TIME_LEN 2
37#define TEXT_LEN 15
38#define TIME_NDIMS 2
39#define DATA_NDIMS 4
40
41      int ncidnvars_invarids_in[NVARS];
42      int time_dimids[TIME_NDIMS];
43      int dimids[NDIMS], time_idlon_idpres_idtemp_id;
44      size_t time_count[NDIMS], time_index[NDIMS] = {0, 0};
45      const char ttext[TEXT_LEN + 1]="20051224.150000";
46      char ttext_in[TEXT_LEN + 1];
47      int nvarsndimsngattsunlimdimid;
48      int ndims_innatts_indimids_in[NDIMS];
49      char var_name_in[NC_MAX_NAME + 1], dim_name_in[NC_MAX_NAME + 1];
50      size_t len_in;
51      nc_type xtype_in;
52      int d;
53
54      /* Create a netcdf-4 file. */
55      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
56
57      /* Define dimensions. */
58      if (nc_def_dim(ncidLON_NAMELON_LEN, &dimids[0])) ERR;
59      if (nc_def_dim(ncidLAT_NAMELAT_LEN, &dimids[1])) ERR;
60      if (nc_def_dim(ncidLVL_NAMELVL_LEN, &dimids[2])) ERR;
61      if (nc_def_dim(ncidTIME_NAMETIME_LEN, &dimids[3])) ERR;
62      if (nc_def_dim(ncidTEXT_LEN_NAMETEXT_LEN, &dimids[4])) ERR;
63
64      /* Define two coordinate variables out of order. */
65      time_dimids[0] = dimids[3];
66      time_dimids[1] = dimids[4];
67      if (nc_def_var(ncidTIME_NAMENC_CHARTIME_NDIMStime_dimids, &time_id)) ERR;
68      if (nc_def_var(ncidLON_NAMENC_CHAR, 1, &dimids[0], &lon_id)) ERR;
69
70      /* Write one time to the coordinate variable. */
71      time_count[0] = 1;
72      time_count[1] = TEXT_LEN;
73      if (nc_put_vara_text(ncidtime_idtime_indextime_countttext)) ERR;
74
75      /* Define two data variable. */
76      if (nc_def_var(ncidPRES_NAMENC_CHARDATA_NDIMSdimids, &pres_id)) ERR;
77      if (nc_def_var(ncidTEMP_NAMENC_CHARDATA_NDIMSdimids, &temp_id)) ERR;
78
79      /* Check the data. */
80      if (nc_get_vara_text(ncidtime_idtime_indextime_countttext_in)) ERR;
81      if (strncmp(ttextttext_inTEXT_LEN)) ERR;
82
83      /* Check the metadata. */
84      if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR;
85      if (nvars != NVARS || ndims != NDIMS || ngatts != 0 || unlimdimid != -1) ERR;
86      if (nc_inq_varids(ncid, &nvars_invarids_in)) ERR;
87      if (nvars_in != NVARS || varids_in[0] != 0 || varids_in[1] != 1 ||
88   varids_in[2] != 2 || varids_in[3] != 3) ERR;
89      if (nc_inq_var(ncid, 0, var_name_in, &xtype_in, &ndims_indimids_in, &natts_in)) ERR;
90      if (strcmp(var_name_inTIME_NAME) || xtype_in != NC_CHAR || ndims_in != TIME_NDIMS ||
91 dimids_in[0] != time_dimids[0] || dimids_in[1] != time_dimids[1] || natts_in != 0) ERR;
92      if (nc_inq_dimids(ncid, &ndims_indimids_in, 0)) ERR;
93      if (ndims_in != NDIMSERR;
94      for (d = 0; d < NDIMSd++)
95  if (dimids_in[d] != dimids[d]) ERR;
96      if (nc_inq_dim(ncid, 0, dim_name_in, &len_in)) ERR;
97      if (strcmp(dim_name_inLON_NAME) || len_in != LON_LENERR;
98      if (nc_inq_dim(ncid, 1, dim_name_in, &len_in)) ERR;
99      if (strcmp(dim_name_inLAT_NAME) || len_in != LAT_LENERR;
100      if (nc_inq_dim(ncid, 2, dim_name_in, &len_in)) ERR;
101      if (strcmp(dim_name_inLVL_NAME) || len_in != LVL_LENERR;
102      if (nc_inq_dim(ncid, 3, dim_name_in, &len_in)) ERR;
103      if (strcmp(dim_name_inTIME_NAME) || len_in != TIME_LENERR;
104      if (nc_inq_dim(ncid, 4, dim_name_in, &len_in)) ERR;
105      if (strcmp(dim_name_inTEXT_LEN_NAME) || len_in != TEXT_LENERR;
106
107      /* Close up. */
108      if (nc_close(ncid)) ERR;
109
110      /* Open the file and check the order of variables and dimensions. */
111      if (nc_open(FILE_NAMENC_WRITE, &ncid)) ERR;
112      if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR;
113      if (nvars != NVARS || ndims != NDIMS || ngatts != 0 || unlimdimid != -1) ERR;
114      if (nc_inq_varids(ncid, &nvars_invarids_in)) ERR;
115      if (nvars_in != NVARS || varids_in[0] != 0 || varids_in[1] != 1 ||
116   varids_in[2] != 2 || varids_in[3] != 3) ERR;
117      if (nc_inq_var(ncid, 0, var_name_in, &xtype_in, &ndims_indimids_in, &natts_in)) ERR;
118      if (strcmp(var_name_inTIME_NAME) || xtype_in != NC_CHAR || ndims_in != TIME_NDIMS ||
119 dimids_in[0] != time_dimids[0] || dimids_in[1] != time_dimids[1] || natts_in != 0) ERR;
120      if (nc_inq_dimids(ncid, &ndims_indimids_in, 0)) ERR;
121      if (ndims_in != NDIMSERR;
122      for (d = 0; d < NDIMSd++)
123  if (dimids_in[d] != dimids[d]) ERR;
124      if (nc_inq_dim(ncid, 0, dim_name_in, &len_in)) ERR;
125      if (strcmp(dim_name_inLON_NAME) || len_in != LON_LENERR;
126      if (nc_inq_dim(ncid, 1, dim_name_in, &len_in)) ERR;
127      if (strcmp(dim_name_inLAT_NAME) || len_in != LAT_LENERR;
128      if (nc_inq_dim(ncid, 2, dim_name_in, &len_in)) ERR;
129      if (strcmp(dim_name_inLVL_NAME) || len_in != LVL_LENERR;
130      if (nc_inq_dim(ncid, 3, dim_name_in, &len_in)) ERR;
131      if (strcmp(dim_name_inTIME_NAME) || len_in != TIME_LENERR;
132      if (nc_inq_dim(ncid, 4, dim_name_in, &len_in)) ERR;
133      if (strcmp(dim_name_inTEXT_LEN_NAME) || len_in != TEXT_LENERR;
134
135      /* Check the data. */
136      if (nc_get_vara_text(ncidtime_idtime_indextime_countttext_in)) ERR;
137      if (strncmp(ttextttext_inTEXT_LEN)) ERR;
138
139      /* Close up. */
140      if (nc_close(ncid)) ERR;
141   }
142   SUMMARIZE_ERR;
143   printf("**** testing example from bug NCF-247, multidimensional coord variable in subgroup ...");
144   {
145#define GRPNAME "g1"
146#define DIM0NAME "dim0"
147#define DIM1NAME "dim1"
148#define DIM2NAME "coord"
149#define DIM3NAME "dim3"
150#define VARNAME  DIM2NAME
151#define VARRANK 2
152       int  ncidgrpidvaridvar_dims[VARRANK], var_dims_in[VARRANK];
153       char name2[NC_MAX_NAME], name3[NC_MAX_NAME];
154       int dim0_dimdim1_dimdim2_dimdim3_dim;
155       size_t dim0_len = 3, dim1_len = 2, dim2_len = 5, dim3_len = 7;
156
157       if (nc_create(FILE_NAMENC_CLOBBER|NC_NETCDF4, &ncid)) ERR;
158       if (nc_def_grp(ncidGRPNAME, &grpid)) ERR;
159
160       if (nc_def_dim(ncidDIM0NAMEdim0_len, &dim0_dim)) ERR;
161       if (nc_def_dim(ncidDIM1NAMEdim1_len, &dim1_dim)) ERR;
162       if (nc_def_dim(grpidDIM2NAMEdim2_len, &dim2_dim)) ERR;
163       if (nc_def_dim(grpidDIM3NAMEdim3_len, &dim3_dim)) ERR;
164
165       var_dims[0] = dim2_dim;
166       var_dims[1] = dim3_dim;
167       if (nc_def_var(grpidVARNAMENC_INTVARRANKvar_dims, &varid)) ERR;
168
169       if (nc_close(ncid)) ERR;
170
171       if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
172
173       if (nc_inq_grp_ncid(ncidGRPNAME, &grpid)) ERR;
174
175       if (nc_inq_varid(grpidVARNAME, &varid)) ERR;
176       if (nc_inq_vardimid(grpidvaridvar_dims_in)) ERR;
177       if (nc_inq_dimname(grpidvar_dims_in[0], name2)) ERR;
178       if (nc_inq_dimname(grpidvar_dims_in[1], name3)) ERR;
179       if (strcmp(name2DIM2NAME) != 0 || strcmp(name3DIM3NAME) != 0) ERR;
180       if (nc_close(ncid)) ERR;
181   }
182   SUMMARIZE_ERR;
183   FINAL_RESULTS;
184}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed