diff --git a/ChangeLog b/ChangeLog index b16083579369f9e01322f6d1ae7057cb8e16ec9f..5595a022a8799ac48d9991311cff8a9b2083d067 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2024-03-22 Uwe Schulzweida + + * gribapi_get_timeunits: check unitsOfTime (bug fix) [report: Chris Barnard] + 2024-03-20 Uwe Schulzweida * calc_chunk_cache_size: improve for 4D chunked data diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c index 0b3ac8a7e818cdf2318fe07d3c0859ceb7050a1b..e13553a322ebf3ccc43595686cb71f62827c295b 100644 --- a/src/stream_gribapi.c +++ b/src/stream_gribapi.c @@ -87,8 +87,14 @@ gribapi_get_timeunits(grib_handle *gh) { long unitsOfTime = -1; grib_get_long(gh, "indicatorOfUnitOfTimeRange", &unitsOfTime); + if (unitsOfTime == -1) grib_get_long(gh, "indicatorOfUnitForTimeIncrement", &unitsOfTime); - GRIB_CHECK(my_grib_set_long(gh, "stepUnits", unitsOfTime), 0); + if (unitsOfTime != -1) + { + long stepUnits = -1; + grib_get_long(gh, "stepUnits", &stepUnits); + if (stepUnits == -1 && stepUnits != unitsOfTime) GRIB_CHECK(my_grib_set_long(gh, "stepUnits", unitsOfTime), 0); + } return get_timeunits(unitsOfTime); } @@ -114,7 +120,7 @@ gribapiGetSteps(grib_handle *gh, int timeunits, int *startStep, int *endStep) *endStep = *startStep; status = grib_get_long(gh, "endStep", &lpar); if (status == 0) *endStep = (int) (((double) lpar * timeunits_factor(timeunits, timeunits2)) + 0.5); - // printf("%d %d %d %d %d %g\n", *startStep, *endStep, lpar, timeunits, timeunits2, timeunits_factor(timeunits, timeunits2)); + // printf("%d %d %ld %d %d %g\n", *startStep, *endStep, lpar, timeunits, timeunits2, timeunits_factor(timeunits, timeunits2)); } static CdiDateTime