mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-11-27 07:30:33 +08:00
adding quantize test
This commit is contained in:
parent
26ac2a6cba
commit
2d504e02d8
@ -836,5 +836,83 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SUMMARIZE_ERR;
|
SUMMARIZE_ERR;
|
||||||
|
printf("*** Nice, simple example of using BitGroom plus zlib...");
|
||||||
|
{
|
||||||
|
#define DIM_LEN_SIMPLE 8
|
||||||
|
#define EPSILON .1
|
||||||
|
int ncid;
|
||||||
|
int dimid;
|
||||||
|
int varid1, varid2;
|
||||||
|
float *float_data;
|
||||||
|
double *double_data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Set up some data to write. */
|
||||||
|
if (!(float_data = malloc(DIM_LEN_SIMPLE * sizeof(float))))
|
||||||
|
ERR;
|
||||||
|
if (!(double_data = malloc(DIM_LEN_SIMPLE * sizeof(double))))
|
||||||
|
ERR;
|
||||||
|
for (i = 0; i < DIM_LEN_SIMPLE; i++)
|
||||||
|
{
|
||||||
|
float_data[i] = 1.5 * i;
|
||||||
|
double_data[i] = 1.5 * i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create file. */
|
||||||
|
if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
|
||||||
|
|
||||||
|
/* Create dims. */
|
||||||
|
if (nc_def_dim(ncid, "dim1", DIM_LEN_SIMPLE, &dimid)) ERR;
|
||||||
|
|
||||||
|
/* Create the variables. */
|
||||||
|
if (nc_def_var(ncid, "var1", NC_FLOAT, NDIM1, &dimid, &varid1)) ERR;
|
||||||
|
if (nc_def_var(ncid, "var2", NC_DOUBLE, NDIM1, &dimid, &varid2)) ERR;
|
||||||
|
|
||||||
|
/* Set up quantization. This will not make the data any
|
||||||
|
* smaller, unless compression is also turned on. */
|
||||||
|
if (nc_def_var_quantize(ncid, varid1, NC_QUANTIZE_BITGROOM, NSD_3)) ERR;
|
||||||
|
if (nc_def_var_quantize(ncid, varid2, NC_QUANTIZE_BITGROOM, NSD_3)) ERR;
|
||||||
|
|
||||||
|
/* Set up zlib compression. This will work better because the
|
||||||
|
* data are quantized, yielding a smaller output file. */
|
||||||
|
if (nc_def_var_deflate(ncid, varid1, 0, 1, 1)) ERR;
|
||||||
|
if (nc_def_var_deflate(ncid, varid2, 0, 1, 1)) ERR;
|
||||||
|
|
||||||
|
/* Write data. */
|
||||||
|
if (nc_put_var_float(ncid, varid1, float_data)) ERR;
|
||||||
|
if (nc_put_var_double(ncid, varid2, double_data)) ERR;
|
||||||
|
|
||||||
|
/* Close the file. */
|
||||||
|
if (nc_close(ncid)) ERR;
|
||||||
|
|
||||||
|
/* Check the resulting file for correctness. */
|
||||||
|
{
|
||||||
|
float float_data_in[DIM_LEN_SIMPLE];
|
||||||
|
double double_data_in[DIM_LEN_SIMPLE];
|
||||||
|
|
||||||
|
/* Now reopen the file and check. */
|
||||||
|
if (nc_open(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
|
||||||
|
|
||||||
|
/* Read the data. */
|
||||||
|
if (nc_get_var_float(ncid, varid1, float_data_in)) ERR;
|
||||||
|
if (nc_get_var_double(ncid, varid2, double_data_in)) ERR;
|
||||||
|
|
||||||
|
for (i = 0; i < DIM_LEN_SIMPLE; i++)
|
||||||
|
{
|
||||||
|
if (abs(float_data_in[i] - float_data[i]) > EPSILON)
|
||||||
|
ERR;
|
||||||
|
if (abs(double_data_in[i] - double_data[i]) > EPSILON)
|
||||||
|
ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Close the file. */
|
||||||
|
if (nc_close(ncid)) ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free resources. */
|
||||||
|
free(float_data);
|
||||||
|
free(double_data);
|
||||||
|
}
|
||||||
|
SUMMARIZE_ERR;
|
||||||
FINAL_RESULTS;
|
FINAL_RESULTS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user