1/*! \file
2Read a simple file, with some of the features of netCDF-4.
3
4This is a very simple example which demonstrates some of the new
5features of netCDF-4.0.
6
7This example reads a simple file created by simple_nc4_wr.c. This is
8intended to illustrate the use of the netCDF-4 C API.
9
10This is part of the netCDF package. Copyright 2006-2011 University
11Corporation for Atmospheric Research/Unidata. See COPYRIGHT file for
12conditions of use. Full documentation of the netCDF can be found at
13http://www.unidata.ucar.edu/software/netcdf/docs.
14*/
15#include <stdlib.h>
16#include <stdio.h>
17#include <netcdf.h>
18
19/* This is the name of the data file we will read. */
20#define FILE_NAME "simple_nc4.nc"
21
22/* We are reading 2D data, a 6 x 12 grid. */
23#define NX 6
24#define NY 12
25
26/* Handle errors by printing an error message and exiting with a
27 * non-zero status. */
28#define ERRCODE 2
29#define ERR(e) {printf("Error: %s\n", nc_strerror(e)); exit(ERRCODE);}
30
31int
32main()
33{
34   /* There will be netCDF IDs for the file, each group, and each
35    * variable. */
36   int ncidvarid1varid2grp1idgrp2id;
37
38   unsigned long long data_in[NX][NY];
39
40   /* Loop indexes, and error handling. */
41   int xyretval;
42
43   /* The following struct is written as a compound type. */
44   struct s1
45   {
46         int i1;
47         int i2;
48   };
49   struct s1 compound_data[NX][NY];
50
51   /* Open the file. NC_NOWRITE tells netCDF we want read-only access
52    * to the file.*/
53   if ((retval = nc_open(FILE_NAMENC_NOWRITE, &ncid)))
54      ERR(retval);
55
56   /* Get the group ids of our two groups. */
57   if ((retval = nc_inq_ncid(ncid, "grp1", &grp1id)))
58      ERR(retval);
59   if ((retval = nc_inq_ncid(ncid, "grp2", &grp2id)))
60      ERR(retval);
61
62   /* Get the varid of the uint64 data variable, based on its name, in
63    * grp1. */
64   if ((retval = nc_inq_varid(grp1id, "data", &varid1)))
65      ERR(retval);
66
67   /* Read the data. */
68   if ((retval = nc_get_var_ulonglong(grp1idvarid1, &data_in[0][0])))
69      ERR(retval);
70
71   /* Get the varid of the compound data variable, based on its name,
72    * in grp2. */
73   if ((retval = nc_inq_varid(grp2id, "data", &varid2)))
74      ERR(retval);
75
76   /* Read the data. */
77   if ((retval = nc_get_var(grp2idvarid2, &compound_data[0][0])))
78      ERR(retval);
79
80   /* Check the data. */
81   for (x = 0; x < NXx++)
82      for (y = 0; y < NYy++)
83      {
84         if (data_in[x][y] != x * NY + y ||
85             compound_data[x][y].i1 != 42 ||
86             compound_data[x][y].i2 != -42)
87            return ERRCODE;
88      }
89
90   /* Close the file, freeing all resources. */
91   if ((retval = nc_close(ncid)))
92      ERR(retval);
93
94   printf("*** SUCCESS reading example file %s!\n", FILE_NAME);
95   return 0;
96}


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