Index: examples/wflow_rhine_sbm/wflow_sbm.ini =================================================================== diff -u -r7a1b4459699193da5494716e8af474d62e866ec9 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision 7a1b4459699193da5494716e8af474d62e866ec9) +++ examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -11,8 +11,8 @@ [run] # either a runinfo file or a start and end-time are required #runinfo=runinfo.xml -starttime= 1995-01-31 00:00:00 GMT -endtime= 1995-02-28 00:00:00 GMT +#starttime= 1995-01-31 00:00:00 GMT +#endtime= 1995-02-28 00:00:00 GMT #starttime = None #endtime= None runinfo = None Index: wflow-py/wflow/wf_DynamicFramework.py =================================================================== diff -u -r1ac9ad97bb774c2cec0df8fbe1a4b25dbbf23151 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 1ac9ad97bb774c2cec0df8fbe1a4b25dbbf23151) +++ wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -269,7 +269,7 @@ firstTimestep = 1 # self._userModel()._setNrTimeSteps(lastTimeStep - firstTimestep + 1) - self._userModel()._setNrTimeSteps(lastTimeStep + 1) + self._userModel()._setNrTimeSteps(lastTimeStep) self._d_firstTimestep = 1 self._userModel()._setFirstTimeStep(1) self._d_lastTimestep = lastTimeStep @@ -665,12 +665,11 @@ self.timestepsecs = int(configget(self._userModel().config, 'run', 'timestepsecs', "86400")) duration = self.datetime_laststep - self.datetime_firststep nrseconds = duration.total_seconds() - self._userModel()._setNrTimeSteps(int(nrseconds / self.timestepsecs)) + self._userModel()._setNrTimeSteps(int(nrseconds / self.timestepsecs) + 1) self._userModel().timestepsecs = self.timestepsecs self._d_firstTimestep = 1 self._userModel()._setFirstTimeStep(self._d_firstTimestep) - st = int(nrseconds / self.timestepsecs) + 1 - + self._d_lastTimestep = int(nrseconds / self.timestepsecs) + self._d_firstTimestep else: self.logger.info( "Not enough information in the [run] section. Need start and end time or a runinfo.xml file.... Reverting to default date/time") @@ -687,11 +686,13 @@ self._userModel().timestepsecs = self.timestepsecs duration = self.datetime_laststep - self.datetime_firststep nrseconds = duration.total_seconds() - self._userModel()._setNrTimeSteps(int(nrseconds / self.timestepsecs)) + self._userModel()._setNrTimeSteps(int(nrseconds / self.timestepsecs) + 1) self._d_firstTimestep = 1 self._userModel()._setFirstTimeStep(self._d_firstTimestep) - self._d_lastTimestep = int(nrseconds / self.timestepsecs) + self._d_lastTimestep = int(nrseconds / self.timestepsecs) + self._d_firstTimestep + + if self.ncfile != "None": mstacks = configsection(self._userModel().config, "inputmapstacks") varlst = [] @@ -707,7 +708,7 @@ meta['runId'] = runId self.NcOutput = netcdfoutput(os.path.join(caseName, runId, self.ncoutfile), self.logger, self.datetime_firststep, - self._d_lastTimestep - self._d_firstTimestep, + self._userModel().nrTimeSteps(), maxbuf=buffer, metadata=meta, EPSG=self.EPSG, timestepsecs=self.timestepsecs,Format=self.ncfileformat, zlib=self.ncfilecompression,least_significant_digit=self.ncfiledigits) Index: wflow-py/wflow/wf_netcdfio.py =================================================================== diff -u -ra102d31a70edb76290d7a7ec392483e23c948286 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision a102d31a70edb76290d7a7ec392483e23c948286) +++ wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -59,7 +59,7 @@ return X,Y -def prepare_nc(trgFile, timeList, x, y, metadata, logger, EPSG="EPSG:4326", units='Days since 1900-01-01 00:00:00', +def prepare_nc(trgFile, timeList, x, y, metadata, logger, EPSG="EPSG:4326", units=None, calendar='gregorian', Format="NETCDF4", complevel=9, zlib=True, least_significant_digit=None): """ This function prepares a NetCDF file with given metadata, for a certain year, daily basis data @@ -68,6 +68,12 @@ import datetime as dt logger.info('Setting up netcdf output: ' + trgFile) + + if units == None: # Use start of the run + epoch = timeList[0] + units = 'seconds since %04d-%02d-%02d %02d:%02d:%02d.0 00:00' % ( + epoch.year, epoch.month, epoch.day, epoch.hour, epoch.minute, epoch.second) + startDayNr = netCDF4.date2num(timeList[0].replace(tzinfo=None), units=units, calendar=calendar) endDayNr = netCDF4.date2num(timeList[-1].replace(tzinfo=None), units=units, calendar=calendar) @@ -187,12 +193,8 @@ self.Format = Format self.least_significant_digit = least_significant_digit - def date_range(start, end, tdelta="days"): - if tdelta == "days": - r = (end + dt.timedelta(days=1) - start).days - return [start + dt.timedelta(days=i) for i in range(r)] - else: - r = (end + dt.timedelta(days=1) - start).days * 24 + def date_range(start, end, timestepsecs): + r = int((end + dt.timedelta(seconds=timestepsecs) - start).total_seconds()/timestepsecs) return [start + dt.timedelta(hours=i) for i in range(r)] self.logger = logger @@ -208,16 +210,11 @@ x = _pcrut.pcr2numpy(_pcrut.xcoordinate(_pcrut.boolean(_pcrut.cover(1.0))), NaN)[0, :] y = _pcrut.pcr2numpy(_pcrut.ycoordinate(_pcrut.boolean(_pcrut.cover(1.0))), NaN)[:, 0] - end = starttime + dt.timedelta(seconds=timestepsecs * self.timesteps - 1) + # Shift one timestep as we output at the end + #starttime = starttime + dt.timedelta(seconds=timestepsecs) + end = starttime + dt.timedelta(seconds=timestepsecs * (self.timesteps -1)) - if timestepsecs == 86400: - timeList = date_range(starttime, end, tdelta="days") - elif timestepsecs == 3600: - timeList = date_range(starttime, end, tdelta="hours") - else: - logger.error("Current timestep: " + str(timestepsecs) + " not supported in netcdf writing.") - timeList = date_range(starttime, end, tdelta="days") - + timeList = date_range(starttime, end, timestepsecs) self.timestepbuffer = zeros((self.maxbuf, len(y), len(x))) self.bufflst = {} Index: wflow-py/wflow/wflow_W3RA.py =================================================================== diff -u -rd659dd80702515f254fde0a3baae4600f4faac52 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_W3RA.py (.../wflow_W3RA.py) (revision d659dd80702515f254fde0a3baae4600f4faac52) +++ wflow-py/wflow/wflow_W3RA.py (.../wflow_W3RA.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -756,7 +756,7 @@ dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep,_lastTimeStep) + dynModelFw._runDynamic(0,0) dynModelFw._runSuspend() dynModelFw._wf_shutdown() Index: wflow-py/wflow/wflow_adapt.py =================================================================== diff -u -ra745cce64f58a285f63eab633c89dac896c93009 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_adapt.py (.../wflow_adapt.py) (revision a745cce64f58a285f63eab633c89dac896c93009) +++ wflow-py/wflow/wflow_adapt.py (.../wflow_adapt.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -424,9 +424,9 @@ if timestepsecs < 86400: # assume hours - return (diff.seconds + diff.days * 86400)/timestepsecs + return (diff.seconds + diff.days * 86400)/timestepsecs +1 else: - return diff.days # Should actually be + 1 but fews starts at 0! + return diff.days + 1# Should actually be + 1 but fews starts at 0! else: print xmlfile + " does not exists." Index: wflow-py/wflow/wflow_gr4.py =================================================================== diff -u -r11f8d5cb169091c08cc5b7210e35f2ce7aed5fb3 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_gr4.py (.../wflow_gr4.py) (revision 11f8d5cb169091c08cc5b7210e35f2ce7aed5fb3) +++ wflow-py/wflow/wflow_gr4.py (.../wflow_gr4.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -484,7 +484,7 @@ dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep,_lastTimeStep) + dynModelFw._runDynamic(0,0) dynModelFw._runSuspend() dynModelFw._wf_shutdown() Index: wflow-py/wflow/wflow_hbv.py =================================================================== diff -u -r0e47e71394cabd13c4e41ac4873456b1d7b18698 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_hbv.py (.../wflow_hbv.py) (revision 0e47e71394cabd13c4e41ac4873456b1d7b18698) +++ wflow-py/wflow/wflow_hbv.py (.../wflow_hbv.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -949,7 +949,7 @@ dynModelFw.setupFramework() dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep,_lastTimeStep) + dynModelFw._runDynamic(0,0) dynModelFw._runSuspend() dynModelFw._wf_shutdown() Index: wflow-py/wflow/wflow_routing.py =================================================================== diff -u -r0171e35884ddb86a9eb8614d8162999700954e38 -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_routing.py (.../wflow_routing.py) (revision 0171e35884ddb86a9eb8614d8162999700954e38) +++ wflow-py/wflow/wflow_routing.py (.../wflow_routing.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -678,7 +678,7 @@ dynModelFw.setupFramework() dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep, _lastTimeStep) + dynModelFw._runDynamic(0, 0) dynModelFw._runSuspend() dynModelFw._wf_shutdown() Index: wflow-py/wflow/wflow_sbm.py =================================================================== diff -u -r1a48a465ada7a88083436a6e944e0daa0986c58e -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision 1a48a465ada7a88083436a6e944e0daa0986c58e) +++ wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -1400,7 +1400,7 @@ dynModelFw.setupFramework() dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep, _lastTimeStep) + dynModelFw._runDynamic(0, 0) dynModelFw._runSuspend() dynModelFw._wf_shutdown() Index: wflow-py/wflow/wflow_sbm2.py =================================================================== diff -u -r11a0610cf0cab88c73a9870530fcdea0d46395bb -rbdd2b962a90dd8a3b47f0a47506c29092438c0c8 --- wflow-py/wflow/wflow_sbm2.py (.../wflow_sbm2.py) (revision 11a0610cf0cab88c73a9870530fcdea0d46395bb) +++ wflow-py/wflow/wflow_sbm2.py (.../wflow_sbm2.py) (revision bdd2b962a90dd8a3b47f0a47506c29092438c0c8) @@ -1453,7 +1453,7 @@ dynModelFw.setupFramework() dynModelFw._runInitial() dynModelFw._runResume() - dynModelFw._runDynamic(_firstTimeStep, _lastTimeStep) + dynModelFw._runDynamic(0, 0) dynModelFw._runSuspend() dynModelFw._wf_shutdown()