ncdf4a13/libsrc4/tst_dims.c File Reference

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

Include dependency graph for tst_dims.c:

Go to the source code of this file.

Defines

#define FILE_NAME   "tst_dims.nc"
#define LAT_NAME   "lat"
#define LON_NAME   "lon"
#define LEVEL_NAME   "level"
#define TIME_NAME   "time"
#define DIM5_NAME   "twilight_zone"
#define DIM_NAME   "dim"
#define LAT_LEN   1
#define LON_LEN   2
#define LEVEL_LEN   3
#define TIME_LEN   4
#define DIM5_LEN   5
#define LAT_DIMID   0
#define LON_DIMID   1
#define LEVEL_DIMID   2
#define TIME_DIMID   3
#define LAT_VARID   0
#define LON_VARID   1
#define PRES_VARID   2
#define ELEV_VARID   3
#define HP_VARID   4
#define PRES_NAME   "pressure"
#define ELEV_NAME   "Elevation"
#define HP_NAME   "Number_of_Harry_Potter_Books"
#define BUBBA   "Bubba"
#define A_NAME   "a"
#define B_NAME   "b"
#define A_LEN   50
#define B_LEN   92
#define A_DIMID   1
#define B_DIMID   0

Functions

int main (int argc, char **argv)


Define Documentation

#define A_DIMID   1
 

Referenced by main().

#define A_LEN   50
 

Referenced by main().

#define A_NAME   "a"
 

Referenced by main().

#define B_DIMID   0
 

Referenced by main().

#define B_LEN   92
 

Referenced by main().

#define B_NAME   "b"
 

Referenced by main().

#define BUBBA   "Bubba"
 

Definition at line 37 of file tst_dims.c.

Referenced by main().

#define DIM5_LEN   5
 

Definition at line 24 of file tst_dims.c.

Referenced by main().

#define DIM5_NAME   "twilight_zone"
 

Definition at line 18 of file tst_dims.c.

Referenced by main().

#define DIM_NAME   "dim"
 

Definition at line 19 of file tst_dims.c.

Referenced by main().

#define ELEV_NAME   "Elevation"
 

Definition at line 35 of file tst_dims.c.

Referenced by main().

#define ELEV_VARID   3
 

Definition at line 32 of file tst_dims.c.

Referenced by main().

#define FILE_NAME   "tst_dims.nc"
 

Definition at line 13 of file tst_dims.c.

#define HP_NAME   "Number_of_Harry_Potter_Books"
 

Definition at line 36 of file tst_dims.c.

Referenced by main().

#define HP_VARID   4
 

Definition at line 33 of file tst_dims.c.

Referenced by main().

#define LAT_DIMID   0
 

Definition at line 25 of file tst_dims.c.

Referenced by main().

#define LAT_LEN   1
 

Definition at line 20 of file tst_dims.c.

Referenced by main(), test_system_assign(), and test_transform_assign().

#define LAT_NAME   "lat"
 

Definition at line 14 of file tst_dims.c.

Referenced by main().

#define LAT_VARID   0
 

Definition at line 29 of file tst_dims.c.

Referenced by main().

#define LEVEL_DIMID   2
 

Definition at line 27 of file tst_dims.c.

Referenced by main().

#define LEVEL_LEN   3
 

Definition at line 22 of file tst_dims.c.

Referenced by main(), test_system_assign(), and test_transform_assign().

#define LEVEL_NAME   "level"
 

Definition at line 16 of file tst_dims.c.

Referenced by main().

#define LON_DIMID   1
 

Definition at line 26 of file tst_dims.c.

Referenced by main().

#define LON_LEN   2
 

Definition at line 21 of file tst_dims.c.

Referenced by main(), test_system_assign(), and test_transform_assign().

#define LON_NAME   "lon"
 

Definition at line 15 of file tst_dims.c.

Referenced by main().

#define LON_VARID   1
 

Definition at line 30 of file tst_dims.c.

Referenced by main().

#define PRES_NAME   "pressure"
 

Definition at line 34 of file tst_dims.c.

Referenced by main().

#define PRES_VARID   2
 

Definition at line 31 of file tst_dims.c.

Referenced by main().

#define TIME_DIMID   3
 

Definition at line 28 of file tst_dims.c.

Referenced by main().

#define TIME_LEN   4
 

Definition at line 23 of file tst_dims.c.

Referenced by main().

#define TIME_NAME   "time"
 

Definition at line 17 of file tst_dims.c.

Referenced by main().


Function Documentation

int main int  argc,
char **  argv
 

Definition at line 40 of file tst_dims.c.

References A_DIMID, A_LEN, A_NAME, B_DIMID, B_LEN, B_NAME, BUBBA, DIM5_LEN, DIM5_NAME, ELEV_NAME, ELEV_VARID, ERR, FILE_NAME, FINAL_RESULTS, HP_NAME, HP_VARID, LAT_DIMID, LAT_LEN, LAT_NAME, LAT_VARID, LEVEL_DIMID, LEVEL_LEN, LEVEL_NAME, LON_DIMID, LON_LEN, LON_NAME, LON_VARID, natts, nc_close, nc_create, nc_def_dim, nc_def_var, NC_DOUBLE, NC_EINVALCOORDS, NC_FLOAT, nc_get_var(), nc_get_var1_ushort(), nc_get_var_double, nc_get_var_float, nc_get_var_ulonglong(), nc_get_var_ushort(), nc_inq, nc_inq_dim, nc_inq_dimid, nc_inq_dimids(), nc_inq_dimlen, nc_inq_dimname, nc_inq_unlimdim, nc_inq_unlimdims(), nc_inq_var, nc_inq_varid, nc_inq_varname, NC_INT64, NC_MAX_NAME, NC_NETCDF4, NC_NOWRITE, nc_open, nc_put_var_double, nc_put_var_float, nc_put_var_ulonglong(), nc_put_var_ushort(), nc_put_vara, nc_put_vara_ulonglong(), nc_rename_dim, NC_UINT64, NC_UNLIMITED, NC_USHORT, NC_WRITE, ncid, ndims, nvars, PRES_NAME, PRES_VARID, SUMMARIZE_ERR, TIME_DIMID, TIME_LEN, and TIME_NAME.

00041 {
00042    int ncid, dimid, dimids[5];
00043    int lat_dimid, lat_varid, lon_dimid, lon_varid, pres_varid;
00044    int level_varid, dim5_varid, hp_varid;
00045    int natts_in, ndims_in, dimids_in[5];
00046    nc_type xtype_in;
00047    size_t len_in;
00048    char name_in[NC_MAX_NAME + 1];
00049    float lat[LAT_LEN], lon[LON_LEN];
00050    float lat_in[LAT_LEN], lon_in[LON_LEN];
00051    double pres[LAT_LEN][LON_LEN], pres_in[LAT_LEN][LON_LEN];
00052    int unlimdimid_in;
00053    size_t start[5], count[5], index[5];
00054    int varid_in, nvars_in, nunlimdims_in;
00055    int i, j;
00056    unsigned long long uint64_data[1] = {42};
00057 
00058    /* Lats and lons suitable for some South American data. */
00059    for (lat[0] = 40.0, i = 1; i < LAT_LEN; i++)
00060       lat[i] = lat[i - 1] + .5;
00061    for (lon[0] = 20.0, i = 1; i < LON_LEN; i++)
00062       lon[i] = lon[i - 1] + 1.5;
00063 
00064    /* Some phoney 2D pressure data. */
00065    for (i = 0; i < LAT_LEN; i++)
00066       for (j = 0; j < LON_LEN; j++)
00067          pres[i][j] = 1013.1 + j;
00068    
00069    printf("\n*** Testing netcdf-4 dimensions.\n");
00070 
00071    /*nc_set_log_level(3);*/
00072 
00073    printf("*** Testing file with just one dimension...");
00074    {
00075       /* Create a file with one dim and nothing else. */
00076       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00077       if (nc_def_dim(ncid, LAT_NAME, LAT_LEN, &dimid)) ERR;
00078 
00079       /* Check out what we've got. */
00080       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00081       if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00082       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00083       if (ndims_in != 1) ERR;
00084       if (nc_inq_dimid(ncid, LAT_NAME, &varid_in)) ERR;
00085       if (varid_in != 0) ERR;
00086       if (nc_inq_dimname(ncid, 0, name_in)) ERR;
00087       if (strcmp(name_in, LAT_NAME)) ERR;
00088       if (nc_inq_dimlen(ncid, 0, &len_in)) ERR;
00089       if (len_in != LAT_LEN) ERR;
00090       if (nc_close(ncid)) ERR;
00091 
00092       /* Reopen and check it out again. */
00093       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00094       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00095       if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00096       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00097       if (ndims_in != 1) ERR;
00098       if (nc_inq_dimid(ncid, LAT_NAME, &varid_in)) ERR;
00099       if (varid_in != 0) ERR;
00100       if (nc_inq_dimname(ncid, 0, name_in)) ERR;
00101       if (strcmp(name_in, LAT_NAME)) ERR;
00102       if (nc_inq_dimlen(ncid, 0, &len_in)) ERR;
00103       if (len_in != LAT_LEN) ERR;
00104       if (nc_close(ncid)) ERR;
00105    }
00106 
00107    SUMMARIZE_ERR;
00108    printf("*** Testing renaming of one dimension...");
00109    {
00110       /* Reopen the file with one dim, and change the name of the dim. */
00111       if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00112       if (nc_rename_dim(ncid, 0, BUBBA)) ERR;
00113 
00114       /* Check out what we've got. */
00115       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00116       if (len_in != LAT_LEN || strcmp(name_in, BUBBA)) ERR;
00117       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00118       if (ndims_in != 1) ERR;
00119       if (dimids_in[0] != 0) ERR;
00120       if (nc_inq_dimid(ncid, BUBBA, &varid_in)) ERR;
00121       if (varid_in != 0) ERR;
00122       if (nc_inq_dimname(ncid, 0, name_in)) ERR;
00123       if (strcmp(name_in, BUBBA)) ERR;
00124       if (nc_inq_dimlen(ncid, 0, &len_in)) ERR;
00125       if (len_in != LAT_LEN) ERR;
00126       if (nc_close(ncid)) ERR;
00127 
00128       /* Reopen and check out what we've got again. */
00129       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00130       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00131       if (len_in != LAT_LEN || strcmp(name_in, BUBBA)) ERR;
00132       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00133       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00134       if (nc_inq_dimid(ncid, BUBBA, &varid_in)) ERR;
00135       if (varid_in != 0) ERR;
00136       if (nc_inq_dimname(ncid, 0, name_in)) ERR;
00137       if (strcmp(name_in, BUBBA)) ERR;
00138       if (nc_inq_dimlen(ncid, 0, &len_in)) ERR;
00139       if (len_in != LAT_LEN) ERR;
00140       if (nc_close(ncid)) ERR;
00141    }
00142 
00143    SUMMARIZE_ERR;
00144    printf("*** Testing file with just one unlimited dimension...");
00145    {
00146       /* Create a file with one unlimied dim and nothing else. */
00147       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00148       if (nc_def_dim(ncid, LEVEL_NAME, NC_UNLIMITED, &dimid)) ERR;
00149 
00150       /* Check it out before the enddef. */
00151       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00152       if (len_in != NC_UNLIMITED || strcmp(name_in, LEVEL_NAME)) ERR;
00153       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00154       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00155       if (nc_inq_unlimdim(ncid, &unlimdimid_in)) ERR;
00156       if (unlimdimid_in != 0) ERR;
00157       if (nc_inq_unlimdims(ncid, &nunlimdims_in, &unlimdimid_in)) ERR;
00158       if (nunlimdims_in != 1 || unlimdimid_in != 0) ERR;
00159       
00160       /* Automatically enddef and close. */
00161       if (nc_close(ncid)) ERR;
00162 
00163       /* Reopen and check it out. */
00164       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00165       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00166       if (len_in != NC_UNLIMITED || strcmp(name_in, LEVEL_NAME)) ERR;
00167       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00168       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00169       if (nc_inq_unlimdim(ncid, &unlimdimid_in)) ERR;
00170       if (unlimdimid_in != 0) ERR;
00171       if (nc_inq_unlimdims(ncid, &nunlimdims_in, &unlimdimid_in)) ERR;
00172       if (nunlimdims_in != 1 || unlimdimid_in != 0) ERR;
00173       if (unlimdimid_in != 0) ERR;
00174       if (nc_close(ncid)) ERR;
00175    }
00176 
00177    SUMMARIZE_ERR;
00178    printf("*** Testing ordering of dimensions...");
00179    {
00180 #define A_NAME "a"
00181 #define B_NAME "b"
00182 #define A_LEN 50
00183 #define B_LEN 92
00184 #define A_DIMID 1
00185 #define B_DIMID 0      
00186 
00187       int dimid_a, dimid_b;
00188 
00189       /* Create a file with two dims and nothing else. */
00190       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00191       if (nc_def_dim(ncid, B_NAME, B_LEN, &dimid_b)) ERR;
00192       if (nc_def_dim(ncid, A_NAME, A_LEN, &dimid_a)) ERR;
00193       if (dimid_b != B_DIMID || dimid_a != A_DIMID) ERR;
00194 
00195       /* Check out what we've got. */
00196       if (nc_inq_dim(ncid, dimid_a, name_in, &len_in)) ERR;
00197       if (len_in != A_LEN || strcmp(name_in, A_NAME)) ERR;
00198       if (nc_inq_dim(ncid, dimid_b, name_in, &len_in)) ERR;
00199       if (len_in != B_LEN || strcmp(name_in, B_NAME)) ERR;
00200       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00201       if (ndims_in != 2 || dimids_in[0] != 0 || dimids_in[1] != 1) ERR;
00202 
00203       if (nc_close(ncid)) ERR;
00204 
00205       /* Reopen and check it out again. */
00206       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00207 
00208       if (nc_inq_dim(ncid, B_DIMID, name_in, &len_in)) ERR;
00209       if (len_in != B_LEN || strcmp(name_in, B_NAME)) ERR;
00210       if (nc_inq_dim(ncid, A_DIMID, name_in, &len_in)) ERR;
00211       if (len_in != A_LEN || strcmp(name_in, A_NAME)) ERR;
00212       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00213       if (ndims_in != 2 || dimids_in[0] != 0 || 
00214           dimids_in[1] != 1) ERR;
00215       if (nc_close(ncid)) ERR;
00216    }
00217 
00218    SUMMARIZE_ERR;
00219    printf("*** Testing file with just one unlimited dimension and one var...");
00220    {
00221       /* Create a file with one unlimied dim and nothing else. */
00222       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00223       if (nc_def_dim(ncid, LEVEL_NAME, NC_UNLIMITED, &dimid)) ERR;
00224       if (dimid != 0) ERR;
00225       dimids[0] = dimid;
00226       if (nc_def_var(ncid, LEVEL_NAME, NC_UINT64, 1, dimids, 
00227                      &level_varid)) ERR;
00228       if (level_varid != 0) ERR;
00229 
00230       /* Check it out before enddef. */
00231       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00232       if (len_in != 0 || strcmp(name_in, LEVEL_NAME)) ERR;
00233       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00234       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00235       if (nc_inq_unlimdim(ncid, &unlimdimid_in)) ERR;
00236       if (unlimdimid_in != 0) ERR;
00237       if (nc_inq_unlimdims(ncid, &nunlimdims_in, &unlimdimid_in)) ERR;
00238       if (nunlimdims_in != 1 || unlimdimid_in != 0) ERR;
00239       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00240       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00241       if (nc_inq_varid(ncid, LEVEL_NAME, &varid_in)) ERR;
00242       if (varid_in != 0) ERR;
00243       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00244       if (strcmp(name_in, LEVEL_NAME) || xtype_in != NC_UINT64 || ndims_in != 1 || 
00245           dimids_in[0] != 0 || natts_in != 0) ERR;
00246       if (nc_inq_varname(ncid, 0, name_in)) ERR;
00247       if (strcmp(name_in, LEVEL_NAME)) ERR;
00248 
00249       /* Now write one record of data to the var. */
00250       start[0] = 0;
00251       count[0] = 1;
00252       if (nc_put_vara_ulonglong(ncid, 0, start, count, uint64_data)) ERR;
00253 
00254       /* Check dimension informaiton again. Now the length of this
00255        * dimension should be one. */
00256       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00257       if (len_in != 1 || strcmp(name_in, LEVEL_NAME)) ERR;
00258       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00259       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00260       if (nc_inq_dimlen(ncid, 0, &len_in)) ERR;
00261       if (len_in != 1) ERR;
00262       if (nc_inq_unlimdim(ncid, &unlimdimid_in)) ERR;
00263       if (unlimdimid_in != 0) ERR;
00264       if (nc_inq_unlimdims(ncid, &nunlimdims_in, &unlimdimid_in)) ERR;
00265       if (nunlimdims_in != 1 || unlimdimid_in != 0) ERR;
00266       if (unlimdimid_in != 0) ERR;
00267       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00268       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00269       if (nc_inq_varid(ncid, LEVEL_NAME, &varid_in)) ERR;
00270       if (varid_in != 0) ERR;
00271       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00272       if (strcmp(name_in, LEVEL_NAME) || xtype_in != NC_UINT64 || ndims_in != 1 || 
00273           dimids_in[0] != 0 || natts_in != 0) ERR;
00274       if (nc_inq_varname(ncid, 0, name_in)) ERR;
00275       if (strcmp(name_in, LEVEL_NAME)) ERR;
00276 
00277       /* Close the file. */
00278       if (nc_close(ncid)) ERR;
00279 
00280       /* Check it out. */
00281       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00282       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00283       if (len_in != 1 || strcmp(name_in, LEVEL_NAME)) ERR;
00284       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00285       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00286       if (nc_inq_unlimdim(ncid, &unlimdimid_in)) ERR;
00287       if (unlimdimid_in != 0) ERR;
00288       if (nc_inq_unlimdims(ncid, &nunlimdims_in, &unlimdimid_in)) ERR;
00289       if (nunlimdims_in != 1 || unlimdimid_in != 0) ERR;
00290       if (unlimdimid_in != 0) ERR;
00291       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00292       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 || unlimdimid_in != 0) ERR;
00293       if (nc_inq_varid(ncid, LEVEL_NAME, &varid_in)) ERR;
00294       if (varid_in != 0) ERR;
00295       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00296       if (strcmp(name_in, LEVEL_NAME) || xtype_in != NC_UINT64 || ndims_in != 1 || 
00297           dimids_in[0] != 0 || natts_in != 0) ERR;
00298       if (nc_inq_varname(ncid, 0, name_in)) ERR;
00299       if (strcmp(name_in, LEVEL_NAME)) ERR;
00300       if (nc_close(ncid)) ERR;
00301    }
00302 
00303    SUMMARIZE_ERR;
00304    printf("*** Testing adding a coordinate var to file with dimension...");
00305    {
00306       /* Create a file with one dim and nothing else. */
00307       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00308       if (nc_def_dim(ncid, DIM5_NAME, DIM5_LEN, &dimid)) ERR;
00309 
00310       /* Check out what we've got. */
00311       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00312       if (ndims_in != 1 || nvars_in != 0 || natts_in != 0 ||
00313          unlimdimid_in != -1) ERR;
00314       if (nc_inq_dim(ncid, dimid, name_in, &len_in)) ERR;
00315       if (len_in != DIM5_LEN || strcmp(name_in, DIM5_NAME)) ERR;
00316       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00317       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00318 
00319       if (nc_close(ncid)) ERR;
00320 
00321       /* Reopen and check it out again. */
00322       if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00323       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00324       if (ndims_in != 1 || nvars_in != 0 || natts_in != 0 ||
00325          unlimdimid_in != -1) ERR;
00326       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00327       if (len_in != DIM5_LEN || strcmp(name_in, DIM5_NAME)) ERR;
00328       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00329       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00330 
00331       /* Add a coordinate var for this dimension. */
00332       dimids[0] = 0;
00333       if (nc_def_var(ncid, DIM5_NAME, NC_FLOAT, 1, dimids, &dim5_varid)) ERR;
00334 
00335       /* Check it out. */
00336       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00337       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 ||
00338          unlimdimid_in != -1) ERR;
00339       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00340       if (len_in != DIM5_LEN || strcmp(name_in, DIM5_NAME)) ERR;
00341       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00342       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00343       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00344       if (strcmp(name_in, DIM5_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00345           dimids_in[0] != 0 || natts_in != 0) ERR;
00346 
00347       if (nc_close(ncid)) ERR;
00348 
00349       /* Reopen and check it out again. */
00350       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00351       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00352       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 ||
00353          unlimdimid_in != -1) ERR;
00354       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00355       if (len_in != DIM5_LEN || strcmp(name_in, DIM5_NAME)) ERR;
00356       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00357       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00358       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00359       if (strcmp(name_in, DIM5_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00360           dimids_in[0] != 0 || natts_in != 0) ERR;
00361 
00362       if (nc_close(ncid)) ERR;
00363    }
00364 
00365    SUMMARIZE_ERR;
00366    printf("*** Testing adding a coordinate var to file with unlimited dimension...");
00367    {
00368       unsigned short data[2] = {42, 24}, data_in[2];
00369 
00370       /* Create a file with one dim and one var. This time make
00371        * it an unlimited dim. */
00372       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00373       if (nc_def_dim(ncid, DIM5_NAME, NC_UNLIMITED, &dimid)) ERR;
00374       if (dimid != 0) ERR;
00375       dimids[0] = dimid;
00376       if (nc_def_var(ncid, HP_NAME, NC_USHORT, 1, dimids, &hp_varid)) ERR;
00377       if (hp_varid != 0) ERR;
00378 
00379       /* Check out what we've got. */
00380       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00381       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 ||
00382          unlimdimid_in != 0) ERR;
00383       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00384       if (len_in != 0 || strcmp(name_in, DIM5_NAME)) ERR;
00385       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00386       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00387       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00388       if (strcmp(name_in, HP_NAME) || xtype_in != NC_USHORT || ndims_in != 1 || 
00389           dimids_in[0] != 0 || natts_in != 0) ERR;
00390 
00391       /* Add a record to the HP variable. */
00392       start[0] = 0;
00393       count[0] = 1;
00394       if (nc_put_vara(ncid, hp_varid, start, count, data)) ERR;
00395 
00396       /* Check to ensure dimension grew. */
00397       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00398       if (len_in != 1 || strcmp(name_in, DIM5_NAME)) ERR;
00399 
00400       /* Reread the value just written. */
00401       index[0] = 0;
00402       if (nc_get_var1_ushort(ncid, hp_varid, index, data_in)) ERR;
00403       if (data_in[0] != data[0]) ERR;
00404 
00405       if (nc_close(ncid)) ERR;
00406 
00407       /* Reopen and check it out again. */
00408       if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00409       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00410       if (ndims_in != 1 || nvars_in != 1 || natts_in != 0 ||
00411          unlimdimid_in != 0) ERR;
00412       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00413       if (len_in != 1 || strcmp(name_in, DIM5_NAME)) ERR;
00414       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00415       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00416 
00417       /* Add a coordinate var for this dimension. */
00418       dimids[0] = 0;
00419       if (nc_def_var(ncid, DIM5_NAME, NC_FLOAT, 1, dimids, &dim5_varid)) ERR;
00420 
00421       /* Check it out. */
00422       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00423       if (ndims_in != 1 || nvars_in != 2 || natts_in != 0 ||
00424          unlimdimid_in != 0) ERR;
00425       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00426       if (len_in != 1 || strcmp(name_in, DIM5_NAME)) ERR;
00427       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00428       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00429       if (nc_inq_var(ncid, dim5_varid, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00430       if (strcmp(name_in, DIM5_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00431           dimids_in[0] != 0 || natts_in != 0) ERR;
00432 
00433       if (nc_close(ncid)) ERR;
00434 
00435       /* Reopen and check it out again. */
00436       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00437       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid_in)) ERR;
00438       if (ndims_in != 1 || nvars_in != 2 || natts_in != 0 ||
00439          unlimdimid_in != 0) ERR;
00440       if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
00441       if (len_in != 1 || strcmp(name_in, DIM5_NAME)) ERR;
00442       if (nc_inq_dimids(ncid, &ndims_in, dimids_in)) ERR;
00443       if (ndims_in != 1 || dimids_in[0] != 0) ERR;
00444       if (nc_inq_var(ncid, dim5_varid, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR;
00445       if (strcmp(name_in, DIM5_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00446           dimids_in[0] != 0 || natts_in != 0) ERR;
00447 
00448       if (nc_close(ncid)) ERR;
00449    }
00450 
00451    SUMMARIZE_ERR;
00452    printf("*** Creating file with 1 data var, 2 dims, and 2 coord. vars...");
00453 
00454    {
00455       /* Create a file. */
00456       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00457 
00458       /* Define lat and lon dimensions, with associated variables. */
00459       if (nc_def_dim(ncid, LAT_NAME, LAT_LEN, &lat_dimid)) ERR;
00460       dimids[0] = lat_dimid;
00461       if (nc_def_var(ncid, LAT_NAME, NC_FLOAT, 1, dimids, &lat_varid)) ERR;
00462       if (nc_def_dim(ncid, LON_NAME, LON_LEN, &lon_dimid)) ERR;
00463       dimids[0] = lon_dimid;
00464       if (nc_def_var(ncid, LON_NAME, NC_FLOAT, 1, dimids, &lon_varid)) ERR;
00465 
00466       /* Define a 2D variable called pressure, with NC_DOUBLE on a lat
00467        * lon grid. */
00468       dimids[0] = lat_dimid;
00469       dimids[1] = lon_dimid;
00470       if (nc_def_var(ncid, PRES_NAME, NC_DOUBLE, 2, dimids, &pres_varid)) ERR;
00471 
00472       /* Check our dimensions. */
00473       if (nc_inq_dim(ncid, lat_dimid, name_in, &len_in)) ERR;
00474       if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00475       if (nc_inq_dim(ncid, lon_dimid, name_in, &len_in)) ERR;
00476       if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00477       if (nc_inq_var(ncid, lat_varid, name_in, &xtype_in, &ndims_in, 
00478                      dimids_in, &natts_in)) ERR;
00479       if (strcmp(name_in, LAT_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00480           dimids_in[0] != lat_dimid || natts_in != 0) ERR;
00481       if (nc_inq_var(ncid, lon_varid, name_in, &xtype_in, &ndims_in, 
00482                      dimids_in, &natts_in)) ERR;
00483       if (strcmp(name_in, LON_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00484           dimids_in[0] != lon_dimid || natts_in != 0) ERR;
00485 
00486       /* Check our data variable. */
00487       if (nc_inq_var(ncid, pres_varid, name_in, &xtype_in, &ndims_in, 
00488                      dimids_in, &natts_in)) ERR;
00489       if (strcmp(name_in, PRES_NAME) || xtype_in != NC_DOUBLE || ndims_in != 2 || 
00490           dimids_in[0] != lat_dimid || dimids_in[1] != lon_dimid || natts_in != 0) ERR;
00491       
00492       /* Write our latitude and longitude values. This writes all
00493        * metadata to disk too. */
00494       if (nc_put_var_float(ncid, lat_varid, lat)) ERR;
00495       if (nc_put_var_float(ncid, lon_varid, lon)) ERR;
00496 
00497       /* Write our 2D pressure values. */
00498       if (nc_put_var_double(ncid, pres_varid, (double *)pres)) ERR;
00499 
00500       /* Check our latitude and longitude values. */
00501       if (nc_get_var(ncid, lat_varid, lat_in)) ERR;
00502       for (i = 0; i < LAT_LEN; i++)
00503          if (lat[i] != lat_in[i]) ERR;
00504       if (nc_get_var_float(ncid, lon_varid, lon_in)) ERR;
00505       for (i = 0; i < LON_LEN; i++)
00506          if (lon[i] != lon_in[i]) ERR;
00507 
00508       /* Check our pressure values. */
00509       if (nc_get_var_double(ncid, pres_varid, (double *)pres_in)) ERR;
00510       for (i = 0; i < LAT_LEN; i++)
00511          for (j = 0; j < LON_LEN; j++)
00512             if (pres[i][j] != pres_in[i][j]) ERR;
00513 
00514       /* Close the file. */
00515       if (nc_close(ncid)) ERR;
00516    }
00517 
00518    SUMMARIZE_ERR;
00519    printf("*** Checking file with 1 data var, 2 dims, and 2 coord. vars...");
00520 
00521    {
00522       /* Reopen the file and check it out again. */
00523       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00524 
00525       /* Check our dimensions. */
00526       if (nc_inq_dim(ncid, lat_dimid, name_in, &len_in)) ERR;
00527       if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00528       if (nc_inq_dim(ncid, lon_dimid, name_in, &len_in)) ERR;
00529       if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00530       if (nc_inq_var(ncid, lat_varid, name_in, &xtype_in, &ndims_in, 
00531                      dimids_in, &natts_in)) ERR;
00532       if (strcmp(name_in, LAT_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00533           dimids_in[0] != lat_dimid || natts_in != 0) ERR;
00534       if (nc_inq_var(ncid, lon_varid, name_in, &xtype_in, &ndims_in, 
00535                      dimids_in, &natts_in)) ERR;
00536       if (strcmp(name_in, LON_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00537           dimids_in[0] != lon_dimid || natts_in != 0) ERR;
00538 
00539       /* Check our data variable. */
00540       if (nc_inq_var(ncid, pres_varid, name_in, &xtype_in, &ndims_in, 
00541                      dimids_in, &natts_in)) ERR;
00542       if (strcmp(name_in, PRES_NAME) || xtype_in != NC_DOUBLE || ndims_in != 2 || 
00543           dimids_in[0] != lat_dimid || dimids_in[1] != lon_dimid || natts_in != 0) ERR;
00544       
00545       /* Check our latitude and longitude values. */
00546       if (nc_get_var(ncid, lat_varid, lat_in)) ERR;
00547       for (i = 0; i < LAT_LEN; i++)
00548          if (lat[i] != lat_in[i]) ERR;
00549       if (nc_get_var_float(ncid, lon_varid, lon_in)) ERR;
00550       for (i = 0; i < LON_LEN; i++)
00551          if (lon[i] != lon_in[i]) ERR;
00552 
00553       /* Check our pressure values. */
00554       if (nc_get_var_double(ncid, pres_varid, (double *)pres_in)) ERR;
00555       for (i = 0; i < LAT_LEN; i++)
00556          for (j = 0; j < LON_LEN; j++)
00557             if (pres[i][j] != pres_in[i][j]) ERR;
00558 
00559       if (nc_close(ncid)) ERR;
00560    }
00561 
00562    SUMMARIZE_ERR;
00563    printf("*** Creating file with 3 data vars, 4 dims, and 2 coord. vars...");
00564 
00565    {
00566       int level_dimid, time_dimid, elev_varid;
00567       double pres[LAT_LEN][LON_LEN][LEVEL_LEN][TIME_LEN];
00568       double pres_in[LAT_LEN][LON_LEN][LEVEL_LEN][TIME_LEN];
00569       unsigned short hp[LAT_LEN][LON_LEN][TIME_LEN];
00570       unsigned short hp_in[LAT_LEN][LON_LEN][TIME_LEN];
00571       unsigned long long elev[LAT_LEN][LON_LEN], elev_in[LAT_LEN][LON_LEN];
00572       size_t start[4], count[4];
00573       int k, l;
00574 
00575       /* Some phoney 4D pressure data. */
00576       for (i = 0; i < LAT_LEN; i++)
00577          for (j = 0; j < LON_LEN; j++)
00578             for (k = 0; k < LEVEL_LEN; k++)
00579                for (l = 0; l <TIME_LEN; l++)
00580                   pres[i][j][k][l] = 1013.1 + j;
00581    
00582       /* Some phoney 3D hp data. */
00583       for (i = 0; i < LAT_LEN; i++)
00584          for (j = 0; j < LON_LEN; j++)
00585             for (l = 0; l <TIME_LEN; l++)
00586                hp[i][j][l] = 100 + l;
00587    
00588       /* Some phoney 2D elevaton data. */
00589       for (i = 0; i < LAT_LEN; i++)
00590          for (j = 0; j < LON_LEN; j++)
00591             elev[i][j] = 1010101022223333ULL  + i + j;
00592 
00593       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00594 
00595       /* Define lat, lon, level, and timestep dimensions, with
00596        * associated coordinate variables for lat and lon only. Time is
00597        * an unlimited dimension. */
00598       if (nc_def_dim(ncid, LAT_NAME, LAT_LEN, &lat_dimid)) ERR;
00599       if (lat_dimid != LAT_DIMID) ERR;
00600       dimids[0] = lat_dimid;
00601       if (nc_def_var(ncid, LAT_NAME, NC_FLOAT, 1, dimids, &lat_varid)) ERR;
00602       if (lat_varid != LAT_VARID) ERR;
00603       if (nc_def_dim(ncid, LON_NAME, LON_LEN, &lon_dimid)) ERR;
00604       if (lon_dimid != LON_DIMID) ERR;
00605       dimids[0] = lon_dimid;
00606       if (nc_def_var(ncid, LON_NAME, NC_FLOAT, 1, dimids, &lon_varid)) ERR;
00607       if (lon_varid != LON_VARID) ERR;
00608       if (nc_def_dim(ncid, LEVEL_NAME, LEVEL_LEN, &level_dimid)) ERR;
00609       if (level_dimid != LEVEL_DIMID) ERR;
00610       if (nc_def_dim(ncid, TIME_NAME, NC_UNLIMITED, &time_dimid)) ERR;
00611       if (time_dimid != TIME_DIMID) ERR;
00612 
00613       /* Define a 4D NC_DOUBLE variable called pressure. */
00614       dimids[0] = lat_dimid;
00615       dimids[1] = lon_dimid;
00616       dimids[2] = level_dimid;
00617       dimids[3] = time_dimid;
00618       if (nc_def_var(ncid, PRES_NAME, NC_DOUBLE, 4, dimids, &pres_varid)) ERR;
00619       if (pres_varid != PRES_VARID) ERR;
00620 
00621       /* Define a 2D variable for surface elevation. Use NC_INT64
00622        * because our units for this is Angstroms from Earth's
00623        * Center. */
00624       if (nc_def_var(ncid, ELEV_NAME, NC_INT64, 2, dimids, &elev_varid)) ERR;
00625       if (elev_varid != ELEV_VARID) ERR;
00626       
00627       /* Define a 3D NC_USHORT variable to store the number of Harry
00628        * Potter books in this grid square at this time (ignore HP
00629        * books in airplanes, dirigibles, hot air balloons, space
00630        * capsules, hang-gliders, parachutes, and flying on brooms). */
00631       dimids[2] = time_dimid;
00632       if (nc_def_var(ncid, HP_NAME, NC_USHORT, 3, dimids, &hp_varid)) ERR;
00633       if (hp_varid != HP_VARID) ERR;
00634 
00635       /* Did all our stuff make it into the internal metadata model
00636        * intact? */
00637       /* Check our dimensions. */
00638       if (nc_inq_dim(ncid, LAT_DIMID, name_in, &len_in)) ERR;
00639       if (len_in != LAT_LEN || strcmp(name_in, LAT_NAME)) ERR;
00640       if (nc_inq_dim(ncid, LON_DIMID, name_in, &len_in)) ERR;
00641       if (len_in != LON_LEN || strcmp(name_in, LON_NAME)) ERR;
00642       if (nc_inq_dim(ncid, LEVEL_DIMID, name_in, &len_in)) ERR;
00643       if (len_in != LEVEL_LEN || strcmp(name_in, LEVEL_NAME)) ERR;
00644       if (nc_inq_dim(ncid, TIME_DIMID, name_in, &len_in)) ERR;
00645       if (len_in != 0 || strcmp(name_in, TIME_NAME)) ERR;
00646 
00647       /* Check our coordinate variables. */
00648       if (nc_inq_var(ncid, LAT_VARID, name_in, &xtype_in, &ndims_in, 
00649                      dimids_in, &natts_in)) ERR;
00650       if (strcmp(name_in, LAT_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00651           dimids_in[0] != LAT_DIMID || natts_in != 0) ERR;
00652       if (nc_inq_var(ncid, LON_VARID, name_in, &xtype_in, &ndims_in, 
00653                      dimids_in, &natts_in)) ERR;
00654       if (strcmp(name_in, LON_NAME) || xtype_in != NC_FLOAT || ndims_in != 1 || 
00655           dimids_in[0] != LON_DIMID || natts_in != 0) ERR;
00656 
00657       /* Check our data variables. */
00658       if (nc_inq_var(ncid, PRES_VARID, name_in, &xtype_in, &ndims_in, 
00659                      dimids_in, &natts_in)) ERR;
00660       if (strcmp(name_in, PRES_NAME) || xtype_in != NC_DOUBLE || ndims_in != 4 || 
00661           dimids_in[0] != LAT_DIMID || dimids_in[1] != LON_DIMID || 
00662           dimids_in[2] != LEVEL_DIMID || dimids_in[3] != TIME_DIMID || 
00663           natts_in != 0) ERR;
00664       if (nc_inq_var(ncid, ELEV_VARID, name_in, &xtype_in, &ndims_in, 
00665                      dimids_in, &natts_in)) ERR;
00666       if (strcmp(name_in, ELEV_NAME) || xtype_in != NC_INT64 || ndims_in != 2 || 
00667           dimids_in[0] != LAT_DIMID || dimids_in[1] != LON_DIMID || 
00668           natts_in != 0) ERR;
00669       if (nc_inq_var(ncid, HP_VARID, name_in, &xtype_in, &ndims_in, 
00670                      dimids_in, &natts_in)) ERR;
00671       if (strcmp(name_in, HP_NAME) || xtype_in != NC_USHORT || ndims_in != 3 || 
00672           dimids_in[0] != LAT_DIMID || dimids_in[1] != LON_DIMID || 
00673           dimids_in[2] != TIME_DIMID || natts_in != 0) ERR;
00674       
00675       /* Write our latitude and longitude values. This writes all
00676        * metadata to disk too. */
00677       if (nc_put_var_float(ncid, lat_varid, lat)) ERR;
00678       if (nc_put_var_float(ncid, lon_varid, lon)) ERR;
00679 
00680       /* Write our 4D pressure, elevation, and hp data. But this
00681        * should do nothing for pressure and hp, because these are
00682        * record vars, and nc_put_var_* doesn't do anything to record
00683        * vars, because it doesn't know how big the var is supposed to
00684        * be. */
00685       if (nc_put_var_double(ncid, pres_varid, (double *)pres)) ERR;
00686       if (nc_put_var_ulonglong(ncid, elev_varid, (unsigned long long *)elev)) ERR;
00687       if (nc_put_var_ushort(ncid, hp_varid, (unsigned short *)hp)) ERR;
00688 
00689       /* Check our latitude and longitude values. */
00690       if (nc_get_var(ncid, lat_varid, lat_in)) ERR;
00691       for (i = 0; i < LAT_LEN; i++)
00692          if (lat[i] != lat_in[i]) ERR;
00693       if (nc_get_var_float(ncid, lon_varid, lon_in)) ERR;
00694       for (i = 0; i < LON_LEN; i++)
00695          if (lon[i] != lon_in[i]) ERR;
00696 
00697       /* Make sure our pressure and hp variables are still
00698        * empty. get_var calls will return no error, but fetch no
00699        * data. */
00700       if (nc_inq_var(ncid, pres_varid, name_in, &xtype_in, &ndims_in, 
00701                      dimids_in, &natts_in)) ERR;
00702       if (nc_inq_dim(ncid, dimids_in[3], NULL, &len_in)) ERR;
00703       if (len_in != 0) ERR;
00704       if (nc_get_var_double(ncid, pres_varid, (double *)pres_in) != 
00705           NC_EINVALCOORDS) ERR;
00706       if (nc_inq_var(ncid, hp_varid, NULL, NULL, &ndims_in, 
00707                      dimids_in, NULL)) ERR;
00708       if (nc_inq_dim(ncid, dimids_in[2], NULL, &len_in)) ERR;
00709       if (len_in != 0) ERR;
00710       if (nc_get_var_ushort(ncid, hp_varid, (unsigned short *)hp_in) != 
00711           NC_EINVALCOORDS) ERR;
00712 
00713       /* Now use nc_put_vara to really write pressure and hp
00714        * data. Write TIME_LEN (4) records of each. */
00715       start[0] = start[1] = start[2] = start[3] = 0;
00716       count[0] = LAT_LEN;
00717       count[1] = LON_LEN;
00718       count[2] = LEVEL_LEN;
00719       count[3] = TIME_LEN;
00720       if (nc_put_vara(ncid, pres_varid, start, count, 
00721                       (double *)pres)) ERR;
00722       count[2] = TIME_LEN;
00723       if (nc_put_vara(ncid, hp_varid, start, count, 
00724                       (double *)hp)) ERR;
00725 
00726       /* Check our pressure values. */
00727       if (nc_get_var_double(ncid, pres_varid, (double *)pres_in)) ERR;
00728       for (i = 0; i < LAT_LEN; i++)
00729          for (j = 0; j < LON_LEN; j++)
00730             for (k = 0; k < LEVEL_LEN; k++)
00731                for (l = 0; l <TIME_LEN; l++)
00732                   if (pres[i][j][k][l] != pres_in[i][j][k][l]) ERR;
00733 
00734       /* Check our elevation values. */
00735       if (nc_get_var_ulonglong(ncid, elev_varid, (unsigned long long *)elev_in)) ERR;
00736       for (i = 0; i < LAT_LEN; i++)
00737          for (j = 0; j < LON_LEN; j++)
00738             if (elev[i][j] != elev_in[i][j]) ERR;
00739 
00740       /* Check our hp values. */
00741       if (nc_get_var_ushort(ncid, hp_varid, (unsigned short *)hp_in)) ERR;
00742       for (i = 0; i < LAT_LEN; i++)
00743          for (j = 0; j < LON_LEN; j++)
00744             for (l = 0; l <TIME_LEN; l++)
00745                if (hp[i][j][l] != hp_in[i][j][l]) ERR;
00746 
00747       /* Close the file. */
00748       if (nc_close(ncid)) ERR;
00749    }
00750 
00751    SUMMARIZE_ERR;
00752    printf("*** Checking file with 3 data var, 4 dims, and 2 coord. vars...");
00753 
00754    {
00755       int nvars, ndims, natts, unlimdimid;
00756 
00757       /* Reopen the file and check it out again. At the moment, we
00758        * can't count on the varids and dimids being the same. */
00759       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00760       if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
00761       if (ndims != 4 || nvars != 5 || natts != 0) ERR;
00762       if (nc_close(ncid)) ERR;
00763    }
00764    SUMMARIZE_ERR;
00765 
00766    FINAL_RESULTS;
00767 }


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