diff --git a/ChangeLog b/ChangeLog index 6ad18d97922849751e979a95c5bdc6f7a3c7959c..f7eb7ff3d6a217b032a9ae8ff756614e337ee15d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,10 @@ * using CGRIBEX library version 2.3.1 * Version 2.5.0 released +2024-11-04 Uwe Schulzweida + + * reset chunktype if z and t are chunked + 2024-10-24 Uwe Schulzweida * lock access to NCZARR in CDI_Threadsafe mode diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index dd32e6e2b9dcd07d1d155169ea6089e835ee98a6..29c21e99495bebe9db62e18b0934e410d521ebef 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -2075,19 +2075,21 @@ grid_set_chunktype(grid_t *grid, ncvar_t *ncvar) if (ncvar->isChunked) { int ndims = ncvar->ndims; + size_t chunkSizeAllDims = 1; + for (int i = 0; i < ndims; ++i) chunkSizeAllDims *= ncvar->chunks[i]; + size_t dimN = ncvar->chunks[ndims - 1]; if (grid->type == GRID_UNSTRUCTURED) { - size_t chunkSize = ncvar->chunks[ndims - 1]; + size_t chunkSize = (chunkSizeAllDims == dimN) ? dimN : 0; ncvar->chunkType = (chunkSize == grid->size) ? CDI_CHUNK_GRID : CDI_CHUNK_AUTO; if (ncvar->chunkType == CDI_CHUNK_AUTO && chunkSize > 1) ncvar->chunkSize = (int) chunkSize; } else { - if (grid->x.size > 1 && grid->y.size > 1 && ndims > 1 && grid->x.size == ncvar->chunks[ndims - 1] - && grid->y.size == ncvar->chunks[ndims - 2]) + if (grid->x.size > 1 && grid->y.size > 1 && ndims > 1 && grid->x.size == dimN && grid->y.size == ncvar->chunks[ndims - 2]) ncvar->chunkType = CDI_CHUNK_GRID; - else if (grid->x.size > 1 && grid->x.size == ncvar->chunks[ndims - 1]) + else if (grid->x.size > 1 && grid->x.size == dimN && chunkSizeAllDims == dimN) ncvar->chunkType = CDI_CHUNK_LINES; else ncvar->chunkType = CDI_CHUNK_AUTO;