1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test netcdf-4 variables with unlimited dimensions.
6
7   $Id: tst_unlim_vars.c,v 1.9 2010/05/25 13:53:04 ed Exp $
8*/
9
10#include <config.h>
11#include <nc_tests.h>
12#include "err_macros.h"
13
14#define FILE_NAME "tst_unlim_vars.nc"
15#define SFC_TEMP_NAME "surface_temperature"
16#define LAT_NAME "lat"
17#define LAT_LEN 2
18#define LON_NAME "lon"
19#define LON_LEN 3
20#define TIME_NAME "time"
21#define NUM_TIMESTEPS 4
22#define NDIMS 3
23
24int
25main(int argc, char **argv)
26{
27   int ncidsfc_tempid;
28   float data_out[NUM_TIMESTEPS][LAT_LEN][LON_LEN], data_in[NUM_TIMESTEPS][LAT_LEN][LON_LEN];
29   int latlon, time;
30   int dimids[NDIMS];
31   nc_type xtype_in;
32   int ndims_indimids_in[10], natts_innvars_inunlimdimid_in;
33   size_t len_in;
34   char name_in[NC_MAX_NAME+1];
35   size_t start[NDIMS], count[NDIMS];
36   int d;
37
38   /* Set up phony data. */
39   for (time = 0; time < NUM_TIMESTEPS; time++)
40      for (lat = 0; lat < LAT_LENlat++)
41  for (lon = 0; lon < LON_LENlon++)
42     data_out[time][lat][lon] = 25.5 + lat + lon + time;
43
44   printf("\n*** Testing netcdf-4 variable with unlimited dimensions.\n");
45   printf("*** Testing file with one var, one unlim dim...");
46
47   /* Create a file with a 3D surface temp variable. */
48   if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
49
50   /* Create three dims, one unlimited. */
51   if (nc_def_dim(ncidTIME_NAMENC_UNLIMITED, &dimids[0])) ERR;
52   if (nc_def_dim(ncidLAT_NAMELAT_LEN, &dimids[1])) ERR;
53   if (nc_def_dim(ncidLON_NAMELON_LEN, &dimids[2])) ERR;
54
55   /* Define a var. */
56   for (d = 0; d < NDIMSd++)
57      dimids[d] = d;
58   if (nc_def_var(ncidSFC_TEMP_NAMENC_FLOATNDIMSdimids, &sfc_tempid)) ERR;
59
60   /* Check some metadata. */
61   if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
62   if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
63   if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_indimids_in,
64   &natts_in)) ERR;
65   if (strcmp(name_inSFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
66       ndims_in != 3 || natts_in != 0) ERR;
67   for (d = 0; d < NDIMSd++)
68      if (dimids_in[d] != dimids[d]) ERR;
69   if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
70   if (len_in != 0 || strcmp(name_inTIME_NAME)) ERR;
71   if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
72   if (len_in != LAT_LEN || strcmp(name_inLAT_NAME)) ERR;
73   if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
74   if (len_in != LON_LEN || strcmp(name_inLON_NAME)) ERR;
75   if (nc_close(ncid)) ERR;
76
77   if (nc_open(FILE_NAME, 0, &ncid)) ERR;
78
79   /* Check metadata. */
80   if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
81   if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
82   if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_indimids_in,
83   &natts_in)) ERR;
84   if (strcmp(name_inSFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
85       ndims_in != 3 || natts_in != 0) ERR;
86   for (d = 0; d < NDIMSd++)
87      if (dimids_in[d] != dimids[d]) ERR;
88   if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
89   if (len_in != 0 || strcmp(name_inTIME_NAME)) ERR;
90   if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
91   if (len_in != LAT_LEN || strcmp(name_inLAT_NAME)) ERR;
92   if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
93   if (len_in != LON_LEN || strcmp(name_inLON_NAME)) ERR;
94
95   if (nc_close(ncid)) ERR;
96
97   if (nc_open(FILE_NAMENC_WRITE, &ncid)) ERR;
98
99   /* Check metadata. */
100   if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
101   if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
102   if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_indimids_in,
103   &natts_in)) ERR;
104   if (strcmp(name_inSFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
105       ndims_in != 3 || natts_in != 0) ERR;
106   for (d = 0; d < NDIMSd++)
107      if (dimids_in[d] != dimids[d]) ERR;
108   if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
109   if (len_in != 0 || strcmp(name_inTIME_NAME)) ERR;
110   if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
111   if (len_in != LAT_LEN || strcmp(name_inLAT_NAME)) ERR;
112   if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
113   if (len_in != LON_LEN || strcmp(name_inLON_NAME)) ERR;
114   if (nc_close(ncid)) ERR;
115
116   /* Write some data to the var.*/
117   if (nc_open(FILE_NAMENC_WRITE, &ncid)) ERR;
118   for (d = 0; d < NDIMSd++)
119      start[d] = 0;
120   count[0] = NUM_TIMESTEPS;
121   count[1] = LAT_LEN;
122   count[2] = LON_LEN;
123   if (nc_put_vara_float(ncid, 0, startcount, (float *)data_out)) ERR;
124
125   /* Check metadata. */
126   if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
127   if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
128   if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_indimids_in,
129   &natts_in)) ERR;
130   if (strcmp(name_inSFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
131       ndims_in != 3 || natts_in != 0) ERR;
132   for (d = 0; d < NDIMSd++)
133      if (dimids_in[d] != dimids[d]) ERR;
134   if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
135   if (len_in != NUM_TIMESTEPS || strcmp(name_inTIME_NAME)) ERR;
136   if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
137   if (len_in != LAT_LEN || strcmp(name_inLAT_NAME)) ERR;
138   if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
139   if (len_in != LON_LEN || strcmp(name_inLON_NAME)) ERR;
140
141   if (nc_close(ncid)) ERR;
142
143   if (nc_open(FILE_NAMENC_WRITE, &ncid)) ERR;
144
145   /* Check data. */
146   if (nc_get_vara_float(ncid, 0, startcount, (float *)data_in)) ERR;
147   for (time = 0; time < NUM_TIMESTEPS; time++)
148      for (lat = 0; lat < LAT_LENlat++)
149  for (lon = 0; lon < LON_LENlon++)
150     if (data_in[time][lat][lon] != data_out[time][lat][lon]) ERR;
151
152   if (nc_close(ncid)) ERR;
153   SUMMARIZE_ERR;
154   FINAL_RESULTS;
155}


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