File: cdm_sea_soundings.c

package info (click to toggle)
netcdf-parallel 1%3A4.9.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 116,192 kB
  • sloc: ansic: 279,265; sh: 14,143; cpp: 5,971; yacc: 2,612; makefile: 2,075; lex: 1,218; javascript: 280; xml: 173; awk: 2
file content (83 lines) | stat: -rw-r--r-- 2,516 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* This is part of the netCDF package.
   Copyright 2018 University Corporation for Atmospheric Research/Unidata
   See COPYRIGHT file for conditions of use.

   The cdm_* tests confirm compliance with the Common Data Model. This
   file creates some sample data structures to hold sea soundings.

   $Id: cdm_sea_soundings.c,v 1.5 2010/05/25 13:53:04 ed Exp $
*/
#include <nc_tests.h>
#include "err_macros.h"

#define FILE_NAME "cdm_sea_soundings.nc"
#define DIM_NAME "Sounding"
#define DIM_LEN 3

int
main(int argc, char **argv)
{
   int ncid, dimid, varid, temp_typeid, sounding_typeid;
   struct sea_sounding
   {
	 int sounding_no;
	 nc_vlen_t temp_vl;
   } data[DIM_LEN];
   int i, j;

   /* Create phony data. */
   for (i = 0; i < DIM_LEN; i++)
   {
      if (!(data[i].temp_vl.p = malloc(sizeof(float) * (size_t)(i + 1))))
	 return NC_ENOMEM;
      for (j = 0; j < i + 1; j++)
	 ((float *)(data[i].temp_vl.p))[j] = 23.5f - (float)j;
      data[i].temp_vl.len = (size_t)i + 1;
   }

   printf("\n*** Testing netcdf-4 CDM compliance: sea soundings.\n");
   printf("*** creating simple sea sounding file...");

   /* Create a netcdf-4 file. */
   if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;

   /* Create the vlen type, with a float base type. */
   if (nc_def_vlen(ncid, "temp_vlen", NC_FLOAT, &temp_typeid)) ERR;

   /* Create the compound type to hold a sea sounding. */
   if (nc_def_compound(ncid, sizeof(struct sea_sounding),
		       "sea_sounding", &sounding_typeid)) ERR;
   if (nc_insert_compound(ncid, sounding_typeid, "sounding_no",
			  NC_COMPOUND_OFFSET(struct sea_sounding, sounding_no),
			  NC_INT)) ERR;
   if (nc_insert_compound(ncid, sounding_typeid, "temp_vl",
			  NC_COMPOUND_OFFSET(struct sea_sounding, temp_vl),
			  temp_typeid)) ERR;

   /* Define a dimension, and a 1D var of sea sounding compound type. */
   if (nc_def_dim(ncid, DIM_NAME, DIM_LEN, &dimid)) ERR;
   if (nc_def_var(ncid, "fun_soundings", sounding_typeid, 1,
		  &dimid, &varid)) ERR;

   /* Write our array of phone data to the file, all at once. */
   if (nc_put_var(ncid, varid, data)) ERR;

   /* We're done, yipee! */
   if (nc_close(ncid)) ERR;

   SUMMARIZE_ERR;

   /* Free the memory the phony data are using. */
    for (i = 0; i < DIM_LEN; i++)
       free(data[i].temp_vl.p);

   /* Print out our number of errors, if any, and exit badly. */
   if (total_err)
   {
      printf("%d errors detected! Sorry!\n", total_err);
      return 2;
   }

   printf("*** Tests successful!\n");
   return 0;
}