int main(int argc, char **argv) { if(argc < 4) { printf("Usage: nc32bin varname nc3file binfile\n"); exit(1); } int status, i, ndims; int ncfile_id, ncvar_id; int dimids[DIM_LEN]; size_t size, nelmts, buflen; size_t dimlens[DIM_LEN]; nc_type vartype; void *buf = NULL; /* * read nc file */ status = nc_open(argv[2], NC_NOWRITE, &ncfile_id); NC_ASSERT(status); status = nc_inq_varid(ncfile_id, argv[1], &ncvar_id); NC_ASSERT(status); nc_inq_varndims(ncfile_id, ncvar_id, &ndims); nc_inq_vartype(ncfile_id, ncvar_id, &vartype); nc_inq_vardimid(ncfile_id, ncvar_id, dimids); for(i = 0; i < ndims; i++) nc_inq_dimlen(ncfile_id, dimids[i], &(dimlens[i])); size = get_type_size(vartype); nelmts = 1; for(i = 0; i < ndims; i++) nelmts *= dimlens[i]; buflen = size * nelmts; buf = malloc(buflen); MEMORY_CHECK(buf); if(NC_SHORT == vartype) status = nc_get_var_short(ncfile_id, ncvar_id, (short *)buf); else if(NC_USHORT == vartype) status = nc_get_var_ushort(ncfile_id, ncvar_id, (unsigned short *)buf); else if(NC_INT == vartype) status = nc_get_var_int(ncfile_id, ncvar_id, (int *)buf); else if(NC_UINT == vartype) status = nc_get_var_uint(ncfile_id, ncvar_id, (unsigned int *)buf); else if(NC_INT64 == vartype) status = nc_get_var_longlong(ncfile_id, ncvar_id, (long long *)buf); else if(NC_UINT64 == vartype) status = nc_get_var_ulonglong(ncfile_id, ncvar_id, (unsigned long long *)buf); else if(NC_FLOAT == vartype) status = nc_get_var_float(ncfile_id, ncvar_id, (float *)buf); else if(NC_DOUBLE == vartype) status = nc_get_var_double(ncfile_id, ncvar_id, (double *)buf); NC_ASSERT(status); nc_close(ncfile_id); /* * write binary */ FILE *fp = NULL; fp = fopen(argv[3], "wb"); assert(fp != NULL); fwrite(buf, size, nelmts, fp); fclose(fp); return 0; }
int main(int argc, char **argv) { #ifdef USE_PARALLEL MPI_Init(&argc, &argv); #endif int ncid, dimids[3]; int char_varid, byte_varid, ubyte_varid, short_varid, int_varid, float_varid, double_varid; int ushort_varid, uint_varid, int64_varid, uint64_varid; int i, j; unsigned char ubyte_out[DIM1_LEN][DIM2_LEN] = {{1, 128, 255},{1, 128, 255}}; signed char byte_in[DIM1_LEN][DIM2_LEN], byte_out[DIM1_LEN][DIM2_LEN] = {{-127, 1, 127},{-127, 1, 127}}; unsigned short ushort_out[DIM1_LEN][DIM2_LEN] = {{110, 128, 255},{110, 128, 255}}; short short_in[DIM1_LEN][DIM2_LEN], short_out[DIM1_LEN][DIM2_LEN] = {{-110, -128, 255},{-110, -128, 255}}; int int_in[DIM1_LEN][DIM2_LEN], int_out[DIM1_LEN][DIM2_LEN] = {{0, 128, 255},{0, 128, 255}}; float float_in[DIM1_LEN][DIM2_LEN], float_out[DIM1_LEN][DIM2_LEN] = {{-.1, 9999.99, 100.001},{-.1, 9999.99, 100.001}}; double double_in[DIM1_LEN][DIM2_LEN], double_out[DIM1_LEN][DIM2_LEN] = {{0.02, .1128, 1090.1},{0.02, .1128, 1090.1}}; unsigned int uint_in[DIM1_LEN][DIM2_LEN], uint_out[DIM1_LEN][DIM2_LEN] = {{0, 128, 255},{0, 128, 255}}; long long int64_in[DIM1_LEN][DIM2_LEN], int64_out[DIM1_LEN][DIM2_LEN] = {{-111, 777, 100},{-111, 777, 100}}; unsigned long long uint64_in[DIM1_LEN][DIM2_LEN]; unsigned long long uint64_out[DIM1_LEN][DIM2_LEN] = {{0, 10101, 9999999},{0, 10101, 9999999}}; char char_out[DIM1_LEN][DIM2_LEN][DIM3_LEN] = {{"lalala", "lololo", "lelele"}, {"lalala", "lololo", "lelele"}}; /*nc_set_log_level(4);*/ printf("\n*** Testing netcdf-4 variable functions.\n"); printf("*** testing netcdf-4 varids inq on netcdf-3 file..."); { int nvars_in, varids_in[2]; /* Create a netcdf-3 file with one dim and two vars. */ if (nc_create(FILE_NAME, 0, &ncid)) ERR; if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR; if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR; if (nc_def_dim(ncid, DIM3_NAME, DIM3_LEN, &dimids[2])) ERR; if (nc_def_var(ncid, VAR_BYTE_NAME, NC_BYTE, 2, dimids, &byte_varid)) ERR; if (nc_def_var(ncid, VAR_CHAR_NAME, NC_CHAR, 3, dimids, &char_varid)) ERR; if (nc_close(ncid)) ERR; /* Open the file and make sure nc_inq_varids yeilds correct * result. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; if (nc_inq_varids(ncid, &nvars_in, varids_in)) ERR; if (nvars_in != 2 || varids_in[0] != 0 || varids_in[1] != 1) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; printf("*** testing simple variables..."); { /* Create a file with a variable of each type. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR; if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR; if (nc_def_dim(ncid, DIM3_NAME, DIM3_LEN, &dimids[2])) ERR; if (nc_def_var(ncid, VAR_BYTE_NAME, NC_BYTE, 2, dimids, &byte_varid)) ERR; if (nc_def_var(ncid, VAR_CHAR_NAME, NC_CHAR, 3, dimids, &char_varid)) ERR; if (nc_def_var(ncid, VAR_SHORT_NAME, NC_SHORT, 2, dimids, &short_varid)) ERR; if (nc_def_var(ncid, VAR_INT_NAME, NC_INT, 2, dimids, &int_varid)) ERR; if (nc_def_var(ncid, VAR_FLOAT_NAME, NC_FLOAT, 2, dimids, &float_varid)) ERR; if (nc_def_var(ncid, VAR_DOUBLE_NAME, NC_DOUBLE, 2, dimids, &double_varid)) ERR; if (nc_def_var(ncid, VAR_UBYTE_NAME, NC_UBYTE, 2, dimids, &ubyte_varid)) ERR; if (nc_def_var(ncid, VAR_USHORT_NAME, NC_USHORT, 2, dimids, &ushort_varid)) ERR; if (nc_def_var(ncid, VAR_UINT_NAME, NC_UINT, 2, dimids, &uint_varid)) ERR; if (nc_def_var(ncid, VAR_INT64_NAME, NC_INT64, 2, dimids, &int64_varid)) ERR; if (nc_def_var(ncid, VAR_UINT64_NAME, NC_UINT64, 2, dimids, &uint64_varid)) ERR; if (nc_put_var_schar(ncid, byte_varid, (signed char *)byte_out)) ERR; if (nc_put_var_text(ncid, char_varid, (char *)char_out)) ERR; if (nc_put_var_short(ncid, short_varid, (short *)short_out)) ERR; if (nc_put_var_int(ncid, int_varid, (int *)int_out)) ERR; if (nc_put_var_float(ncid, float_varid, (float *)float_out)) ERR; if (nc_put_var_double(ncid, double_varid, (double *)double_out)) ERR; if (nc_put_var_ubyte(ncid, ubyte_varid, (unsigned char *)ubyte_out)) ERR; if (nc_put_var_ushort(ncid, ushort_varid, (unsigned short *)ushort_out)) ERR; if (nc_put_var_uint(ncid, uint_varid, (unsigned int *)uint_out)) ERR; if (nc_put_var_longlong(ncid, int64_varid, (long long *)int64_out)) ERR; if (nc_put_var_ulonglong(ncid, uint64_varid, (unsigned long long *)uint64_out)) ERR; if (nc_close(ncid)) ERR; /* Open the file and check metadata. */ { nc_type xtype_in; int ndims_in, dimids_in[10], natts_in, varid_in; char name_in[NC_MAX_NAME+1]; if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR; if (strcmp(name_in, VAR_BYTE_NAME) || xtype_in != NC_BYTE || ndims_in != 2 || natts_in != 0 || dimids_in[0] != dimids[0] || dimids_in[1] != dimids[1]) ERR; if (nc_inq_varid(ncid, VAR_BYTE_NAME, &varid_in)) ERR; if (varid_in != 0) ERR; if (nc_inq_varid(ncid, VAR_CHAR_NAME, &varid_in)) ERR; if (varid_in != 1) ERR; if (nc_inq_varid(ncid, VAR_SHORT_NAME, &varid_in)) ERR; if (varid_in != 2) ERR; if (nc_inq_varname(ncid, 0, name_in)) ERR; if (strcmp(name_in, VAR_BYTE_NAME)) ERR; if (nc_inq_varname(ncid, 1, name_in)) ERR; if (strcmp(name_in, VAR_CHAR_NAME)) ERR; if (nc_inq_varname(ncid, 2, name_in)) ERR; if (strcmp(name_in, VAR_SHORT_NAME)) ERR; if (nc_inq_vartype(ncid, 0, &xtype_in)) ERR; if (xtype_in != NC_BYTE) ERR; if (nc_inq_vartype(ncid, 1, &xtype_in)) ERR; if (xtype_in != NC_CHAR) ERR; if (nc_inq_vartype(ncid, 2, &xtype_in)) ERR; if (xtype_in != NC_SHORT) ERR; if (nc_close(ncid)) ERR; } /* Open the file and check data. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_schar(ncid, byte_varid, (signed char *)byte_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != byte_out[i][j]) ERR; if (nc_get_var_short(ncid, short_varid, (short *)short_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (short_in[i][j] != short_out[i][j]) ERR; if (nc_get_var_int(ncid, int_varid, (int *)int_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (int_in[i][j] != int_out[i][j]) ERR; if (nc_get_var_float(ncid, float_varid, (float *)float_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (float_in[i][j] != float_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_uint(ncid, uint_varid, (unsigned int *)uint_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (uint_in[i][j] != uint_out[i][j]) ERR; if (nc_get_var_longlong(ncid, int64_varid, (long long *)int64_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (int64_in[i][j] != int64_out[i][j]) ERR; if (nc_get_var_ulonglong(ncid, uint64_varid, (unsigned long long *)uint64_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (uint64_in[i][j] != uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; /* Open the file and read everything as double. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_double(ncid, byte_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)byte_out[i][j]) ERR; if (nc_get_var_double(ncid, ubyte_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)ubyte_out[i][j]) ERR; if (nc_get_var_double(ncid, short_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)short_out[i][j]) ERR; if (nc_get_var_double(ncid, ushort_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)ushort_out[i][j]) ERR; if (nc_get_var_double(ncid, int_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)int_out[i][j]) ERR; if (nc_get_var_double(ncid, uint_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)uint_out[i][j]) ERR; if (nc_get_var_double(ncid, float_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)float_out[i][j]) ERR; if (nc_get_var_double(ncid, int64_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)int64_out[i][j]) ERR; if (nc_get_var_double(ncid, uint64_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; /* Open the file and read everything as NC_BYTE. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_schar(ncid, byte_varid, (signed char *)byte_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)byte_out[i][j]) ERR; if (nc_get_var_schar(ncid, ubyte_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)ubyte_out[i][j]) ERR; if (nc_get_var_schar(ncid, short_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)short_out[i][j]) ERR; if (nc_get_var_schar(ncid, ushort_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)ushort_out[i][j]) ERR; if (nc_get_var_schar(ncid, int_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)int_out[i][j]) ERR; if (nc_get_var_schar(ncid, uint_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)uint_out[i][j]) ERR; if (nc_get_var_schar(ncid, float_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)float_out[i][j]) ERR; if (nc_get_var_schar(ncid, int64_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)int64_out[i][j]) ERR; if (nc_get_var_schar(ncid, uint64_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define DEFLATE_LEVEL_4 4 printf("*** testing simple variables with deflation..."); { /* Create a file with a variable of each type. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR; if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR; if (nc_def_dim(ncid, DIM3_NAME, DIM3_LEN, &dimids[2])) ERR; if (nc_def_var(ncid, VAR_BYTE_NAME, NC_BYTE, 2, dimids, &byte_varid)) ERR; if (nc_def_var_deflate(ncid, byte_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_CHAR_NAME, NC_CHAR, 3, dimids, &char_varid)) ERR; if (nc_def_var_deflate(ncid, byte_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_SHORT_NAME, NC_SHORT, 2, dimids, &short_varid)) ERR; if (nc_def_var_deflate(ncid, short_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_INT_NAME, NC_INT, 2, dimids, &int_varid)) ERR; if (nc_def_var_deflate(ncid, int_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_FLOAT_NAME, NC_FLOAT, 2, dimids, &float_varid)) ERR; if (nc_def_var_deflate(ncid, float_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_DOUBLE_NAME, NC_DOUBLE, 2, dimids, &double_varid)) ERR; if (nc_def_var_deflate(ncid, double_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_UBYTE_NAME, NC_UBYTE, 2, dimids, &ubyte_varid)) ERR; if (nc_def_var_deflate(ncid, ubyte_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_USHORT_NAME, NC_USHORT, 2, dimids, &ushort_varid)) ERR; if (nc_def_var_deflate(ncid, ushort_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_UINT_NAME, NC_UINT, 2, dimids, &uint_varid)) ERR; if (nc_def_var_deflate(ncid, uint_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_INT64_NAME, NC_INT64, 2, dimids, &int64_varid)) ERR; if (nc_def_var_deflate(ncid, int64_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_def_var(ncid, VAR_UINT64_NAME, NC_UINT64, 2, dimids, &uint64_varid)) ERR; if (nc_def_var_deflate(ncid, uint64_varid, 0, 1, DEFLATE_LEVEL_4)) ERR; if (nc_put_var_schar(ncid, byte_varid, (signed char *)byte_out)) ERR; if (nc_put_var_text(ncid, char_varid, (char *)char_out)) ERR; if (nc_put_var_short(ncid, short_varid, (short *)short_out)) ERR; if (nc_put_var_int(ncid, int_varid, (int *)int_out)) ERR; if (nc_put_var_float(ncid, float_varid, (float *)float_out)) ERR; if (nc_put_var_double(ncid, double_varid, (double *)double_out)) ERR; if (nc_put_var_ubyte(ncid, ubyte_varid, (unsigned char *)ubyte_out)) ERR; if (nc_put_var_ushort(ncid, ushort_varid, (unsigned short *)ushort_out)) ERR; if (nc_put_var_uint(ncid, uint_varid, (unsigned int *)uint_out)) ERR; if (nc_put_var_longlong(ncid, int64_varid, (long long *)int64_out)) ERR; if (nc_put_var_ulonglong(ncid, uint64_varid, (unsigned long long *)uint64_out)) ERR; if (nc_close(ncid)) ERR; /* Open the file and check metadata. */ { nc_type xtype_in; int ndims_in, dimids_in[10], natts_in, varid_in; char name_in[NC_MAX_NAME+1]; if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims_in, dimids_in, &natts_in)) ERR; if (strcmp(name_in, VAR_BYTE_NAME) || xtype_in != NC_BYTE || ndims_in != 2 || natts_in != 0 || dimids_in[0] != dimids[0] || dimids_in[1] != dimids[1]) ERR; if (nc_inq_varid(ncid, VAR_BYTE_NAME, &varid_in)) ERR; if (varid_in != 0) ERR; if (nc_inq_varid(ncid, VAR_CHAR_NAME, &varid_in)) ERR; if (varid_in != 1) ERR; if (nc_inq_varid(ncid, VAR_SHORT_NAME, &varid_in)) ERR; if (varid_in != 2) ERR; if (nc_inq_varname(ncid, 0, name_in)) ERR; if (strcmp(name_in, VAR_BYTE_NAME)) ERR; if (nc_inq_varname(ncid, 1, name_in)) ERR; if (strcmp(name_in, VAR_CHAR_NAME)) ERR; if (nc_inq_varname(ncid, 2, name_in)) ERR; if (strcmp(name_in, VAR_SHORT_NAME)) ERR; if (nc_inq_vartype(ncid, 0, &xtype_in)) ERR; if (xtype_in != NC_BYTE) ERR; if (nc_inq_vartype(ncid, 1, &xtype_in)) ERR; if (xtype_in != NC_CHAR) ERR; if (nc_inq_vartype(ncid, 2, &xtype_in)) ERR; if (xtype_in != NC_SHORT) ERR; if (nc_close(ncid)) ERR; } /* Open the file and check data. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_schar(ncid, byte_varid, (signed char *)byte_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != byte_out[i][j]) ERR; if (nc_get_var_short(ncid, short_varid, (short *)short_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (short_in[i][j] != short_out[i][j]) ERR; if (nc_get_var_int(ncid, int_varid, (int *)int_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (int_in[i][j] != int_out[i][j]) ERR; if (nc_get_var_float(ncid, float_varid, (float *)float_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (float_in[i][j] != float_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_double(ncid, double_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != double_out[i][j]) ERR; if (nc_get_var_uint(ncid, uint_varid, (unsigned int *)uint_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (uint_in[i][j] != uint_out[i][j]) ERR; if (nc_get_var_longlong(ncid, int64_varid, (long long *)int64_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (int64_in[i][j] != int64_out[i][j]) ERR; if (nc_get_var_ulonglong(ncid, uint64_varid, (unsigned long long *)uint64_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (uint64_in[i][j] != uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; /* Open the file and read everything as double. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_double(ncid, byte_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)byte_out[i][j]) ERR; if (nc_get_var_double(ncid, ubyte_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)ubyte_out[i][j]) ERR; if (nc_get_var_double(ncid, short_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)short_out[i][j]) ERR; if (nc_get_var_double(ncid, ushort_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)ushort_out[i][j]) ERR; if (nc_get_var_double(ncid, int_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)int_out[i][j]) ERR; if (nc_get_var_double(ncid, uint_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)uint_out[i][j]) ERR; if (nc_get_var_double(ncid, float_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)float_out[i][j]) ERR; if (nc_get_var_double(ncid, int64_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)int64_out[i][j]) ERR; if (nc_get_var_double(ncid, uint64_varid, (double *)double_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (double_in[i][j] != (double)uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; /* Open the file and read everything as NC_BYTE. */ if (nc_open(FILE_NAME, 0, &ncid)) ERR; if (nc_get_var_schar(ncid, byte_varid, (signed char *)byte_in)) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)byte_out[i][j]) ERR; if (nc_get_var_schar(ncid, ubyte_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)ubyte_out[i][j]) ERR; if (nc_get_var_schar(ncid, short_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)short_out[i][j]) ERR; if (nc_get_var_schar(ncid, ushort_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)ushort_out[i][j]) ERR; if (nc_get_var_schar(ncid, int_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)int_out[i][j]) ERR; if (nc_get_var_schar(ncid, uint_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)uint_out[i][j]) ERR; if (nc_get_var_schar(ncid, float_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)float_out[i][j]) ERR; if (nc_get_var_schar(ncid, int64_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)int64_out[i][j]) ERR; if (nc_get_var_schar(ncid, uint64_varid, (signed char *)byte_in) != NC_ERANGE) ERR; for (i = 0; i < DIM1_LEN; i++) for (j = 0; j < DIM2_LEN; j++) if (byte_in[i][j] != (signed char)uint64_out[i][j]) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define NDIMS4 1 #define NVARS4 1 #define DIM4_NAME "treaty_of_paris_1783" #define DIM4_LEN 5 #define VAR_NAME4 "John_Adams" #define DEFLATE_LEVEL 6 printf("*** testing netcdf-4 simple variable define..."); { int dimids[NDIMS4], dimids_in[NDIMS4]; int varid, varids_in[NVARS4]; int ndims, nvars, natts, unlimdimid; nc_type xtype_in; char name_in[NC_MAX_NAME + 1]; int shuffle_in, deflate_in, deflate_level; /* Create a netcdf-4 file with one dim and one var. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM4_NAME, DIM4_LEN, &dimids[0])) ERR; if (dimids[0] != 0) ERR; if (nc_def_var(ncid, VAR_NAME4, NC_INT64, NDIMS4, dimids, &varid)) ERR; if (nc_def_var_deflate(ncid, varid, 0, 1, DEFLATE_LEVEL)) ERR; if (varid != 0) ERR; /* Check stuff. */ if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS4 || nvars != NVARS4 || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS4) ERR; if (varids_in[0] != 0) ERR; if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, VAR_NAME4) || xtype_in != NC_INT64 || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, 0, &shuffle_in, &deflate_in, &deflate_level)) ERR; if (shuffle_in ||!deflate_in || deflate_level != DEFLATE_LEVEL) ERR; if (nc_close(ncid)) ERR; /* Open the file and check the same stuff. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS4 || nvars != NVARS4 || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS4) ERR; if (varids_in[0] != 0) ERR; if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, VAR_NAME4) || xtype_in != NC_INT64 || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, 0, &shuffle_in, &deflate_in, &deflate_level)) ERR; if (shuffle_in ||!deflate_in || deflate_level != DEFLATE_LEVEL) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define NDIMS5 1 #define NVARS5 5 #define DIM5_NAME "treaty_of_paris_1783" #define DIM5_LEN 5 printf("*** testing netcdf-4 less simple variable define..."); { int dimids[NDIMS5], dimids_in[NDIMS5]; int varid[NVARS5], varids_in[NVARS5]; int ndims, nvars, natts, unlimdimid; nc_type xtype_in; char name_in[NC_MAX_NAME + 1]; char var_name[NVARS5][NC_MAX_NAME + 1] = {"Jean-Pierre_Blanchard", "Madame_Blanchard", "Giffard", "Stanislas_Charles_Henri_Dupuy_de_Lome", "Charles_F_Ritchel"}; int shuffle_in, deflate_in, deflate_level_in; int deflate_level[NVARS5]; int i; /* Set up options for this var. */ for (i = 0; i < NVARS5; i++) deflate_level[i] = i; /* Create a netcdf-4 file with one dim and two vars. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM5_NAME, DIM5_LEN, &dimids[0])) ERR; if (dimids[0] != 0) ERR; for (i = 0; i < NVARS5; i++) { if (nc_def_var(ncid, var_name[i], NC_INT64, NDIMS5, dimids, &varid[i])) ERR; if (varid[i] != i) ERR; if (nc_def_var_deflate(ncid, varid[i], 1, 1, deflate_level[i])) ERR; } /* Check stuff. */ if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS5 || nvars != NVARS5 || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS5) ERR; for (i = 0; i < NVARS5; i++) { if (varids_in[i] != i) ERR; if (nc_inq_var(ncid, i, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, var_name[i]) || xtype_in != NC_INT64 || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, varid[i], &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (!shuffle_in || !deflate_in || deflate_level_in != deflate_level[i]) ERR; } if (nc_close(ncid)) ERR; /* Open the file and check the same stuff. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS5 || nvars != NVARS5 || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS5) ERR; for (i = 0; i < NVARS5; i++) { if (varids_in[i] != i) ERR; if (nc_inq_var(ncid, i, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, var_name[i]) || xtype_in != NC_INT64 || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, varid[i], &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (!shuffle_in || !deflate_in || deflate_level_in != deflate_level[i]) ERR; } if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define NVARS 5 #define NDIMS 1 #define DIM6_NAME "airship_cross_sectional_area" #define DIM6_LEN 100 #define TEN_K_M2 10000.0 #define INCREMENT 1000.0 printf("*** testing more complex netcdf-4 variable defines..."); { int dimids[NDIMS], dimids_in[NDIMS]; int varid[NVARS], varids_in[NVARS]; int ndims, nvars, natts, unlimdimid; char var_name[NVARS][50] = {"Jean-Pierre_Blanchard", "Madame_Blanchard", "Giffard", "Stanislas_Charles_Henri_Dupuy_de_Lome", "Charles_F_Ritchel"}; double data[DIM6_LEN]; nc_type xtype_in; char name_in[NC_MAX_NAME + 1]; int shuffle_in, deflate_in, deflate_level_in; int fletcher32_in; int i; /* Create some phoney data. */ for (i = 1, data[0] = TEN_K_M2; i < DIM6_LEN; i++) data[i] = data[i - 1] + INCREMENT; /* Create a netcdf-4 file with one dim and 5 NC_DOUBLE vars. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM6_NAME, DIM6_LEN, &dimids[0])) ERR; for (i = 0; i < NVARS; i++) { if (nc_def_var(ncid, var_name[i], NC_DOUBLE, NDIMS, dimids, &varid[i])) ERR; if (nc_def_var_deflate(ncid, varid[i], 0, 1, 0)) ERR; if (nc_def_var_fletcher32(ncid, varid[i], 1)) ERR; } /* Check stuff. */ if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS || nvars != NVARS || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS) ERR; for (i = 0; i < NVARS; i++) if (varids_in[i] != i) ERR; for (i = 0; i < NVARS; i++) { if (nc_inq_var(ncid, i, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, var_name[i]) || xtype_in != NC_DOUBLE || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, varid[i], &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (shuffle_in || !deflate_in || deflate_level_in != 0) ERR; if (nc_inq_var_fletcher32(ncid, varid[i], &fletcher32_in)) ERR; if (!fletcher32_in) ERR; } if (nc_close(ncid)) ERR; /* Open the file and check the same stuff. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; if (ndims != NDIMS || nvars != NVARS || natts != 0 || unlimdimid != -1) ERR; if (nc_inq_varids(ncid, &nvars, varids_in)) ERR; if (nvars != NVARS) ERR; for (i = 0; i < NVARS; i++) if (varids_in[i] != i) ERR; for (i = 0; i < NVARS; i++) { if (nc_inq_var(ncid, i, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, var_name[i]) || xtype_in != NC_DOUBLE || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, varid[i], &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (shuffle_in || !deflate_in || deflate_level_in != 0) ERR; if (nc_inq_var_fletcher32(ncid, varid[i], &fletcher32_in)) ERR; if (!fletcher32_in) ERR; } if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define DIM7_LEN 2 #define DIM7_NAME "dim_7_from_Indiana" #define VAR7_NAME "var_7_from_Idaho" #define NDIMS 1 printf("*** testing fill values..."); { int dimids[NDIMS], dimids_in[NDIMS]; size_t index[NDIMS]; int varid, ndims, natts; nc_type xtype_in; char name_in[NC_MAX_NAME + 1]; int shuffle_in, deflate_in, deflate_level_in; int fletcher32_in, no_fill; unsigned short ushort_data = 42, ushort_data_in, fill_value_in; /* Create a netcdf-4 file with one dim and 1 NC_USHORT var. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM7_NAME, DIM7_LEN, &dimids[0])) ERR; if (nc_def_var(ncid, VAR7_NAME, NC_USHORT, NDIMS, dimids, &varid)) ERR; /* Check stuff. */ if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, VAR7_NAME) || xtype_in != NC_USHORT || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, 0, &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (shuffle_in || deflate_in) ERR; if (nc_inq_var_fletcher32(ncid, 0, &fletcher32_in)) ERR; if (fletcher32_in) ERR; if (nc_inq_var_fill(ncid, 0, &no_fill, &fill_value_in)) ERR; if (no_fill || fill_value_in != NC_FILL_USHORT) ERR; /* Write the second of two values. */ index[0] = 1; if (nc_put_var1_ushort(ncid, 0, index, &ushort_data)) ERR; /* Get the first value, and make sure we get the default fill * value for USHORT. */ index[0] = 0; if (nc_get_var1_ushort(ncid, 0, index, &ushort_data_in)) ERR; if (ushort_data_in != NC_FILL_USHORT) ERR; if (nc_close(ncid)) ERR; /* Open the file and check the same stuff. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; /* Check stuff. */ if (nc_inq_var(ncid, 0, name_in, &xtype_in, &ndims, dimids_in, &natts)) ERR; if (strcmp(name_in, VAR7_NAME) || xtype_in != NC_USHORT || ndims != 1 || natts != 0 || dimids_in[0] != 0) ERR; if (nc_inq_var_deflate(ncid, 0, &shuffle_in, &deflate_in, &deflate_level_in)) ERR; if (shuffle_in || deflate_in) ERR; if (nc_inq_var_fletcher32(ncid, 0, &fletcher32_in)) ERR; if (fletcher32_in) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; printf("*** testing more fill values..."); { int dimids[NDIMS]; size_t index[NDIMS]; int varid; int no_fill; unsigned short ushort_data = 42, ushort_data_in, fill_value_in; /* Create a netcdf-4 file with one dim and 1 NC_USHORT var. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM7_NAME, DIM7_LEN, &dimids[0])) ERR; if (nc_def_var(ncid, VAR7_NAME, NC_USHORT, NDIMS, dimids, &varid)) ERR; if (nc_def_var_fill(ncid, varid, 1, NULL)) ERR; /* Check stuff. */ if (nc_inq_var_fill(ncid, varid, &no_fill, &fill_value_in)) ERR; if (!no_fill) ERR; /* Write the second of two values. */ index[0] = 1; if (nc_put_var1_ushort(ncid, varid, index, &ushort_data)) ERR; /* Get the first value, and make sure we get the default fill * value for USHORT. */ index[0] = 0; if (nc_get_var1_ushort(ncid, varid, index, &ushort_data_in)) ERR; if (nc_close(ncid)) ERR; /* Open the file and check the same stuff. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; /* Check stuff. */ if (nc_inq_var_fill(ncid, varid, &no_fill, &fill_value_in)) ERR; if (!no_fill) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; printf("*** testing lots of variables..."); #define DIM_A_NAME "x" #define DIM_A_LEN 10 #define NUM_VARS 2000 #define MAX_VARNAME 10 { /* This simple test failed on HDF5 1.7.58, but passes just fine * on 1.8.0 alpha5... */ int ncid, dimids[1], i; char varname[MAX_VARNAME]; int varids[NUM_VARS]; /* Create a file with three dimensions. */ if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; if (nc_def_dim(ncid, DIM_A_NAME, DIM_A_LEN, &dimids[0])) ERR; /* Create a large number of variables. */ for (i = 0; i < NUM_VARS; i++) { sprintf(varname, "a_%d", i); if (nc_def_var(ncid, varname, NC_FLOAT, 1, dimids, &varids[i])) ERR; } if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; #define NC3_CLASSIC_FILE "tst_pres_temp_4D_classic.nc" #define NC3_64BIT_OFFSET_FILE "tst_pres_temp_4D_64bit_offset.nc" #define NC3_NETCDF4_FILE "tst_pres_temp_4D_netcdf4.nc" #define NC3_NETCDF4_CLASSIC_FILE "tst_pres_temp_4D_netcdf4_classic.nc" printf("*** testing 4D example file in classic format..."); if (create_4D_example(NC3_CLASSIC_FILE, NC_CLOBBER)) ERR; if (check_4D_example(NC3_CLASSIC_FILE, NC_FORMAT_CLASSIC)) ERR; SUMMARIZE_ERR; printf("*** testing 4D example file in 64-bit offset format..."); if (create_4D_example(NC3_64BIT_OFFSET_FILE, NC_CLOBBER|NC_64BIT_OFFSET)) ERR; if (check_4D_example(NC3_64BIT_OFFSET_FILE, NC_FORMAT_64BIT)) ERR; SUMMARIZE_ERR; printf("*** testing 4D example file in netCDF-4/HDF5 format..."); if (create_4D_example(NC3_NETCDF4_FILE, NC_CLOBBER|NC_NETCDF4)) ERR; if (check_4D_example(NC3_NETCDF4_FILE, NC_FORMAT_NETCDF4)) ERR; SUMMARIZE_ERR; printf("*** testing 4D example file in netCDF-4/HDF5 format with classic model rules..."); if (create_4D_example(NC3_NETCDF4_CLASSIC_FILE, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL)) ERR; if (check_4D_example(NC3_NETCDF4_CLASSIC_FILE, NC_FORMAT_NETCDF4_CLASSIC)) ERR; SUMMARIZE_ERR; FINAL_RESULTS; #ifdef USE_PARALLEL MPI_Finalize(); #endif }
int check_file(int format, unsigned char *uchar_out) { int ncid; int ndims, natts; int dimids_var[1], var_type; char var_name[NC_MAX_NAME+1]; unsigned char uchar_in[DIM1_LEN]; signed char char_in[DIM1_LEN]; unsigned short ushort_in[DIM1_LEN]; short short_in[DIM1_LEN]; unsigned int uint_in[DIM1_LEN]; int int_in[DIM1_LEN]; long long int64_in[DIM1_LEN]; unsigned long long uint64_in[DIM1_LEN]; int i, res; /* Read it back in, and check conversions. */ if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; if (nc_inq_var(ncid, 0, var_name, &var_type, &ndims, dimids_var, &natts)) ERR; if (strcmp(var_name, VAR1_NAME) || natts !=0 || ndims != 1 || dimids_var[0] != 0 || var_type != NC_BYTE) ERR; /* This is actually an NC_BYTE, with some negatives, so this should * generate a range error for netcdf-4, but not for netcdf-3, * because range errors are not generated for byte type * conversions. */ res = nc_get_var_uchar(ncid, 0, uchar_in); if (format == NC_FORMAT_NETCDF4 || format == NC_FORMAT_64BIT_DATA) { if (res != NC_ERANGE) ERR; } else if (res) ERR; for (i=0; i<DIM1_LEN; i++) #ifdef ERANGE_FILL if (uchar_in[i] != uchar_out[i] && uchar_in[i] != NC_FILL_UBYTE) ERR; #else if (uchar_in[i] != uchar_out[i]) ERR; #endif if (nc_get_var_schar(ncid, 0, char_in)) ERR; for (i=0; i<DIM1_LEN; i++) #ifdef ERANGE_FILL if (char_in[i] != (signed char)uchar_out[i] && char_in[i] != NC_FILL_BYTE) ERR; #else if (char_in[i] != (signed char)uchar_out[i]) ERR; #endif if (nc_get_var_short(ncid, 0, short_in)) ERR; for (i=0; i<DIM1_LEN; i++) #ifdef ERANGE_FILL if (short_in[i] != (signed char)uchar_out[i] && short_in[i] != NC_FILL_BYTE) ERR; #else if (short_in[i] != (signed char)uchar_out[i]) ERR; #endif if (nc_get_var_int(ncid, 0, int_in)) ERR; for (i=0; i<DIM1_LEN; i++) #ifdef ERANGE_FILL if (int_in[i] != (signed char)uchar_out[i] && int_in[i] != NC_FILL_BYTE) ERR; #else if (int_in[i] != (signed char)uchar_out[i]) ERR; #endif if (format == NC_FORMAT_NETCDF4 || format == NC_FORMAT_NETCDF4_CLASSIC) { /* Since we wrote them as NC_BYTE, some of these are negative * values, and will return a range error when reading into * unsigned type. To compare values, first cast uchar_out to * signed int, then cast again to the type we are reading it * as. */ if (nc_get_var_ushort(ncid, 0, ushort_in) != NC_ERANGE) ERR; for (i=0; i<DIM1_LEN; i++) if (ushort_in[i] != (unsigned short)(signed char)uchar_out[i]) ERR; if (nc_get_var_uint(ncid, 0, uint_in) != NC_ERANGE) ERR; for (i=0; i<DIM1_LEN; i++) if (uint_in[i] != (unsigned int)(signed char)uchar_out[i]) ERR; if (nc_get_var_ulonglong(ncid, 0, uint64_in) != NC_ERANGE) ERR; for (i=0; i<DIM1_LEN; i++) if (uint64_in[i] != (unsigned long long)(signed char)uchar_out[i]) ERR; if (nc_get_var_longlong(ncid, 0, int64_in)) ERR; for (i=0; i<DIM1_LEN; i++) if (int64_in[i] != (signed char)uchar_out[i]) ERR; } if (nc_close(ncid)) ERR; return 0; }