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   The cdm_* tests confirm complience with the Common Data Model. This
6   file creates some sample data structures to hold sea soundings.
7
8   $Id: cdm_sea_soundings.c,v 1.5 2010/05/25 13:53:04 ed Exp $
9*/
10#include <nc_tests.h>
11#include "err_macros.h"
12
13#define FILE_NAME "cdm_sea_soundings.nc"
14#define DIM_NAME "Sounding"
15#define DIM_LEN 3
16
17int
18main(int argc, char **argv)
19{
20   int nciddimidvaridtemp_typeidsounding_typeid;
21   struct sea_sounding
22   {
23  int sounding_no;
24  nc_vlen_t temp_vl;
25   } data[DIM_LEN];
26   int ij;
27
28   /* Create phony data. */
29   for (i = 0; i < DIM_LENi++)
30   {
31      if (!(data[i].temp_vl.p = malloc(sizeof(float) * (i + 1))))
32  return NC_ENOMEM;
33      for (j = 0; j < i + 1; j++)
34  ((float *)(data[i].temp_vl.p))[j] = 23.5 - j;
35      data[i].temp_vl.len = i + 1;
36   }
37
38   printf("\n*** Testing netcdf-4 CDM compliance: sea soundings.\n");
39   printf("*** creating simple sea sounding file...");
40
41   /* Create a netcdf-4 file. */
42   if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
43
44   /* Create the vlen type, with a float base type. */
45   if (nc_def_vlen(ncid, "temp_vlen", NC_FLOAT, &temp_typeid)) ERR;
46
47   /* Create the compound type to hold a sea sounding. */
48   if (nc_def_compound(ncid, sizeof(struct sea_sounding),
49        "sea_sounding", &sounding_typeid)) ERR;
50   if (nc_insert_compound(ncidsounding_typeid, "sounding_no",
51   NC_COMPOUND_OFFSET(struct sea_soundingsounding_no),
52   NC_INT)) ERR;
53   if (nc_insert_compound(ncidsounding_typeid, "temp_vl",
54   NC_COMPOUND_OFFSET(struct sea_soundingtemp_vl),
55   temp_typeid)) ERR;
56
57   /* Define a dimension, and a 1D var of sea sounding compound type. */
58   if (nc_def_dim(ncidDIM_NAMEDIM_LEN, &dimid)) ERR;
59   if (nc_def_var(ncid, "fun_soundings", sounding_typeid, 1,
60   &dimid, &varid)) ERR;
61
62   /* Write our array of phone data to the file, all at once. */
63   if (nc_put_var(ncidvariddata)) ERR;
64
65   /* We're done, yipee! */
66   if (nc_close(ncid)) ERR;
67
68   SUMMARIZE_ERR;
69
70   /* Free the memory the phony data are using. */
71    for (i = 0; i < DIM_LENi++)
72       free(data[i].temp_vl.p);
73
74   /* Print out our number of errors, if any, and exit badly. */
75   if (total_err)
76   {
77      printf("%d errors detected! Sorry!\n", total_err);
78      return 2;
79   }
80
81   printf("*** Tests successful!\n");
82   return 0;
83}


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