From d64b85168fad6fd7a8bebe3a12e386b0f8c6a41a Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Mon, 19 Feb 2024 10:18:25 +0100 Subject: [PATCH] netCDF: use timevar buffer --- ChangeLog | 4 ++++ src/stream_cdf_i.c | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5877216c..dc90f14dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ * Version 2.4.0 released +2024-02-19 Uwe Schulzweida + + * netCDF: use timevar buffer + 2024-02-05 Uwe Schulzweida * fdb5 interface: update to release 5.11.29 diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 24e155a86..e75a983c6 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -4249,10 +4249,18 @@ wrf_read_timestep(int fileID, int nctimevarid, int tsID) } static double -get_timevalue(int fileID, int nctimevarid, size_t ncStepIndex) +get_timevalue(int fileID, int nctimevarid, size_t ncStepIndex, double *timevarBuffer) { double timevalue = 0.0; - cdf_get_var1_double(fileID, nctimevarid, &ncStepIndex, &timevalue); + + if (timevarBuffer) + { + timevalue = timevarBuffer[ncStepIndex]; + } + else + { + cdf_get_var1_double(fileID, nctimevarid, &ncStepIndex, &timevalue); + } if (timevalue >= NC_FILL_DOUBLE || timevalue < -NC_FILL_DOUBLE) timevalue = 0.0; @@ -4295,8 +4303,11 @@ cdf_read_timesteps(int numTimesteps, stream_t *streamptr, taxis_t *taxis0) } else { + double *timevarBuffer = (double *) malloc(numTimesteps * sizeof(double)); + cdf_get_var_double(fileID, nctimevarid, timevarBuffer); for (int tsID = 0; tsID < numTimesteps; ++tsID) - vDateTimeList[tsID] = cdi_decode_timeval(get_timevalue(fileID, nctimevarid, tsID), taxis0); + vDateTimeList[tsID] = cdi_decode_timeval(get_timevalue(fileID, nctimevarid, tsID, timevarBuffer), taxis0); + if (timevarBuffer) free(timevarBuffer); } } @@ -4367,7 +4378,7 @@ cdf_read_timesteps(int numTimesteps, stream_t *streamptr, taxis_t *taxis0) { size_t ncStepIndex = streamptr->tsteps[tsID].ncStepIndex; taxis_t *taxis = &streamptr->tsteps[tsID].taxis; - cdi_set_forecast_period(get_timevalue(fileID, leadtimeid, ncStepIndex), taxis); + cdi_set_forecast_period(get_timevalue(fileID, leadtimeid, ncStepIndex, NULL), taxis); } } } -- GitLab