ncdf4a13/libsrc4/tst_varms.c File Reference

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

Include dependency graph for tst_varms.c:

Go to the source code of this file.

Defines

#define FILE_NAME   "tst_varms.nc"
#define DIM1_NAME   "i"
#define DIM1_LEN   2
#define DIM2_NAME   "j"
#define DIM2_LEN   3
#define VAR_NAME   "Little_Jenny_Campground"
#define D0   4
#define D1   3
#define D2   2

Functions

int main (int argc, char **argv)


Define Documentation

#define D0   4
 

Referenced by main().

#define D1   3
 

Referenced by main().

#define D2   2
 

Referenced by main().

#define DIM1_LEN   2
 

Definition at line 26 of file tst_varms.c.

#define DIM1_NAME   "i"
 

Definition at line 25 of file tst_varms.c.

#define DIM2_LEN   3
 

Definition at line 28 of file tst_varms.c.

#define DIM2_NAME   "j"
 

Definition at line 27 of file tst_varms.c.

#define FILE_NAME   "tst_varms.nc"
 

Definition at line 24 of file tst_varms.c.

#define VAR_NAME   "Little_Jenny_Campground"
 

Definition at line 29 of file tst_varms.c.


Function Documentation

int main int  argc,
char **  argv
 

Definition at line 32 of file tst_varms.c.

References D0, D1, D2, DIM1_LEN, DIM1_NAME, DIM2_LEN, DIM2_NAME, ERR, FILE_NAME, FINAL_RESULTS, natts, NC_CLOBBER, nc_close, nc_create, nc_def_dim, nc_def_var, nc_enddef, NC_FLOAT, nc_get_var_float, nc_get_var_int, nc_get_varm_float, nc_get_varm_int, nc_inq, nc_inq_var, NC_INT, NC_MAX_NAME, NC_NETCDF4, nc_open, nc_put_var_float, nc_put_var_int, nc_put_vara_float, nc_put_varm_float, ncid, ndims, nvars, SUMMARIZE_ERR, and VAR_NAME.

00033 {
00034    int ncid, varid, dimids[2];
00035    int data[DIM1_LEN][DIM2_LEN], data_in[DIM1_LEN][DIM2_LEN];
00036    int ndims_in, dimids_in[10], natts_in;
00037    size_t start[2], count[2];
00038    ptrdiff_t stride[2], map[2];
00039    char name_in[NC_MAX_NAME+1];
00040    nc_type xtype_in;
00041    int nvars, natts, ndims, unlimdimid;
00042    int i, j, k = 0;
00043 
00044 
00045    printf("\n*** Testing netcdf-4 mapped variable functions.\n");
00046    {
00047       int data_2d[2][2], data_2d_in[2][2];
00048 
00049       printf("*** testing mapping with 2x2 variable...");
00050 
00051       /* Create phoney data. */
00052       for (i = 0; i < 2; i++)
00053          for (j = 0; j < 2; j++)
00054             data_2d[i][j] = k++;
00055       
00056       /* Create a file with one 2D variable of type int and write our
00057        * data. */
00058       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00059       if (nc_def_dim(ncid, "i", 2, &dimids[0])) ERR;
00060       if (nc_def_dim(ncid, "j", 2, &dimids[1])) ERR;
00061       if (nc_def_var(ncid, VAR_NAME, NC_INT, 2, dimids, &varid)) ERR;
00062       if (nc_enddef(ncid)) ERR;
00063       if (nc_put_var_int(ncid, varid, (int *)data_2d)) ERR;
00064       if (nc_close(ncid)) ERR;
00065       
00066       /* Open the file and check. */
00067       if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00068       if (nc_get_var_int(ncid, varid, (int *)data_2d_in)) ERR;   
00069       for (i = 0; i < 2; i++)
00070          for (j = 0; j < 2; j++)
00071             if (data_2d_in[i][j] != data_2d[i][j]) ERR;
00072 
00073       /* Get a transpose of the array. I have no idea how to figure
00074        * out the map array, but my first guess worked. */
00075       start[0] = start[1] = 0;
00076       count[0] = count[1] = 2;
00077       stride[0] = stride[1] = 1;
00078       map[0] = 1;
00079       map[1] = 2;
00080       if (nc_get_varm_int(ncid, varid, start, count, stride, map, 
00081                           (int *)data_2d_in)) ERR;   
00082       for (i = 0; i < 2; i++)
00083          for (j = 0; j < 2; j++)
00084             if (data_2d_in[j][i] != data_2d[i][j]) ERR;
00085 
00086       /* Now read the untransposed array. I still haven't much idea
00087        * what these numbers mean. */
00088       map[0] = 2;
00089       map[1] = 1;
00090       if (nc_get_varm_int(ncid, varid, start, count, stride, map, 
00091                           (int *)data_2d_in)) ERR;   
00092       for (i = 0; i < 2; i++)
00093          for (j = 0; j < 2; j++)
00094             if (data_2d_in[i][j] != data_2d[i][j]) ERR;
00095 
00096       if (nc_close(ncid)) ERR;
00097    }
00098 
00099    SUMMARIZE_ERR;
00100    printf("*** testing mapping with 2x3 variable...");
00101 
00102    {
00103       int data_in_t[DIM2_LEN][DIM1_LEN];
00104 
00105       /* Create some phoney data. */
00106       k = 0;
00107       for (i = 0; i < DIM1_LEN; i++)
00108          for (j = 0; j < DIM2_LEN; j++)
00109             data[i][j] = k++;
00110       
00111       /* Create a file with one variable of type int. */
00112       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00113       if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR;
00114       if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR;
00115       if (nc_def_var(ncid, VAR_NAME, NC_INT, 2, dimids, &varid)) ERR;
00116       if (nc_enddef(ncid)) ERR;
00117       if (nc_put_var_int(ncid, varid, (int *)data)) ERR;
00118       if (nc_close(ncid)) ERR;
00119       
00120       /* Open the file and check. */
00121       if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00122       if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, 
00123                      &natts_in)) ERR;
00124       if (strcmp(name_in, VAR_NAME) || xtype_in != NC_INT || 
00125           ndims_in != 2 || natts_in != 0 || dimids_in[0] != dimids[0] ||
00126           dimids_in[1] != dimids[1]) ERR;
00127       if (nc_get_var_int(ncid, varid, (int *)data_in)) ERR;   
00128       for (i = 0; i < DIM1_LEN; i++)
00129          for (j = 0; j < DIM2_LEN; j++)
00130             if (data_in[i][j] != data[i][j]) ERR;
00131 
00132       /* Get a transpose of the array. */
00133       start[0] = start[1] = 0;
00134       count[0] = DIM1_LEN;
00135       count[1] = DIM2_LEN;
00136       stride[0] = stride[1] = 1;
00137       map[0] = 1;
00138       map[1] = 2;
00139       if (nc_get_varm_int(ncid, varid, start, count, stride, map, 
00140                           (int *)data_in_t)) ERR;   
00141       for (i = 0; i < DIM1_LEN; i++)
00142          for (j = 0; j < DIM2_LEN; j++)
00143             if (data_in_t[j][i] != data[i][j]) ERR;
00144 
00145       if (nc_close(ncid)) ERR;
00146 
00147    }
00148 
00149    SUMMARIZE_ERR;
00150    printf("*** testing simple example from C Users' Guide...");
00151 
00152    {
00153 #define D0 4
00154 #define D1 3
00155 #define D2 2     
00156 
00157       /* netCDF dimension       inter-element distance */
00158       /* ----------------       ---------------------- */
00159       /* most rapidly varying       1                  */
00160       /* intermediate               2 (=imap[2]*2)     */
00161       /* most slowly varying        6 (=imap[1]*3)     */
00162       ptrdiff_t imap[3] = {6, 2, 1}, stride[3] = {1, 1, 1};
00163       size_t start[3] = {0, 0, 0}, count[3] = {D0, D1, D2};
00164       int ncid, varid, dimids[3];
00165       float data[D0][D1][D2], data_in[D0][D1][D2];
00166    
00167       for (i = 0; i < D0; i++)
00168          for (j = 0; j < D1; j++)
00169             for (k = 0; k < D2; k++)
00170                data[i][j][k] = i + j + k;
00171 
00172       /* Create a file with one variable of type float. */
00173       if (nc_create(FILE_NAME, NC_CLOBBER, &ncid)) ERR;
00174       if (nc_def_dim(ncid, "D0", D0, &dimids[0])) ERR;
00175       if (nc_def_dim(ncid, "D1", D1, &dimids[1])) ERR;
00176       if (nc_def_dim(ncid, "D2", D2, &dimids[2])) ERR;
00177       if (nc_def_var(ncid, "Jackson_Hole", NC_FLOAT, 3, dimids, &varid)) ERR;
00178       if (nc_enddef(ncid)) ERR;
00179       if (nc_put_var_float(ncid, varid, (float *)data)) ERR;
00180       if (nc_close(ncid)) ERR;
00181 
00182       /* Open the file and check. */
00183       if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00184       if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
00185       if (ndims != 3 || nvars != 1 || natts != 0 || unlimdimid != -1) ERR;
00186       if (nc_get_var_float(ncid, 0, (float *)data_in)) ERR;   
00187       for (i = 0; i < D0; i++)
00188          for (j = 0; j < D1; j++)
00189             for (k = 0; k < D2; k++)
00190                if (data_in[i][j][k] != data[i][j][k]) ERR;
00191 
00192       /* Using the imap above I should get identical results
00193        * (according to the manual). */
00194       if (nc_get_varm_float(ncid, 0, start, count, stride, imap, 
00195                             (float *)data_in)) ERR;   
00196       for (i = 0; i < D0; i++)
00197          for (j = 0; j < D1; j++)
00198             for (k = 0; k < D2; k++)
00199                if (data_in[i][j][k] != data[i][j][k]) ERR;
00200 
00201       /* Now let's mess things around a bit. */
00202 /*       imap[0] = 0; */
00203 /*       imap[1] = 1; */
00204 /*       imap[2] = 2; */
00205 /*       if (nc_get_varm_float(ncid, 0, start, count, stride, imap,  */
00206 /*                          (float *)data_in)) ERR;    */
00207 /*       for (i = 0; i < D0; i++) */
00208 /*       for (j = 0; j < D1; j++) */
00209 /*          for (k = 0; k < D2; k++) */
00210 /*             if (data_in[i][j][k] != data[i][j][k]) ERR; */
00211 
00212       if (nc_close(ncid)) ERR;
00213    }
00214 
00215    SUMMARIZE_ERR;
00216 
00217    printf("*** testing transposed rh example from C Users' Guide...");
00218    {
00219       /*nc_set_log_level(2);*/
00220 
00221       ptrdiff_t imap[2] = {1, 6}, stride[2] = {1, 1};
00222       size_t start[2] = {0, 0}, count[2] = {6, 4};
00223       int ncid, varid, dimids[3];
00224       float data[4][6], data_in[6][4];
00225       int k=0;
00226    
00227       /* Phoney data. */
00228       for (i = 0; i < 4; i++)
00229          for (j = 0; j < 6; j++)
00230          {
00231             data[i][j] = k;
00232             data_in[j][i] = k;
00233             k++;
00234          }
00235 
00236       /* Create a file with one variable of type float, writing a transposed array. */
00237       if (nc_create(FILE_NAME, 0, &ncid)) ERR;
00238       if (nc_def_dim(ncid, "lat", 6, &dimids[0])) ERR;
00239       if (nc_def_dim(ncid, "lon", 4, &dimids[1])) ERR;
00240       if (nc_def_var(ncid, "rh", NC_FLOAT, 2, dimids, &varid)) ERR;
00241       dimids[0] = 1;
00242       dimids[1] = 0;
00243       if (nc_def_var(ncid, "rh2", NC_FLOAT, 2, dimids, &varid)) ERR;
00244       if (nc_enddef(ncid)) ERR;
00245       if (nc_put_varm_float(ncid, 0, start, count, stride, imap, 
00246                             (float *)data)) ERR;
00247       count[0] = 4;
00248       count[1] = 6;
00249       if (nc_put_vara_float(ncid, 1, start, count, 
00250                             (float *)data_in)) ERR;
00251       if (nc_close(ncid)) ERR;
00252 
00253       /* Open the file and check. */
00254       if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00255       if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
00256       if (ndims != 2 || nvars != 2 || natts != 0 || unlimdimid != -1) ERR;
00257       if (nc_get_var_float(ncid, 0, (float *)data_in)) ERR;   
00258 /*       for (i = 0; i < 4; i++) */
00259 /*       for (j = 0; j < 6; j++) */
00260 /*          if (data_in[i][j] != data[j][i]) ERR; */
00261 
00262       if (nc_close(ncid)) ERR;
00263    }
00264 
00265    SUMMARIZE_ERR;
00266 
00267    FINAL_RESULTS;
00268 }


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