#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) |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Definition at line 26 of file tst_varms.c. |
|
|
Definition at line 25 of file tst_varms.c. |
|
|
Definition at line 28 of file tst_varms.c. |
|
|
Definition at line 27 of file tst_varms.c. |
|
|
Definition at line 24 of file tst_varms.c. |
|
|
Definition at line 29 of file tst_varms.c. |
|
||||||||||||
|
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 }
|
1.4.4