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;
}
|