ncdf4a13/libsrc4/tst_unlim_vars.c File Reference

#include <netcdf.h>
#include <nc4internal.h>
#include <nc_tests.h>

Include dependency graph for tst_unlim_vars.c:

Go to the source code of this file.

Defines

#define FILE_NAME   "tst_unlim_vars.nc"
#define SFC_TEMP_NAME   "surface_temperature"
#define LAT_NAME   "lat"
#define LAT_LEN   2
#define LON_NAME   "lon"
#define LON_LEN   3
#define TIME_NAME   "time"
#define NUM_TIMESTEPS   4
#define NDIMS   3

Functions

int main (int argc, char **argv)


Define Documentation

#define FILE_NAME   "tst_unlim_vars.nc"
 

Definition at line 14 of file tst_unlim_vars.c.

#define LAT_LEN   2
 

Definition at line 17 of file tst_unlim_vars.c.

#define LAT_NAME   "lat"
 

Definition at line 16 of file tst_unlim_vars.c.

#define LON_LEN   3
 

Definition at line 19 of file tst_unlim_vars.c.

#define LON_NAME   "lon"
 

Definition at line 18 of file tst_unlim_vars.c.

#define NDIMS   3
 

Definition at line 22 of file tst_unlim_vars.c.

#define NUM_TIMESTEPS   4
 

Definition at line 21 of file tst_unlim_vars.c.

Referenced by main().

#define SFC_TEMP_NAME   "surface_temperature"
 

Definition at line 15 of file tst_unlim_vars.c.

Referenced by main().

#define TIME_NAME   "time"
 

Definition at line 20 of file tst_unlim_vars.c.


Function Documentation

int main int  argc,
char **  argv
 

Definition at line 25 of file tst_unlim_vars.c.

References ERR, FILE_NAME, FINAL_RESULTS, LAT_LEN, LAT_NAME, LON_LEN, LON_NAME, nc_close, nc_create, nc_def_dim, nc_def_var, NC_FLOAT, nc_get_vara_float, nc_inq, nc_inq_dim, nc_inq_var, NC_MAX_NAME, NC_NETCDF4, nc_open, nc_put_vara_float, NC_UNLIMITED, NC_WRITE, ncid, NDIMS, NUM_TIMESTEPS, SFC_TEMP_NAME, SUMMARIZE_ERR, and TIME_NAME.

00026 {
00027    int ncid, sfc_tempid;
00028    float data_out[NUM_TIMESTEPS][LAT_LEN][LON_LEN], data_in[NUM_TIMESTEPS][LAT_LEN][LON_LEN];
00029    int lat, lon, time;
00030    int dimids[NDIMS];
00031    nc_type xtype_in;
00032    int ndims_in, dimids_in[10], natts_in, nvars_in, unlimdimid_in;
00033    size_t len_in;
00034    char name_in[NC_MAX_NAME+1];
00035    size_t start[NDIMS], count[NDIMS];
00036    int d;
00037 
00038    /* Set up phoney data. */
00039    for (time = 0; time < NUM_TIMESTEPS; time++)
00040       for (lat = 0; lat < LAT_LEN; lat++)
00041          for (lon = 0; lon < LON_LEN; lon++)
00042             data_out[time][lat][lon] = 25.5 + lat + lon + time;
00043 
00044    /*nc_set_log_level(5);*/
00045 
00046    printf("\n*** Testing netcdf-4 variable with unlimited dimensions.\n");
00047    printf("*** Testing file with one var, one unlim dim...");
00048       
00049    /* Create a file with a 3D surface temp variable. */
00050    if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00051 
00052    /* Create three dims, one unlimited. */
00053    if (nc_def_dim(ncid, TIME_NAME, NC_UNLIMITED, &dimids[0])) ERR;
00054    if (nc_def_dim(ncid, LAT_NAME, LAT_LEN, &dimids[1])) ERR;
00055    if (nc_def_dim(ncid, LON_NAME, LON_LEN, &dimids[2])) ERR;
00056 
00057    /* Define a var. */
00058    for (d = 0; d < NDIMS; d++)
00059       dimids[d] = d;
00060    if (nc_def_var(ncid, SFC_TEMP_NAME, NC_FLOAT, NDIMS, dimids, &sfc_tempid)) ERR;
00061 
00062    /* Check some metadata. */
00063    if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00064    if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00065    if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in,
00066                   &natts_in)) ERR;
00067    if (strcmp(name_in, SFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
00068        ndims_in != 3 || natts_in != 0) ERR;
00069    for (d = 0; d < NDIMS; d++)
00070       if (dimids_in[d] != dimids[d]) ERR;
00071    if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00072    if (len_in != 0 || strcmp(name_in, TIME_NAME)) ERR;
00073    if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
00074    if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00075    if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
00076    if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00077 
00078    if (nc_close(ncid)) ERR;
00079 
00080    if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00081 
00082    /* Check metadata. */
00083    if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00084    if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00085    if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in,
00086                   &natts_in)) ERR;
00087    if (strcmp(name_in, SFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
00088        ndims_in != 3 || natts_in != 0) ERR;
00089    for (d = 0; d < NDIMS; d++)
00090       if (dimids_in[d] != dimids[d]) ERR;
00091    if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00092    if (len_in != 0 || strcmp(name_in, TIME_NAME)) ERR;
00093    if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
00094    if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00095    if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
00096    if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00097 
00098    if (nc_close(ncid)) ERR;
00099 
00100    if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00101 
00102    /* Check metadata. */
00103    if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00104    if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00105    if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in,
00106                   &natts_in)) ERR;
00107    if (strcmp(name_in, SFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
00108        ndims_in != 3 || natts_in != 0) ERR;
00109    for (d = 0; d < NDIMS; d++)
00110       if (dimids_in[d] != dimids[d]) ERR;
00111    if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00112    if (len_in != 0 || strcmp(name_in, TIME_NAME)) ERR;
00113    if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
00114    if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00115    if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
00116    if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00117 
00118    /* Write some data to the var.*/
00119    if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00120    for (d = 0; d < NDIMS; d++)
00121       start[d] = 0;
00122    count[0] = NUM_TIMESTEPS;
00123    count[1] = LAT_LEN;
00124    count[2] = LON_LEN;
00125    if (nc_put_vara_float(ncid, 0, start, count, (float *)data_out)) ERR;
00126 
00127    /* Check metadata. */
00128    if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00129    if (ndims_in != 3 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00130    if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in,
00131                   &natts_in)) ERR;
00132    if (strcmp(name_in, SFC_TEMP_NAME) || xtype_in != NC_FLOAT ||
00133        ndims_in != 3 || natts_in != 0) ERR;
00134    for (d = 0; d < NDIMS; d++)
00135       if (dimids_in[d] != dimids[d]) ERR;
00136    if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00137    if (len_in != NUM_TIMESTEPS || strcmp(name_in, TIME_NAME)) ERR;
00138    if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
00139    if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00140    if (nc_inq_dim(ncid, 2, name_in, &len_in)) ERR;
00141    if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00142 
00143    if (nc_close(ncid)) ERR;
00144 
00145    if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00146 
00147    /* Check data. */
00148    if (nc_get_vara_float(ncid, 0, start, count, (float *)data_in)) ERR;
00149    for (time = 0; time < NUM_TIMESTEPS; time++)
00150       for (lat = 0; lat < LAT_LEN; lat++)
00151          for (lon = 0; lon < LON_LEN; lon++)
00152             if (data_in[time][lat][lon] != data_out[time][lat][lon]) ERR;
00153 
00154    if (nc_close(ncid)) ERR;
00155    SUMMARIZE_ERR;
00156 
00157    FINAL_RESULTS;
00158 }


Generated on Thu Mar 16 18:11:53 2006 for nco by  doxygen 1.4.4