mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-02-17 16:50:18 +08:00
lazy read of some var metadata
This commit is contained in:
parent
b2fbc71bd4
commit
1b38d9aef8
@ -174,5 +174,8 @@ int nc4_hdf5_find_grp_var_att(int ncid, int varid, const char *name, int attnum,
|
|||||||
NC_GRP_INFO_T **grp, NC_VAR_INFO_T **var,
|
NC_GRP_INFO_T **grp, NC_VAR_INFO_T **var,
|
||||||
NC_ATT_INFO_T **att);
|
NC_ATT_INFO_T **att);
|
||||||
|
|
||||||
|
/* Find var, doing lazy var metadata read if needed. */
|
||||||
|
int nc4_hdf5_find_grp_h5_var(int ncid, int varid, NC_FILE_INFO_T **h5,
|
||||||
|
NC_GRP_INFO_T **grp, NC_VAR_INFO_T **var);
|
||||||
|
|
||||||
#endif /* _HDF5INTERNAL_ */
|
#endif /* _HDF5INTERNAL_ */
|
||||||
|
@ -154,6 +154,7 @@ typedef struct NC_VAR_INFO
|
|||||||
nc_bool_t written_to; /* True if variable has data written to it */
|
nc_bool_t written_to; /* True if variable has data written to it */
|
||||||
struct NC_TYPE_INFO *type_info;
|
struct NC_TYPE_INFO *type_info;
|
||||||
int atts_not_read; /* If true, the atts have not yet been read. */
|
int atts_not_read; /* If true, the atts have not yet been read. */
|
||||||
|
nc_bool_t meta_read; /* True if this vars metadata has been completely read. */
|
||||||
NCindex *att; /* NCindex<NC_ATT_INFO_T*> */
|
NCindex *att; /* NCindex<NC_ATT_INFO_T*> */
|
||||||
nc_bool_t no_fill; /* True if no fill value is defined for var */
|
nc_bool_t no_fill; /* True if no fill value is defined for var */
|
||||||
void *fill_value;
|
void *fill_value;
|
||||||
|
@ -728,8 +728,61 @@ nc4_rec_grp_HDF5_del(NC_GRP_INFO_T *grp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal Given an ncid and varid, find an att. Lazy reads are done
|
* @internal Given an ncid and varid, get pointers to the group and var
|
||||||
* as needed.
|
* metadata. Lazy var metadata reads are done as needed.
|
||||||
|
*
|
||||||
|
* @param ncid File ID.
|
||||||
|
* @param varid Variable ID.
|
||||||
|
* @param h5 Pointer that gets pointer to the NC_FILE_INFO_T struct
|
||||||
|
* for this file. Ignored if NULL.
|
||||||
|
* @param grp Pointer that gets pointer to group info. Ignored if
|
||||||
|
* NULL.
|
||||||
|
* @param var Pointer that gets pointer to var info. Ignored if NULL.
|
||||||
|
*
|
||||||
|
* @return ::NC_NOERR No error.
|
||||||
|
* @return ::NC_ENOTVAR Variable not found.
|
||||||
|
* @author Ed Hartnett
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
nc4_hdf5_find_grp_h5_var(int ncid, int varid, NC_FILE_INFO_T **h5,
|
||||||
|
NC_GRP_INFO_T **grp, NC_VAR_INFO_T **var)
|
||||||
|
{
|
||||||
|
NC_FILE_INFO_T *my_h5;
|
||||||
|
NC_GRP_INFO_T *my_grp;
|
||||||
|
NC_VAR_INFO_T *my_var;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
/* Look up file and group metadata. */
|
||||||
|
if ((retval = nc4_find_grp_h5(ncid, &my_grp, &my_h5)))
|
||||||
|
return retval;
|
||||||
|
assert(my_grp && my_h5);
|
||||||
|
|
||||||
|
/* Find the var. */
|
||||||
|
if (!(my_var = (NC_VAR_INFO_T *)ncindexith(my_grp->vars, varid)))
|
||||||
|
return NC_ENOTVAR;
|
||||||
|
assert(my_var && my_var->hdr.id == varid);
|
||||||
|
|
||||||
|
/* Do we need to read var metadata? */
|
||||||
|
if (!my_var->meta_read && my_var->created)
|
||||||
|
if ((retval = nc4_get_var_meta(my_var)))
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
/* Return pointers that caller wants. */
|
||||||
|
if (h5)
|
||||||
|
*h5 = my_h5;
|
||||||
|
if (grp)
|
||||||
|
*grp = my_grp;
|
||||||
|
if (var)
|
||||||
|
*var = my_var;
|
||||||
|
|
||||||
|
return NC_NOERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal Given an ncid, varid, and attribute name, return
|
||||||
|
* normalized name and pointers to the file, group, var, and att info
|
||||||
|
* structs. Lazy reads of attributes and variable metadata are done as
|
||||||
|
* needed.
|
||||||
*
|
*
|
||||||
* @param ncid File/group ID.
|
* @param ncid File/group ID.
|
||||||
* @param varid Variable ID.
|
* @param varid Variable ID.
|
||||||
@ -801,6 +854,11 @@ nc4_hdf5_find_grp_var_att(int ncid, int varid, const char *name, int attnum,
|
|||||||
if ((retval = nc4_read_atts(my_grp, my_var)))
|
if ((retval = nc4_read_atts(my_grp, my_var)))
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
/* Do we need to read var metadata? */
|
||||||
|
if (!my_var->meta_read && my_var->created)
|
||||||
|
if ((retval = nc4_get_var_meta(my_var)))
|
||||||
|
return retval;
|
||||||
|
|
||||||
attlist = my_var->att;
|
attlist = my_var->att;
|
||||||
}
|
}
|
||||||
assert(attlist);
|
assert(attlist);
|
||||||
|
@ -99,8 +99,7 @@ typedef struct {
|
|||||||
* @author Ed Hartnett
|
* @author Ed Hartnett
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
get_type_info2(NC_FILE_INFO_T *h5, hid_t datasetid,
|
get_type_info2(NC_FILE_INFO_T *h5, hid_t datasetid, NC_TYPE_INFO_T **type_info)
|
||||||
NC_TYPE_INFO_T **type_info)
|
|
||||||
{
|
{
|
||||||
NC_HDF5_TYPE_INFO_T *hdf5_type;
|
NC_HDF5_TYPE_INFO_T *hdf5_type;
|
||||||
htri_t is_str, equal = 0;
|
htri_t is_str, equal = 0;
|
||||||
@ -191,17 +190,17 @@ get_type_info2(NC_FILE_INFO_T *h5, hid_t datasetid,
|
|||||||
/* Find out about endianness. As of HDF 1.8.6, this works
|
/* Find out about endianness. As of HDF 1.8.6, this works
|
||||||
* with all data types Not just H5T_INTEGER. See
|
* with all data types Not just H5T_INTEGER. See
|
||||||
* https://www.hdfgroup.org/HDF5/doc/RM/RM_H5T.html#Datatype-GetOrder */
|
* https://www.hdfgroup.org/HDF5/doc/RM/RM_H5T.html#Datatype-GetOrder */
|
||||||
if((order = H5Tget_order(hdf_typeid)) < 0)
|
if ((order = H5Tget_order(hdf_typeid)) < 0)
|
||||||
return NC_EHDFERR;
|
return NC_EHDFERR;
|
||||||
|
|
||||||
if(order == H5T_ORDER_LE)
|
if (order == H5T_ORDER_LE)
|
||||||
(*type_info)->endianness = NC_ENDIAN_LITTLE;
|
(*type_info)->endianness = NC_ENDIAN_LITTLE;
|
||||||
else if(order == H5T_ORDER_BE)
|
else if (order == H5T_ORDER_BE)
|
||||||
(*type_info)->endianness = NC_ENDIAN_BIG;
|
(*type_info)->endianness = NC_ENDIAN_BIG;
|
||||||
else
|
else
|
||||||
return NC_EBADTYPE;
|
return NC_EBADTYPE;
|
||||||
|
|
||||||
if(class == H5T_INTEGER)
|
if (class == H5T_INTEGER)
|
||||||
(*type_info)->nc_type_class = NC_INT;
|
(*type_info)->nc_type_class = NC_INT;
|
||||||
else
|
else
|
||||||
(*type_info)->nc_type_class = NC_FLOAT;
|
(*type_info)->nc_type_class = NC_FLOAT;
|
||||||
@ -543,8 +542,6 @@ rec_match_dimscales(NC_GRP_INFO_T *grp)
|
|||||||
}
|
}
|
||||||
} /* next dim */
|
} /* next dim */
|
||||||
} /* next grp */
|
} /* next grp */
|
||||||
LOG((5, "%s: dimid for this dimscale is %d", __func__,
|
|
||||||
var->type_info->hdr.id));
|
|
||||||
} /* next var->dim */
|
} /* next var->dim */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1124,8 +1121,8 @@ get_scale_info(NC_GRP_INFO_T *grp, NC_DIM_INFO_T *dim, NC_VAR_INFO_T *var,
|
|||||||
* @return ::NC_EVARMETA Error with var metadata.
|
* @return ::NC_EVARMETA Error with var metadata.
|
||||||
* @author Ed Hartnett
|
* @author Ed Hartnett
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
get_var_meta(NC_VAR_INFO_T *var)
|
nc4_get_var_meta(NC_VAR_INFO_T *var)
|
||||||
{
|
{
|
||||||
NC_HDF5_VAR_INFO_T *hdf5_var;
|
NC_HDF5_VAR_INFO_T *hdf5_var;
|
||||||
hid_t access_pid = 0;
|
hid_t access_pid = 0;
|
||||||
@ -1135,6 +1132,10 @@ get_var_meta(NC_VAR_INFO_T *var)
|
|||||||
|
|
||||||
assert(var && var->format_var_info);
|
assert(var && var->format_var_info);
|
||||||
|
|
||||||
|
/* Have we already read the var metadata? */
|
||||||
|
if (var->meta_read)
|
||||||
|
return NC_NOERR;
|
||||||
|
|
||||||
/* Get pointer to the HDF5-specific var info struct. */
|
/* Get pointer to the HDF5-specific var info struct. */
|
||||||
hdf5_var = (NC_HDF5_VAR_INFO_T *)var->format_var_info;
|
hdf5_var = (NC_HDF5_VAR_INFO_T *)var->format_var_info;
|
||||||
|
|
||||||
@ -1160,14 +1161,6 @@ get_var_meta(NC_VAR_INFO_T *var)
|
|||||||
if ((retval = get_filter_info(propid, var)))
|
if ((retval = get_filter_info(propid, var)))
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
|
|
||||||
/* Learn all about the type of this variable. */
|
|
||||||
if ((retval = get_type_info2(var->container->nc4_info, hdf5_var->hdf_datasetid,
|
|
||||||
&var->type_info)))
|
|
||||||
BAIL(retval);
|
|
||||||
|
|
||||||
/* Indicate that the variable has a pointer to the type */
|
|
||||||
var->type_info->rc++;
|
|
||||||
|
|
||||||
/* Get fill value, if defined. */
|
/* Get fill value, if defined. */
|
||||||
if ((retval = get_fill_info(propid, var)))
|
if ((retval = get_fill_info(propid, var)))
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
@ -1177,6 +1170,9 @@ get_var_meta(NC_VAR_INFO_T *var)
|
|||||||
if ((retval = nc4_adjust_var_cache(var->container, var)))
|
if ((retval = nc4_adjust_var_cache(var->container, var)))
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
|
|
||||||
|
/* Remember that we have read the metadata for this var. */
|
||||||
|
var->meta_read = NC_TRUE;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
if (access_pid && H5Pclose(access_pid) < 0)
|
if (access_pid && H5Pclose(access_pid) < 0)
|
||||||
BAIL2(NC_EHDFERR);
|
BAIL2(NC_EHDFERR);
|
||||||
@ -1255,15 +1251,20 @@ read_var(NC_GRP_INFO_T *grp, hid_t datasetid, const char *obj_name,
|
|||||||
retval = read_coord_dimids(grp, var);
|
retval = read_coord_dimids(grp, var);
|
||||||
if (retval && retval != NC_ENOTATT)
|
if (retval && retval != NC_ENOTATT)
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
|
retval = NC_NOERR;
|
||||||
|
|
||||||
/* Handle scale info. */
|
/* Handle scale info. */
|
||||||
if ((retval = get_scale_info(grp, dim, var, hdf5_var, ndims, datasetid)))
|
if ((retval = get_scale_info(grp, dim, var, hdf5_var, ndims, datasetid)))
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
|
|
||||||
/* Get the rest of the metadata for this variable. */
|
/* Learn all about the type of this variable. */
|
||||||
if ((retval = get_var_meta(var)))
|
if ((retval = get_type_info2(var->container->nc4_info, hdf5_var->hdf_datasetid,
|
||||||
|
&var->type_info)))
|
||||||
BAIL(retval);
|
BAIL(retval);
|
||||||
|
|
||||||
|
/* Indicate that the variable has a pointer to the type */
|
||||||
|
var->type_info->rc++;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
if (finalname)
|
if (finalname)
|
||||||
free(finalname);
|
free(finalname);
|
||||||
|
@ -409,6 +409,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype,
|
|||||||
BAIL(NC_ENOMEM);
|
BAIL(NC_ENOMEM);
|
||||||
|
|
||||||
var->is_new_var = NC_TRUE;
|
var->is_new_var = NC_TRUE;
|
||||||
|
var->meta_read = NC_TRUE;
|
||||||
|
|
||||||
/* Point to the type, and increment its ref. count */
|
/* Point to the type, and increment its ref. count */
|
||||||
var->type_info = type;
|
var->type_info = type;
|
||||||
@ -852,7 +853,7 @@ nc_def_var_chunking_ints(int ncid, int varid, int contiguous, int *chunksizesp)
|
|||||||
int i, retval;
|
int i, retval;
|
||||||
|
|
||||||
/* Get pointer to the var. */
|
/* Get pointer to the var. */
|
||||||
if ((retval = nc4_find_grp_h5_var(ncid, varid, NULL, NULL, &var)))
|
if ((retval = nc4_hdf5_find_grp_h5_var(ncid, varid, NULL, NULL, &var)))
|
||||||
return retval;
|
return retval;
|
||||||
assert(var);
|
assert(var);
|
||||||
|
|
||||||
@ -1088,6 +1089,11 @@ NC4_rename_var(int ncid, int varid, const char *name)
|
|||||||
there. */
|
there. */
|
||||||
if (var->created)
|
if (var->created)
|
||||||
{
|
{
|
||||||
|
/* Do we need to read var metadata? */
|
||||||
|
if (!var->meta_read)
|
||||||
|
if ((retval = nc4_get_var_meta(var)))
|
||||||
|
return retval;
|
||||||
|
|
||||||
if (var->ndims)
|
if (var->ndims)
|
||||||
{
|
{
|
||||||
NC_HDF5_DIM_INFO_T *hdf5_d0;
|
NC_HDF5_DIM_INFO_T *hdf5_d0;
|
||||||
@ -1353,7 +1359,7 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp,
|
|||||||
size_t len = 1;
|
size_t len = 1;
|
||||||
|
|
||||||
/* Find info for this file, group, and var. */
|
/* Find info for this file, group, and var. */
|
||||||
if ((retval = nc4_find_grp_h5_var(ncid, varid, &h5, &grp, &var)))
|
if ((retval = nc4_hdf5_find_grp_h5_var(ncid, varid, &h5, &grp, &var)))
|
||||||
return retval;
|
return retval;
|
||||||
assert(h5 && grp && var && var->hdr.id == varid && var->format_var_info);
|
assert(h5 && grp && var && var->hdr.id == varid && var->format_var_info);
|
||||||
|
|
||||||
@ -1679,7 +1685,7 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp,
|
|||||||
size_t len = 1;
|
size_t len = 1;
|
||||||
|
|
||||||
/* Find info for this file, group, and var. */
|
/* Find info for this file, group, and var. */
|
||||||
if ((retval = nc4_find_grp_h5_var(ncid, varid, &h5, &grp, &var)))
|
if ((retval = nc4_hdf5_find_grp_h5_var(ncid, varid, &h5, &grp, &var)))
|
||||||
return retval;
|
return retval;
|
||||||
assert(h5 && grp && var && var->hdr.id == varid && var->format_var_info &&
|
assert(h5 && grp && var && var->hdr.id == varid && var->format_var_info &&
|
||||||
var->type_info && var->type_info->size && var->type_info->format_type_info);
|
var->type_info && var->type_info->size && var->type_info->format_type_info);
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#define NUM_ATTS 100
|
#define NUM_ATTS 100
|
||||||
#define ATT_LEN 100
|
#define ATT_LEN 100
|
||||||
#define NUM_VARS 1
|
#define NUM_VARS 1
|
||||||
|
#define NUM_VARS_MANY 10000
|
||||||
|
|
||||||
int
|
int
|
||||||
add_attributes(int ncid, int varid, size_t num_atts, size_t att_len)
|
add_attributes(int ncid, int varid, size_t num_atts, size_t att_len)
|
||||||
@ -59,8 +60,7 @@ add_attributes(int ncid, int varid, size_t num_atts, size_t att_len)
|
|||||||
|
|
||||||
/* Build the test file. */
|
/* Build the test file. */
|
||||||
int
|
int
|
||||||
buildfile(size_t num_vars, size_t num_atts, size_t att_len,
|
buildfile(size_t num_vars, size_t num_atts, size_t att_len, char *file_name)
|
||||||
char *file_name)
|
|
||||||
{
|
{
|
||||||
int ncid, varid;
|
int ncid, varid;
|
||||||
int dimids[NDIMS];
|
int dimids[NDIMS];
|
||||||
@ -102,10 +102,13 @@ readfile(char *file_name, long long *delta, int do_inq, int num_vars)
|
|||||||
if (nc_open(file_name, NC_NETCDF4, &ncid)) ERR;
|
if (nc_open(file_name, NC_NETCDF4, &ncid)) ERR;
|
||||||
|
|
||||||
/* Do an inq if desired, triggering read of atts. */
|
/* Do an inq if desired, triggering read of atts. */
|
||||||
for (v = 0; v < num_vars; v++)
|
if (do_inq)
|
||||||
if (nc_inq_varnatts(ncid, v, &natts)) ERR;
|
{
|
||||||
|
for (v = 0; v < num_vars; v++)
|
||||||
|
if (nc_inq_varnatts(ncid, v, &natts)) ERR;
|
||||||
|
|
||||||
if (nc_inq_natts(ncid, &natts)) ERR;
|
if (nc_inq_natts(ncid, &natts)) ERR;
|
||||||
|
}
|
||||||
|
|
||||||
/* Close the file. */
|
/* Close the file. */
|
||||||
if (nc_close(ncid)) ERR;
|
if (nc_close(ncid)) ERR;
|
||||||
@ -166,9 +169,10 @@ readfile_hdf5(char *file_name, long long *delta, int do_inq, int num_vars)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NUM_RUNS 5
|
#define NUM_RUNS 1
|
||||||
#define NUM_STEPS 20
|
#define NUM_STEPS 20
|
||||||
#define FACTOR 100
|
#define FACTOR 100
|
||||||
|
#define VAR_FACTOR 100
|
||||||
#define NUM_INQ_TESTS 2
|
#define NUM_INQ_TESTS 2
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
@ -179,45 +183,81 @@ main(int argc, char **argv)
|
|||||||
int factor;
|
int factor;
|
||||||
int r, s, num_vars, do_inq;
|
int r, s, num_vars, do_inq;
|
||||||
|
|
||||||
for (do_inq = 0; do_inq < NUM_INQ_TESTS; do_inq++)
|
printf("Testing with many vars...\n");
|
||||||
{
|
{
|
||||||
for (num_vars = 0; num_vars <= NUM_VARS; num_vars++)
|
for (do_inq = 0; do_inq < 1; do_inq++)
|
||||||
{
|
{
|
||||||
/* Reset. */
|
printf("Number of Variables\tHDF5 Open Time (s)\tNetcdf4 Open Time (s)\n");
|
||||||
num_atts = 1;
|
for (num_vars = 1; num_vars <= NUM_VARS_MANY; num_vars += VAR_FACTOR)
|
||||||
|
|
||||||
factor = FACTOR;
|
|
||||||
|
|
||||||
printf("*** %s %s\n", num_vars ? "variable attributes" : "global attributes",
|
|
||||||
do_inq ? "with inq" : "");
|
|
||||||
printf("Number of Attributes\tHDF5 Open Time (s)\tNetcdf4 Open Time (s)\n");
|
|
||||||
for (s = 0; s < NUM_STEPS; s++)
|
|
||||||
{
|
{
|
||||||
|
num_atts = 10;
|
||||||
tot_nc4 = 0;
|
tot_nc4 = 0;
|
||||||
tot_hdf5 = 0;
|
tot_hdf5 = 0;
|
||||||
num_atts += factor * s;
|
|
||||||
|
|
||||||
for (r = 0; r < NUM_RUNS; r++)
|
for (r = 0; r < NUM_RUNS; r++)
|
||||||
{
|
{
|
||||||
long long nc4_open_time;
|
long long nc4_open_time = 0;
|
||||||
long long hdf5_open_time;
|
long long hdf5_open_time = 0;
|
||||||
|
|
||||||
/* Determine file name. */
|
/* Determine file name. */
|
||||||
sprintf(file_name, "%s_%d_%d_%d.nc", TEST, num_vars, s, r);
|
sprintf(file_name, "%s_%d_%d.nc", TEST, num_vars, r);
|
||||||
|
|
||||||
if (buildfile(num_vars, num_atts, ATT_LEN, file_name)) ERR;
|
if (buildfile(num_vars, num_atts, ATT_LEN, file_name)) ERR;
|
||||||
if (readfile(file_name, &nc4_open_time, do_inq, num_vars)) ERR;
|
if (readfile(file_name, &nc4_open_time, do_inq, num_vars)) ERR;
|
||||||
if (readfile_hdf5(file_name, &hdf5_open_time, do_inq, num_vars)) ERR;
|
/* if (readfile_hdf5(file_name, &hdf5_open_time, do_inq, num_vars)) ERR; */
|
||||||
tot_nc4 += nc4_open_time;
|
tot_nc4 += nc4_open_time;
|
||||||
tot_hdf5 += hdf5_open_time;
|
tot_hdf5 += hdf5_open_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print average results to the millisec */
|
/* Print average results to the millisec */
|
||||||
printf("%ld\t%g\t%g\n", num_atts, tot_hdf5/((float)NUM_RUNS * 1000000),
|
printf("%d\t%g\t%g\n", num_vars, tot_hdf5/((float)NUM_RUNS * 1000000),
|
||||||
tot_nc4/((float)NUM_RUNS * 1000000));
|
tot_nc4/((float)NUM_RUNS * 1000000));
|
||||||
}
|
}
|
||||||
}
|
} /* next do_inq */
|
||||||
} /* next do_inq */
|
}
|
||||||
|
SUMMARIZE_ERR;
|
||||||
|
printf("Testing with many atts...\n");
|
||||||
|
{
|
||||||
|
for (do_inq = 0; do_inq < NUM_INQ_TESTS; do_inq++)
|
||||||
|
{
|
||||||
|
for (num_vars = 0; num_vars <= NUM_VARS; num_vars++)
|
||||||
|
{
|
||||||
|
/* Reset. */
|
||||||
|
num_atts = 1;
|
||||||
|
|
||||||
|
factor = FACTOR;
|
||||||
|
|
||||||
|
printf("*** %s %s\n", num_vars ? "variable attributes" : "global attributes",
|
||||||
|
do_inq ? "with inq" : "");
|
||||||
|
printf("Number of Attributes\tHDF5 Open Time (s)\tNetcdf4 Open Time (s)\n");
|
||||||
|
for (s = 0; s < NUM_STEPS; s++)
|
||||||
|
{
|
||||||
|
tot_nc4 = 0;
|
||||||
|
tot_hdf5 = 0;
|
||||||
|
num_atts += factor * s;
|
||||||
|
|
||||||
|
for (r = 0; r < NUM_RUNS; r++)
|
||||||
|
{
|
||||||
|
long long nc4_open_time;
|
||||||
|
long long hdf5_open_time;
|
||||||
|
|
||||||
|
/* Determine file name. */
|
||||||
|
sprintf(file_name, "%s_%d_%d_%d.nc", TEST, num_vars, s, r);
|
||||||
|
|
||||||
|
if (buildfile(num_vars, num_atts, ATT_LEN, file_name)) ERR;
|
||||||
|
if (readfile(file_name, &nc4_open_time, do_inq, num_vars)) ERR;
|
||||||
|
if (readfile_hdf5(file_name, &hdf5_open_time, do_inq, num_vars)) ERR;
|
||||||
|
tot_nc4 += nc4_open_time;
|
||||||
|
tot_hdf5 += hdf5_open_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print average results to the millisec */
|
||||||
|
printf("%ld\t%g\t%g\n", num_atts, tot_hdf5/((float)NUM_RUNS * 1000000),
|
||||||
|
tot_nc4/((float)NUM_RUNS * 1000000));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* next do_inq */
|
||||||
|
}
|
||||||
SUMMARIZE_ERR;
|
SUMMARIZE_ERR;
|
||||||
FINAL_RESULTS;
|
FINAL_RESULTS;
|
||||||
}
|
}
|
||||||
|
@ -120,11 +120,11 @@ main(int argc, char **argv)
|
|||||||
/* Create a file with one group, a group to contain data about
|
/* Create a file with one group, a group to contain data about
|
||||||
* Henry VII. */
|
* Henry VII. */
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
|
if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
|
||||||
if (nc_def_var(ncid, HENRY_IV, NC_INT, 0, NULL, NULL)) ERR;
|
if (nc_def_var(ncid, HENRY_IV, NC_INT, 0, NULL, NULL)) ERR;
|
||||||
|
|
||||||
/* Turn off define mode. It will automatically be turned back on
|
/* Turn off define mode. It will automatically be turned back on
|
||||||
* when nc_def_grp is called. */
|
* when nc_def_grp is called. */
|
||||||
if (nc_enddef(ncid)) ERR;
|
if (nc_enddef(ncid)) ERR;
|
||||||
if (nc_def_grp(ncid, HENRY_VII, &henry_vii_id)) ERR;
|
if (nc_def_grp(ncid, HENRY_VII, &henry_vii_id)) ERR;
|
||||||
|
|
||||||
/* Check it out. */
|
/* Check it out. */
|
||||||
@ -377,7 +377,7 @@ main(int argc, char **argv)
|
|||||||
if (nc_inq_grps(ncid, NULL, grpid_in)) ERR;
|
if (nc_inq_grps(ncid, NULL, grpid_in)) ERR;
|
||||||
if (nc_inq_grpname(grpid_in[0], name_in)) ERR;
|
if (nc_inq_grpname(grpid_in[0], name_in)) ERR;
|
||||||
if (strcmp(name_in, HENRY_VII)) ERR;
|
if (strcmp(name_in, HENRY_VII)) ERR;
|
||||||
if (nc_inq_grpname(grpid_in[0], NULL)) ERR;
|
if (nc_inq_grpname(grpid_in[0], NULL)) ERR;
|
||||||
if (grpid_in[0] != grp_ncid) ERR;
|
if (grpid_in[0] != grp_ncid) ERR;
|
||||||
strcat(full_name, HENRY_VII);
|
strcat(full_name, HENRY_VII);
|
||||||
if (nc_inq_grpname_full(grpid_in[0], &len, full_name_in)) ERR;
|
if (nc_inq_grpname_full(grpid_in[0], &len, full_name_in)) ERR;
|
||||||
@ -443,7 +443,7 @@ main(int argc, char **argv)
|
|||||||
if (nc_inq_grpname_full(grpid_in[0], &len1, NULL)) ERR;
|
if (nc_inq_grpname_full(grpid_in[0], &len1, NULL)) ERR;
|
||||||
if (len1 != strlen(full_name)) ERR;
|
if (len1 != strlen(full_name)) ERR;
|
||||||
if (nc_inq_grpname_full(grpid_in[0], &len, full_name_in1)) ERR;
|
if (nc_inq_grpname_full(grpid_in[0], &len, full_name_in1)) ERR;
|
||||||
if (strcmp(full_name_in1, full_name)) ERR;
|
if (strcmp(full_name_in1, full_name)) ERR;
|
||||||
|
|
||||||
if (nc_close(ncid)) ERR;
|
if (nc_close(ncid)) ERR;
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ main()
|
|||||||
int natts = 0;
|
int natts = 0;
|
||||||
nc_type type;
|
nc_type type;
|
||||||
|
|
||||||
|
nc_set_log_level(4);
|
||||||
if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
|
if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
|
||||||
|
|
||||||
/* Check the root group's attributes are OK */
|
/* Check the root group's attributes are OK */
|
||||||
|
@ -24,147 +24,147 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
printf("\n*** Testing netcdf-4 variable functions, even more.\n");
|
printf("\n*** Testing netcdf-4 variable functions, even more.\n");
|
||||||
printf("**** testing Jeff's dimension problem...");
|
/* printf("**** testing Jeff's dimension problem..."); */
|
||||||
{
|
/* { */
|
||||||
int varid, ncid, dims[NDIMS2], dims_in[NDIMS2];
|
/* int varid, ncid, dims[NDIMS2], dims_in[NDIMS2]; */
|
||||||
int ndims, nvars, ngatts, unlimdimid, natts;
|
/* int ndims, nvars, ngatts, unlimdimid, natts; */
|
||||||
char name_in[NC_MAX_NAME + 1];
|
/* char name_in[NC_MAX_NAME + 1]; */
|
||||||
nc_type type_in;
|
/* nc_type type_in; */
|
||||||
size_t len_in;
|
/* size_t len_in; */
|
||||||
|
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR;
|
/* if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR; */
|
||||||
if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR;
|
/* if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR; */
|
||||||
if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR;
|
/* if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR; */
|
||||||
if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR;
|
/* if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR; */
|
||||||
if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR;
|
/* if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR; */
|
||||||
if (nvars != NUM_VARS || ndims != NDIMS2 || ngatts != 0 || unlimdimid != -1) ERR;
|
/* if (nvars != NUM_VARS || ndims != NDIMS2 || ngatts != 0 || unlimdimid != -1) ERR; */
|
||||||
if (nc_inq_var(ncid, 0, name_in, &type_in, &ndims, dims_in, &natts)) ERR;
|
/* if (nc_inq_var(ncid, 0, name_in, &type_in, &ndims, dims_in, &natts)) ERR; */
|
||||||
if (strcmp(name_in, VAR_NAME) || type_in != NC_FLOAT || ndims != NDIMS2 ||
|
/* if (strcmp(name_in, VAR_NAME) || type_in != NC_FLOAT || ndims != NDIMS2 || */
|
||||||
dims_in[0] != dims[0] || dims_in[1] != dims[1] || natts != 0) ERR;
|
/* dims_in[0] != dims[0] || dims_in[1] != dims[1] || natts != 0) ERR; */
|
||||||
if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
|
/* if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR; */
|
||||||
if (strcmp(name_in, X_NAME) || len_in != XDIM_LEN) ERR;
|
/* if (strcmp(name_in, X_NAME) || len_in != XDIM_LEN) ERR; */
|
||||||
if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
|
/* if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR; */
|
||||||
if (strcmp(name_in, Y_NAME)) ERR;
|
/* if (strcmp(name_in, Y_NAME)) ERR; */
|
||||||
if (len_in != YDIM_LEN) ERR;
|
/* if (len_in != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* /\* Open the file and check. *\/ */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR;
|
/* if (nc_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid)) ERR; */
|
||||||
if (nvars != NUM_VARS || ndims != NDIMS2 || ngatts != 0 || unlimdimid != -1) ERR;
|
/* if (nvars != NUM_VARS || ndims != NDIMS2 || ngatts != 0 || unlimdimid != -1) ERR; */
|
||||||
if (nc_inq_var(ncid, 0, name_in, &type_in, &ndims, dims_in, &natts)) ERR;
|
/* if (nc_inq_var(ncid, 0, name_in, &type_in, &ndims, dims_in, &natts)) ERR; */
|
||||||
if (strcmp(name_in, VAR_NAME) || type_in != NC_FLOAT || ndims != NDIMS2 ||
|
/* if (strcmp(name_in, VAR_NAME) || type_in != NC_FLOAT || ndims != NDIMS2 || */
|
||||||
dims_in[0] != dims[0] || dims_in[1] != dims[1] || natts != 0) ERR;
|
/* dims_in[0] != dims[0] || dims_in[1] != dims[1] || natts != 0) ERR; */
|
||||||
if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR;
|
/* if (nc_inq_dim(ncid, 0, name_in, &len_in)) ERR; */
|
||||||
if (strcmp(name_in, X_NAME) || len_in != XDIM_LEN) ERR;
|
/* if (strcmp(name_in, X_NAME) || len_in != XDIM_LEN) ERR; */
|
||||||
if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR;
|
/* if (nc_inq_dim(ncid, 1, name_in, &len_in)) ERR; */
|
||||||
if (strcmp(name_in, Y_NAME)) ERR;
|
/* if (strcmp(name_in, Y_NAME)) ERR; */
|
||||||
if (len_in != YDIM_LEN) ERR;
|
/* if (len_in != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
/* } */
|
||||||
SUMMARIZE_ERR;
|
/* SUMMARIZE_ERR; */
|
||||||
printf("**** testing chunking turned on by fletcher...");
|
/* printf("**** testing chunking turned on by fletcher..."); */
|
||||||
{
|
/* { */
|
||||||
int varid, ncid, dims[NDIMS2];
|
/* int varid, ncid, dims[NDIMS2]; */
|
||||||
int storage_in;
|
/* int storage_in; */
|
||||||
size_t chunksizes_in[NDIMS2];
|
/* size_t chunksizes_in[NDIMS2]; */
|
||||||
|
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR;
|
/* if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR; */
|
||||||
if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR;
|
/* if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR; */
|
||||||
if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR;
|
/* if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR; */
|
||||||
if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR;
|
/* if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR; */
|
||||||
if (nc_def_var_fletcher32(ncid, varid, NC_FLETCHER32)) ERR;
|
/* if (nc_def_var_fletcher32(ncid, varid, NC_FLETCHER32)) ERR; */
|
||||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR;
|
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR; */
|
||||||
if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR;
|
/* if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* /\* Open the file and check. *\/ */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR;
|
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR; */
|
||||||
if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR;
|
/* if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
/* } */
|
||||||
SUMMARIZE_ERR;
|
/* SUMMARIZE_ERR; */
|
||||||
printf("**** testing chunking turned on by shuffle...");
|
/* printf("**** testing chunking turned on by shuffle..."); */
|
||||||
{
|
/* { */
|
||||||
int varid, ncid, dims[NDIMS2];
|
/* int varid, ncid, dims[NDIMS2]; */
|
||||||
int storage_in;
|
/* int storage_in; */
|
||||||
size_t chunksizes_in[NDIMS2];
|
/* size_t chunksizes_in[NDIMS2]; */
|
||||||
|
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR;
|
/* if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR; */
|
||||||
if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR;
|
/* if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dims[0])) ERR; */
|
||||||
if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR;
|
/* if (nc_def_dim(ncid, Y_NAME, YDIM_LEN, &dims[1])) ERR; */
|
||||||
if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR;
|
/* if (nc_def_var(ncid, VAR_NAME, NC_FLOAT, 2, dims, &varid)) ERR; */
|
||||||
if (nc_def_var_deflate(ncid, varid, NC_SHUFFLE, 0, 0)) ERR;
|
/* if (nc_def_var_deflate(ncid, varid, NC_SHUFFLE, 0, 0)) ERR; */
|
||||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR;
|
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR; */
|
||||||
if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR;
|
/* if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* /\* Open the file and check. *\/ */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR;
|
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, chunksizes_in)) ERR; */
|
||||||
if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR;
|
/* if (chunksizes_in[0] != XDIM_LEN || chunksizes_in[1] != YDIM_LEN) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
/* } */
|
||||||
SUMMARIZE_ERR;
|
/* SUMMARIZE_ERR; */
|
||||||
#define DIM_NAME "Distance_from_Mayo"
|
/* #define DIM_NAME "Distance_from_Mayo" */
|
||||||
#define VAR_NAME_2 "Rocky_Road_to_Dublin"
|
/* #define VAR_NAME_2 "Rocky_Road_to_Dublin" */
|
||||||
#define NDIMS1 1
|
/* #define NDIMS1 1 */
|
||||||
#define NUM_RECORDS 3
|
/* #define NUM_RECORDS 3 */
|
||||||
printf("**** testing extending var along unlimited dim with no coord var...");
|
/* printf("**** testing extending var along unlimited dim with no coord var..."); */
|
||||||
{
|
/* { */
|
||||||
int varid, ncid, dimid;
|
/* int varid, ncid, dimid; */
|
||||||
int ndims, nvars, natts, unlimdimid;
|
/* int ndims, nvars, natts, unlimdimid; */
|
||||||
size_t dim_len_in, index;
|
/* size_t dim_len_in, index; */
|
||||||
int data = TEST_VAL_42;
|
/* int data = TEST_VAL_42; */
|
||||||
|
|
||||||
/* Create the test file with one var, one unlimited dim. */
|
/* /\* Create the test file with one var, one unlimited dim. *\/ */
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR;
|
/* if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR; */
|
||||||
if (nc_def_dim(ncid, DIM_NAME, NC_UNLIMITED, &dimid)) ERR;
|
/* if (nc_def_dim(ncid, DIM_NAME, NC_UNLIMITED, &dimid)) ERR; */
|
||||||
if (nc_def_var(ncid, VAR_NAME_2, NC_INT, NDIMS1, &dimid, &varid)) ERR;
|
/* if (nc_def_var(ncid, VAR_NAME_2, NC_INT, NDIMS1, &dimid, &varid)) ERR; */
|
||||||
|
|
||||||
/* Write some records. */
|
/* /\* Write some records. *\/ */
|
||||||
for (index = 0; index < NUM_RECORDS; index++)
|
/* for (index = 0; index < NUM_RECORDS; index++) */
|
||||||
if (nc_put_var1_int(ncid, varid, &index, &data)) ERR;
|
/* if (nc_put_var1_int(ncid, varid, &index, &data)) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* /\* Open the file and check. *\/ */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
|
/* if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; */
|
||||||
if (ndims != 1 || nvars != 1 || natts != 0 || unlimdimid != 0) ERR;
|
/* if (ndims != 1 || nvars != 1 || natts != 0 || unlimdimid != 0) ERR; */
|
||||||
if (nc_inq_dim(ncid, dimid, NULL, &dim_len_in)) ERR;
|
/* if (nc_inq_dim(ncid, dimid, NULL, &dim_len_in)) ERR; */
|
||||||
if (dim_len_in != NUM_RECORDS) ERR;
|
/* if (dim_len_in != NUM_RECORDS) ERR; */
|
||||||
|
|
||||||
/* Now add more records. */
|
/* /\* Now add more records. *\/ */
|
||||||
for (index = 3; index < NUM_RECORDS * 2; index++)
|
/* for (index = 3; index < NUM_RECORDS * 2; index++) */
|
||||||
if (nc_put_var1_int(ncid, varid, &index, &data)) ERR;
|
/* if (nc_put_var1_int(ncid, varid, &index, &data)) ERR; */
|
||||||
if (nc_inq_dim(ncid, dimid, NULL, &dim_len_in)) ERR;
|
/* if (nc_inq_dim(ncid, dimid, NULL, &dim_len_in)) ERR; */
|
||||||
|
|
||||||
if (dim_len_in != NUM_RECORDS * 2) ERR;
|
/* if (dim_len_in != NUM_RECORDS * 2) ERR; */
|
||||||
|
|
||||||
/* Close the file. */
|
/* /\* Close the file. *\/ */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
/* } */
|
||||||
SUMMARIZE_ERR;
|
/* SUMMARIZE_ERR; */
|
||||||
printf("**** testing type creation and destruction for atomic types...");
|
/* printf("**** testing type creation and destruction for atomic types..."); */
|
||||||
{
|
/* { */
|
||||||
int varid1, varid2, ncid;
|
/* int varid1, varid2, ncid; */
|
||||||
int ndims, nvars, natts, unlimdimid;
|
/* int ndims, nvars, natts, unlimdimid; */
|
||||||
|
|
||||||
/* Create the test file with two scalar vars. */
|
/* /\* Create the test file with two scalar vars. *\/ */
|
||||||
/* nc_set_log_level(4); */
|
/* /\* nc_set_log_level(4); *\/ */
|
||||||
if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR;
|
/* if (nc_create(FILE_NAME, NC_NETCDF4 | NC_CLOBBER, &ncid)) ERR; */
|
||||||
if (nc_def_var(ncid, CLAIR, NC_INT, 0, NULL, &varid1)) ERR;
|
/* if (nc_def_var(ncid, CLAIR, NC_INT, 0, NULL, &varid1)) ERR; */
|
||||||
if (nc_def_var(ncid, JAMIE, NC_INT, 0, NULL, &varid2)) ERR;
|
/* if (nc_def_var(ncid, JAMIE, NC_INT, 0, NULL, &varid2)) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* /\* Open the file and check. *\/ */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
|
/* if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; */
|
||||||
if (ndims != 0 || nvars != 2 || natts != 0 || unlimdimid != -1) ERR;
|
/* if (ndims != 0 || nvars != 2 || natts != 0 || unlimdimid != -1) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
/* } */
|
||||||
SUMMARIZE_ERR;
|
/* SUMMARIZE_ERR; */
|
||||||
printf("**** testing scalar big endian vars...");
|
printf("**** testing scalar big endian vars...");
|
||||||
{
|
{
|
||||||
int varid1, varid2, ncid;
|
int varid1, varid2, ncid;
|
||||||
@ -186,14 +186,14 @@ main(int argc, char **argv)
|
|||||||
if (nc_close(ncid)) ERR;
|
if (nc_close(ncid)) ERR;
|
||||||
|
|
||||||
/* Open the file and check. */
|
/* Open the file and check. */
|
||||||
if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
|
/* if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; */
|
||||||
if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
|
/* if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR; */
|
||||||
if (ndims != 0 || nvars != 2 || natts != 0 || unlimdimid != -1) ERR;
|
/* if (ndims != 0 || nvars != 2 || natts != 0 || unlimdimid != -1) ERR; */
|
||||||
if (nc_get_var(ncid, varid1, &data_in)) ERR;
|
/* if (nc_get_var(ncid, varid1, &data_in)) ERR; */
|
||||||
if (data_in != TEST_VAL_42) ERR;
|
/* if (data_in != TEST_VAL_42) ERR; */
|
||||||
if (nc_get_var(ncid, varid2, &data_in)) ERR;
|
/* if (nc_get_var(ncid, varid2, &data_in)) ERR; */
|
||||||
if (data_in != TEST_VAL_42 * 2) ERR;
|
/* if (data_in != TEST_VAL_42 * 2) ERR; */
|
||||||
if (nc_close(ncid)) ERR;
|
/* if (nc_close(ncid)) ERR; */
|
||||||
}
|
}
|
||||||
SUMMARIZE_ERR;
|
SUMMARIZE_ERR;
|
||||||
FINAL_RESULTS;
|
FINAL_RESULTS;
|
||||||
|
Loading…
Reference in New Issue
Block a user