/* Initialize iteration for a variable. Just a wrapper for * nc_blkio_init() that makes the netCDF calls needed to initialize * lower-level iterator. */ int nc_get_iter(Symbol* vsym, size_t bufsize, /* size in bytes of memory buffer */ nciter_t *iterp /* returned opaque iteration state */) { int stat = NC_NOERR; Symbol* vartype; size_t value_size; /* size in bytes of each variable element */ int ndims; /* number of dimensions for variable */ size_t dimsizes[NC_MAX_VAR_DIMS]; /* variable dimension sizes */ long long nvalues = 1; int dim; memset((void*)iterp,0,sizeof(nciter_t)); /* make sure it is initialized */ stat = nciter_ndims(vsym, &ndims); CHECK(stat, nciter_ndims); stat = nciter_dimlens(vsym,dimsizes); CHECK(stat, nciter_dimlens); /* compute total # elements */ nvalues=1; for(dim = 0; dim < ndims; dim++) { nvalues *= dimsizes[dim]; } stat = nciter_vartype(vsym, &vartype); CHECK(stat, nciter_vartype); stat = nciter_valuesize(vartype,&value_size); CHECK(stat, nciter_valuesize); stat = nc_blkio_init(bufsize, value_size, ndims, dimsizes, iterp); CHECK(stat, nc_blkio_init); iterp->to_get = 0; return stat; }
/* Initialize iteration for a variable. Just a wrapper for * nc_blkio_init() that makes the netCDF calls needed to initialize * lower-level iterator. */ int nc_get_iter(Symbol* vsym, size_t bufsize, /* size in bytes of memory buffer */ nciter_t *iterp /* returned opaque iteration state */) { int stat = NC_NOERR; Symbol* vartype; size_t value_size; /* size in bytes of each variable element */ int ndims; /* number of dimensions for variable */ size_t dimsizes[NC_MAX_VAR_DIMS]; /* variable dimension sizes */ size_t chunksizes[NC_MAX_VAR_DIMS]; /* corresponding chunk sizes */ long long nvalues = 1; int dim; int chunked = 0; memset((void*)iterp,0,sizeof(nciter_t)); /* make sure it is initialized */ stat = nciter_ndims(vsym, &ndims); CHECK(stat, nciter_ndims); stat = nciter_dimlens(vsym,dimsizes); /* compute total # elements */ nvalues=1; for(dim = 0; dim < ndims; dim++) { nvalues *= dimsizes[dim]; } stat = nciter_vartype(vsym, &vartype); CHECK(stat, nciter_vartype); stat = nciter_valuesize(vartype,&value_size); CHECK(stat, nciter_valuesize); #ifdef USE_NETCDF4 #ifdef DOCHUNK { int contig = 1; if(ndims > 0) { stat = nc_inq_var_chunking(ncid, varid, &contig, NULL); CHECK(stat, nc_inq_var_chunking); } if(contig == 0) { /* chunked */ stat = nc_inq_var_chunking(ncid, varid, &contig, chunksizes); CHECK(stat, nc_inq_var_chunking); chunked = 1; } } #else chunked = 0; #endif #endif /* USE_NETCDF4 */ stat = nc_blkio_init(bufsize, value_size, ndims, dimsizes, chunked, chunksizes, iterp); CHECK(stat, nc_blkio_init); iterp->to_get = 0; return stat; }