1/** \file
2Write the simple_xy file, with some of the features of netCDF-4.
3
4This is a very simple example which is based on the simple_xy example,
5but whch uses netCDF-4 features, such as compression. Please see the
6simple_xy example to learn more about the netCDF-3 API.
7
8Like simple_xy_wr.c, this program writes a 2D netCDF variable (called
9"data") and fills it with sample data.  It has two dimensions, "x" and
10"y".
11
12Full documentation for netCDF can be found at:
13http://www.unidata.ucar.edu/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 create. */
20#define FILE_NAME "simple_xy_nc4.nc"
21
22/* We are writing 2D data, a 6 x 12 grid. */
23#define NDIMS 2
24#define NX 6
25#define NY 12
26
27/* Handle errors by printing an error message and exiting with a
28 * non-zero status. */
29#define ERRCODE 2
30#define ERR(e) {printf("Error: %s\n", nc_strerror(e)); exit(ERRCODE);}
31
32int
33main()
34{
35   int ncidx_dimidy_dimidvarid;
36   int dimids[NDIMS];
37   size_t chunks[NDIMS];
38   int shuffledeflatedeflate_level;
39   int data_out[NX][NY];
40   int xyretval;
41
42   /* Set chunking, shuffle, and deflate. */
43   shuffle = NC_SHUFFLE;
44   deflate = 1;
45   deflate_level = 1;
46
47   /* Create some pretend data. If this wasn't an example program, we
48    * would have some real data to write, for example, model output. */
49   for (x = 0; x < NXx++)
50      for (y = 0; y < NYy++)
51         data_out[x][y] = x * NY + y;
52
53   /* Create the file. The NC_NETCDF4 parameter tells netCDF to create
54    * a file in netCDF-4/HDF5 standard. */
55   if ((retval = nc_create(FILE_NAMENC_NETCDF4, &ncid)))
56      ERR(retval);
57
58   /* Define the dimensions. */
59   if ((retval = nc_def_dim(ncid, "x", NX, &x_dimid)))
60      ERR(retval);
61   if ((retval = nc_def_dim(ncid, "y", NY, &y_dimid)))
62      ERR(retval);
63
64   /* Set up variabe data. */
65   dimids[0] = x_dimid;
66   dimids[1] = y_dimid;
67   chunks[0] = NX/4;
68   chunks[1] = NY/4;
69
70   /* Define the variable. */
71   if ((retval = nc_def_var(ncid, "data", NC_INTNDIMS,
72                            dimids, &varid)))
73      ERR(retval);
74   if ((retval = nc_def_var_chunking(ncidvarid, 0, &chunks[0])))
75      ERR(retval);
76   if ((retval = nc_def_var_deflate(ncidvaridshuffledeflate,
77                                    deflate_level)))
78      ERR(retval);
79
80   /* No need to explicitly end define mode for netCDF-4 files. Write
81    * the pretend data to the file. */
82   if ((retval = nc_put_var_int(ncidvarid, &data_out[0][0])))
83      ERR(retval);
84
85   /* Close the file. */
86   if ((retval = nc_close(ncid)))
87      ERR(retval);
88
89   printf("*** SUCCESS writing example file simple_xy_nc4.nc!\n");
90   return 0;
91}


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