Index: wflow-py/_version.py =================================================================== diff -u -r4fcd2e520e5dfe89de46075893c3d4a98e030ba0 -r302797c27eb39e23329450c3852723ecfdbf386d --- wflow-py/_version.py (.../_version.py) (revision 4fcd2e520e5dfe89de46075893c3d4a98e030ba0) +++ wflow-py/_version.py (.../_version.py) (revision 302797c27eb39e23329450c3852723ecfdbf386d) @@ -1,4 +1,4 @@ # This file is made by mkversion.py, do not edit!VERSION="1.0.timestuff-rework.1" MVERSION="1.0.timestuff-rework" NVERSION="1.0.1" -BUILD="2017-06-19 15:17:10.906000" +BUILD="2017-06-20 09:19:37.264000" Fisheye: Tag 302797c27eb39e23329450c3852723ecfdbf386d refers to a dead (removed) revision in file `wflow-py/make_wflow_exe.py'. Fisheye: No comparison available. Pass `N' to diff? Index: wflow-py/wflow/__init__.py =================================================================== diff -u -r4fcd2e520e5dfe89de46075893c3d4a98e030ba0 -r302797c27eb39e23329450c3852723ecfdbf386d --- wflow-py/wflow/__init__.py (.../__init__.py) (revision 4fcd2e520e5dfe89de46075893c3d4a98e030ba0) +++ wflow-py/wflow/__init__.py (.../__init__.py) (revision 302797c27eb39e23329450c3852723ecfdbf386d) @@ -2,7 +2,7 @@ __version__="1.0.timestuff-rework" __release__="1.0.timestuff-rework.1" __versionnr__="1.0.1" -__build__="2017-06-19 15:17:10.906000" +__build__="2017-06-20 09:19:37.264000" import osgeo.gdal as gdal import os, sys Index: wflow-py/wflow/wf_DynamicFramework.py =================================================================== diff -u -r00ef8178f6ccf04e542c869caa35837fd08279b5 -r302797c27eb39e23329450c3852723ecfdbf386d --- wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 00ef8178f6ccf04e542c869caa35837fd08279b5) +++ wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 302797c27eb39e23329450c3852723ecfdbf386d) @@ -86,7 +86,7 @@ return str(a) def update(self, timestepsecs=None, datetimestart=None, datetimeend=None, currentTimeStep=None, - currentDatetime=None,runTimeSteps=None,mode='steps'): + currentDatetime=None,runTimeSteps=None,mode='steps',incrementStep=False): """ Updates the content of the framework date/time object. Use only one input parameter per call. or runTimeSteps and datatimestart at the same time use the mode option to switch between steps and intervals ('steps' or 'intervals') @@ -105,7 +105,9 @@ self.timeStepSecs = timestepsecs self.runTimeSteps = (calendar.timegm(self.runEndTime.utctimetuple()) - calendar.timegm(self.runStateTime.utctimetuple()))/self.timeStepSecs - self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) + if self.currentmode == 'steps': + self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) + self.outPutStartTime = self.runStateTime + datetime.timedelta(seconds=self.timeStepSecs) elif timestepsecs and runTimeSteps: self.timeStepSecs = timestepsecs @@ -115,14 +117,17 @@ self.currentTimeStep = 1 #if self.startadjusted - if self.currentmode =='steps' or self.startadjusted: + if self.currentmode =='steps': self.runStartTime = datetimestart self.startadjusted = 0 + self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) else: - self.runStartTime = datetimestart + datetime.timedelta(seconds=self.timeStepSecs) + #self.runStartTime = datetimestart + datetime.timedelta(seconds=self.timeStepSecs) + self.runStartTime = datetimestart # + datetime.timedelta(seconds=self.timeStepSecs) self.startadjusted = 1 + self.runStateTime = self.runStartTime# - datetime.timedelta(seconds=self.timeStepSecs) - self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) + self.currentDateTime = self.runStateTime self.outPutStartTime = self.currentDateTime + datetime.timedelta(seconds=self.timeStepSecs) self.runTimeSteps = (calendar.timegm(self.runEndTime.utctimetuple()) - calendar.timegm(self.runStateTime.utctimetuple()))/self.timeStepSecs @@ -138,14 +143,16 @@ self.currentTimeStep = 1 self.currentDateTime = self.runStartTime - if self.currentmode =='steps' or self.startadjusted: + if self.currentmode =='steps': self.runStartTime = datetimestart self.startadjusted = 0 + self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) else: - self.runStartTime = datetimestart + datetime.timedelta(seconds=self.timeStepSecs) + self.runStartTime = datetimestart# + datetime.timedelta(seconds=self.timeStepSecs) self.startadjusted = 1 + self.runStateTime = self.runStartTime - self.runStateTime = self.runStartTime - datetime.timedelta(seconds=self.timeStepSecs) + self.outPutStartTime = self.runStateTime + datetime.timedelta(seconds=self.timeStepSecs) self.currentDateTime = self.runStartTime self.runEndTime = self.runStateTime + datetime.timedelta(seconds=self.timeStepSecs * runTimeSteps) @@ -168,6 +175,11 @@ self.currentYday = self.currentDateTime.timetuple().tm_yday self.currentHour = self.currentDateTime.hour + if incrementStep: + self.currentTimeStep = self.currentTimeStep + 1 + self.currentDateTime = self.currentDateTime + datetime.timedelta(seconds=self.timeStepSecs) + + if currentDatetime: self.currentDateTime = currentDatetime self.currentMonth = self.currentDateTime.month @@ -2152,23 +2164,25 @@ # Save state variables in memory self.wf_QuickSuspend() - for a in range(0, len(self.statslst)): - data = getattr(self._userModel(), self.statslst[a].varname) - self.statslst[a].add_one(data) + for a in range(0, len(self.statslst)): + data = getattr(self._userModel(), self.statslst[a].varname) + self.statslst[a].add_one(data) - for key in self.onlinestat.statvarname: - stvar = self.onlinestat.getstat(getattr(self._userModel(),key),key) - #stvar = self.onlinestat.getstat(cover(self.DT.currentTimeStep * 1.0), key) - setattr(self._userModel(),self.onlinestat.statvarname[key],stvar) + for key in self.onlinestat.statvarname: + stvar = self.onlinestat.getstat(getattr(self._userModel(),key),key) + #stvar = self.onlinestat.getstat(cover(self.DT.currentTimeStep * 1.0), key) + setattr(self._userModel(),self.onlinestat.statvarname[key],stvar) - self.wf_savedynMaps() - self.wf_saveTimeSeries() + self.DT.update(incrementStep=True, mode=self.runlengthdetermination) + self._userModel().currentdatetime = self.DT.currentDateTime + self.wf_savedynMaps() + self.wf_saveTimeSeries() + #self.currentdatetime = self.currentdatetime + dt.timedelta(seconds=self._userModel().timestepsecs) - self.DT.update(currentTimeStep=self.DT.currentTimeStep+1, mode=self.runlengthdetermination) - self._userModel().currentdatetime = self.DT.currentDateTime + self.logger.debug("timestep: " + str(self._userModel().currentTimeStep()) + "/" + str(self.DT.lastTimeStep) + " (" + str(self.DT.currentDateTime) + ")") Index: wflow-py/wflow/wflow_bmi.py =================================================================== diff -u -rbdfa3d1385a52bc7f29970984983d36d7ef63759 -r302797c27eb39e23329450c3852723ecfdbf386d --- wflow-py/wflow/wflow_bmi.py (.../wflow_bmi.py) (revision bdfa3d1385a52bc7f29970984983d36d7ef63759) +++ wflow-py/wflow/wflow_bmi.py (.../wflow_bmi.py) (revision 302797c27eb39e23329450c3852723ecfdbf386d) @@ -225,7 +225,7 @@ self.bmilogger.debug("update: dt = " + str(dt)) self.bmilogger.debug("update: update " + str(nrsteps) + " timesteps.") if nrsteps >= 1: - self.dynModel._runDynamic(self.currenttimestep, self.currenttimestep + nrsteps -1) + self.dynModel._runDynamic(self.currenttimestep, self.currenttimestep + nrsteps-1) self.currenttimestep = self.currenttimestep + nrsteps else: self.bmilogger.debug("Update: nothing done, number of steps < 1") @@ -628,7 +628,7 @@ self.dynModel._update_time_from_DT() #self.dynModel._userModel().config.set("run",'starttime',self.dynModel.DT.runStartTime.strftime("%Y-%m-%d %H:%M:%S")) - self.bmilogger.debug("set_start_time: " + str(start_time) + " " + str(self.dynModel.DT.runStartTime.strftime("%Y-%m-%d %H:%M:%S"))) + self.bmilogger.debug(self.name + ": set_start_time: " + str(start_time) + " " + str(self.dynModel.DT.runStartTime.strftime("%Y-%m-%d %H:%M:%S"))) def set_end_time(self, end_time): """ @@ -641,7 +641,7 @@ self.dynModel.DT.update(datetimeend=dateobj,mode=self.dynModel.runlengthdetermination) self.dynModel._update_time_from_DT() - self.bmilogger.debug("set_end_time: " + str(end_time) + " " + str(self.dynModel.DT.runEndTime.strftime("%Y-%m-%d %H:%M:%S"))) + self.bmilogger.debug(self.name + ": set_end_time: " + str(end_time) + " " + str(self.dynModel.DT.runEndTime.strftime("%Y-%m-%d %H:%M:%S"))) @@ -747,7 +747,7 @@ # timespan = time - curtime + self.dynModel.DT.timeStepSecs #else: timespan = time - curtime - nrsteps = int(timespan/self.dynModel.DT.timeStepSecs)# + 1 + nrsteps = int(timespan/self.dynModel.DT.timeStepSecs) self.bmilogger.debug('update_until: update ' + str(nrsteps) + ' timesteps forward from ' + str(curtime) + ' to ' + str(curtime + timespan)) self.bmilogger.debug('update_until: step ' + str(self.currenttimestep) + ' to ' + str(self.currenttimestep + nrsteps -1)) self.dynModel._runDynamic(self.currenttimestep, self.currenttimestep + nrsteps -1) @@ -906,8 +906,7 @@ :return: start time in the units and epoch returned by the function get_time_units """ st = self.dynModel.wf_supplyStartTime() - self.bmilogger.debug( - "get_start_time: " + str(st) + " " + str(self.dynModel.DT.runStartTime.strftime("%Y-%m-%d %H:%M:%S"))) + self.bmilogger.debug(self.name + ": get_start_time: " + str(st) + " " + str(self.dynModel.DT.runStartTime.strftime("%Y-%m-%d %H:%M:%S"))) return st def get_current_time(self): @@ -918,7 +917,7 @@ """ st = self.dynModel.wf_supplyCurrentTime() - self.bmilogger.debug("get_current_time: " + str(st) + " " + str(self.dynModel.DT.currentDateTime.strftime("%Y-%m-%d %H:%M:%S"))) + self.bmilogger.debug(self.name + ": get_current_time: " + str(st) + " " + str(self.dynModel.DT.currentDateTime.strftime("%Y-%m-%d %H:%M:%S"))) return st def get_end_time(self): @@ -928,7 +927,7 @@ :return: end time of simulation n the units and epoch returned by the function get_time_units """ et = self.dynModel.wf_supplyEndTime() - self.bmilogger.debug("get_end_time: " + str(et)+ " " + str(self.dynModel.DT.runEndTime.strftime("%Y-%m-%d %H:%M:%S"))) + self.bmilogger.debug(self.name + ": get_end_time: " + str(et)+ " " + str(self.dynModel.DT.runEndTime.strftime("%Y-%m-%d %H:%M:%S"))) return et def get_time_step(self): @@ -938,7 +937,7 @@ :return: duration of one time step of the model in the units returned by the function get_time_units """ ts = self.dynModel.DT.timeStepSecs - self.bmilogger.debug("get_time_step: " + str(ts)) + self.bmilogger.debug(self.name + ": get_time_step: " + str(ts)) return ts def get_time_units(self): @@ -949,7 +948,7 @@ (http://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/build/cf-conventions.html#time-coordinate) """ tu = self.dynModel.wf_supplyEpoch() - self.bmilogger.debug("get_time_units: " + str(tu)) + self.bmilogger.debug(self.name + ": get_time_units: " + str(tu)) return tu @@ -962,7 +961,7 @@ """ if long_var_name in self.inputoutputvars: ret = self.dynModel.wf_supplyMapAsNumpy(long_var_name) - self.bmilogger.debug("get_value: " + long_var_name) + self.bmilogger.debug(self.name + ": get_value: " + long_var_name) if self.wrtodisk: fname = str(self.currenttimestep) + "_get_" + long_var_name + ".map" @@ -972,7 +971,7 @@ return ret else: - self.bmilogger.error("get_value: " + long_var_name + ' not in list of output values ' + str(self.inputoutputvars)) + self.bmilogger.error(self.name + ": get_value: " + long_var_name + ' not in list of output values ' + str(self.inputoutputvars)) return None def get_value_at_indices(self, long_var_name, inds):