diff --git a/ChangeLog b/ChangeLog index 84c861ed9651d9b33ffcfb29647f747b773b1766..4a0993b11732ffa778063adad8c6e2b7eb9c8555 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-11-?? Uwe Schulzweida + + * using CGRIBEX library version 2.3.1 + * Version 2.5.0 released + +2024-10-22 Uwe Schulzweida + + * NetCDF: search for time dimension only if it is undefined + 2024-10-21 Uwe Schulzweida * NetCDF: use positive attribute only for variables with undefined status diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 83d0f56961e7e58b39b5a20c13844bd1aa406a1a..a58121a27b819e4e3933634768aaa35dd9a98fc3 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -1236,8 +1236,7 @@ set_vars_timetype(int nvars, ncvar_t *ncvars, int timedimid) ncvar_t *ncvar = &ncvars[varid]; if (ncvar->ndims > 0) { - int *dimidsp = ncvar->dimids; - if (timedimid == dimidsp[0]) + if (timedimid == ncvar->dimids[0]) { ncvar->timetype = TIME_VARYING; cdf_set_dim(ncvar, 0, T_AXIS); @@ -1245,9 +1244,9 @@ set_vars_timetype(int nvars, ncvar_t *ncvars, int timedimid) else { int nvdims = ncvar->ndims; - for (int dimid = 1; dimid < nvdims; dimid++) + for (int vdimid = 1; vdimid < nvdims; vdimid++) { - if (timedimid == dimidsp[dimid]) + if (timedimid == ncvar->dimids[vdimid]) { Warning("Time must be the first dimension! Unsupported array structure, skipped variable %s!", ncvar->name); ncvar->varStatus = CoordVar; @@ -1259,7 +1258,7 @@ set_vars_timetype(int nvars, ncvar_t *ncvars, int timedimid) } static void -cdf_scan_vars_attr(int nvars, ncvar_t *ncvars, int ndims, ncdim_t *ncdims, int modelID) +scan_vars_attr(int nvars, ncvar_t *ncvars, int ndims, ncdim_t *ncdims, int modelID) { int nchecked_vars = 0; enum @@ -1501,13 +1500,15 @@ cdf_scan_vars_attr(int nvars, ncvar_t *ncvars, int ndims, ncdim_t *ncdims, int m else if (str_is_equal(attstring, "up")) ncvar->positive = POSITIVE_UP; - if (ncvar->varStatus == UndefVar && (nvdims == 0 || (nvdims == 1 && ncvar->dimtypes[0] == CDI_UNDEFID))) + int dimid0 = ncvar->dimids[0]; + if (ncvar->varStatus == UndefVar + && (nvdims == 0 || (nvdims == 1 && ncvar->dimtypes[0] == CDI_UNDEFID && ncdims[dimid0].ncvarid == CDI_UNDEFID))) { if (nvdims == 1) { cdf_set_var(ncvar, CoordVar); cdf_set_dim(ncvar, 0, Z_AXIS); - if (ncvar->dimids[0] < ndims) ncdims[ncvar->dimids[0]].dimtype = Z_AXIS; + if (dimid0 < ndims) ncdims[dimid0].dimtype = Z_AXIS; } else if (nvdims == 0) { @@ -1654,7 +1655,7 @@ cdf_set_chunk_info(stream_t *streamptr, int nvars, ncvar_t *ncvars) } static void -cdfVerifyVarAttr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) +verify_vars_attr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) { nc_type atttype; size_t attlen; @@ -4627,16 +4628,16 @@ cdfInqContents(stream_t *streamptr) stream_set_ncdims(streamptr, ndims, ncdims); - if (CDI_Debug) cdf_print_vars(ncvars, nvars, "cdf_scan_vars_attr"); + if (CDI_Debug) cdf_print_vars(ncvars, nvars, "scan_vars_attr"); // scan attributes of all variables set_vars_timetype(nvars, ncvars, timedimid); - cdf_scan_vars_attr(nvars, ncvars, ndims, ncdims, modelID); - cdfVerifyVarAttr(nvars, ncvars, ncdims); + scan_vars_attr(nvars, ncvars, ndims, ncdims, modelID); + verify_vars_attr(nvars, ncvars, ncdims); if (CDI_Convert_Cubesphere) check_cube_sphere(vlistID, nvars, ncvars, ncdims); - if (CDI_Debug) cdf_print_vars(ncvars, nvars, "find coordinates vars"); + if (CDI_Debug) cdf_print_vars(ncvars, nvars, "find_varying_data_vars"); find_varying_data_vars(timedimid, nvars, ncvars);