Index: wflow-py/Scripts/bmi2runner.py =================================================================== diff -u -r7698db683368c0c3ce99aeee53281bfbb5b8241e -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/Scripts/bmi2runner.py (.../bmi2runner.py) (revision 7698db683368c0c3ce99aeee53281bfbb5b8241e) +++ wflow-py/Scripts/bmi2runner.py (.../bmi2runner.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -33,8 +33,8 @@ def usage(*args): sys.stdout = sys.stderr """Way""" - for msg in args: print msg - print __doc__ + for msg in args: print(msg) + print(__doc__) sys.exit(0) @@ -56,13 +56,13 @@ ######################################################################## try: opts, args = getopt.getopt(argv, 'c:l:') - except getopt.error, msg: + except getopt.error as msg: usage(msg) loglevel=logging.WARN for o, a in opts: if o == '-c': configfile = a - if o == '-l': exec "loglevel = logging." + a + if o == '-l': exec("loglevel = logging." + a) Index: wflow-py/UnitTests/TestBMI_combined_mp.py =================================================================== diff -u -rf33154035afcaa101c5a30594b9c86a4fe9f61ef -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/UnitTests/TestBMI_combined_mp.py (.../TestBMI_combined_mp.py) (revision f33154035afcaa101c5a30594b9c86a4fe9f61ef) +++ wflow-py/UnitTests/TestBMI_combined_mp.py (.../TestBMI_combined_mp.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -32,7 +32,7 @@ bmiobj.get_end_time() - bmiobj.get_start_time() ) / bmiobj.get_time_step() + 1 print(steps) - for a in range(0, steps): + for a in range(0, int(steps)): bmiobj.update() atn = bmiobj.get_attribute_names() Index: wflow-py/UnitTests/Testwflow_hbv.py =================================================================== diff -u -r7698db683368c0c3ce99aeee53281bfbb5b8241e -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/UnitTests/Testwflow_hbv.py (.../Testwflow_hbv.py) (revision 7698db683368c0c3ce99aeee53281bfbb5b8241e) +++ wflow-py/UnitTests/Testwflow_hbv.py (.../Testwflow_hbv.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -63,7 +63,7 @@ my_data = wf.genfromtxt(os.path.join(caseName, runId, "run.csv"), delimiter=",") print("Checking discharge ....") - self.assertAlmostEquals(1086.9438420613608, my_data[:, 2].mean(), places=4) + self.assertAlmostEqual(1086.9438420613608, my_data[:, 2].mean(), places=4) if __name__ == "__main__": Index: wflow-py/UnitTests/wflow_routing/wflow_routing_comb.ini =================================================================== diff -u -rcba7e2c58a94c79d3e326767af4400f201fca9fb -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/UnitTests/wflow_routing/wflow_routing_comb.ini (.../wflow_routing_comb.ini) (revision cba7e2c58a94c79d3e326767af4400f201fca9fb) +++ wflow-py/UnitTests/wflow_routing/wflow_routing_comb.ini (.../wflow_routing_comb.ini) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -19,7 +19,7 @@ # Model parameters and settings [model] -modeltype= routing +modeltype= wflow_routing AnnualDischarge=2290 # Alpha for wiver-width estimation 5 for mountain stream 60 for the river rhine Index: wflow-py/UnitTests/wflow_sbm/wflow_sbm_comb.ini =================================================================== diff -u -r6506c343c0e081144b316c548882a31cec975d93 -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/UnitTests/wflow_sbm/wflow_sbm_comb.ini (.../wflow_sbm_comb.ini) (revision 6506c343c0e081144b316c548882a31cec975d93) +++ wflow-py/UnitTests/wflow_sbm/wflow_sbm_comb.ini (.../wflow_sbm_comb.ini) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -47,7 +47,7 @@ # Model parameters and settings [model] -modeltype= sbm +modeltype= wflow_sbm AnnualDischarge=2290 # Alpha for wiver-width estimation 5 for mountain stream 60 for the river rhine @@ -123,6 +123,6 @@ self.watbal=wb.tss self.Precipitation=P.tss -[outputtss_0] +[outputtss_1] samplemap=staticmaps/wflow_gauges.map self.SurfaceRunoff=run.tss Index: wflow-py/wflow/wf_DynamicFramework.py =================================================================== diff -u -r1de1823d4c065baba00eac48bc3c894a1a92ac33 -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 1de1823d4c065baba00eac48bc3c894a1a92ac33) +++ wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -13,7 +13,6 @@ # TODO: Remove command-line options from models such as -F that is now in the ini # TODO: Fix timestep not forewarding in BMI runs (for reading writing maps) -import datetime import configparser from wflow.wf_netcdfio import * @@ -31,6 +30,7 @@ from .wflow_lib import * import time import calendar +import datetime from wflow import __version__ from functools import reduce @@ -459,7 +459,7 @@ bufsize = 1 # Implies line buffered self.fnamelist.append(fname) - self.ofile.append(open(fname, "wb", bufsize)) + self.ofile.append(open(fname, "w", bufsize)) if self.oformat == "csv": # Always the case self.writer.append(csv.writer(self.ofile[-1])) self.ofile[-1].write("# Timestep,") @@ -475,7 +475,8 @@ print("Not implemented yet") self.steps = self.steps + 1 - tmpvar = scalar(spatial(variable)) + + tmpvar = spatial(scalar(variable)) if self.areafunction == "average": self.resmap = areaaverage(tmpvar, nominal(self.area)) elif self.areafunction == "total": @@ -838,6 +839,7 @@ """ return cover(timeinputscalar(tssfile, nominal(areamap)), default) + def _wf_shutdown(self): """ Makes sure the logging closed @@ -849,9 +851,11 @@ os.path.join( self._userModel().caseName, self._userModel().runId, "configofrun.ini" ), - "wb", + "w", ) self._userModel().config.write(fp) + + fp.close() for key, value in self.oscv.items(): value.closeall() @@ -1729,7 +1733,7 @@ try: fname = os.path.join(directory, var).replace("\\", "/") + ".map" execstr = "savevar = self._userModel()." + var - exec(execstr) + savevar = eval("self._userModel()." + var) try: # Check if we have a list of maps b = len(savevar) @@ -1741,7 +1745,7 @@ ) + ".map" ) - # report(z,fname) + self.reportState( cover(z), fname, style=1, gzipit=False, longname=fname ) @@ -1771,7 +1775,7 @@ for a in self.samplenamecsv: found = 1 try: - exec("tmpvar = " + self.varnamecsv[a]) + tmpvar = eval(self.varnamecsv[a]) except: found = 0 self.logger.fatal( @@ -1801,7 +1805,7 @@ for a in toprint: b = a.replace("self.", "") try: - exec("pcrmap = self._userModel()." + b) + pcrmap = eval("self._userModel()." + b) # report( pcrmap , os.path.join(self._userModel().Dir, self._userModel().runId, "outsum", self._userModel().config.get("summary",a)) ) self.reportStatic( pcrmap, @@ -2908,15 +2912,9 @@ path = name if self.outputFormat == 1: - if sys.version_info[0] == 2 and sys.version_info[1] >= 6: - try: - import pcraster as PCRaster - except: - import PCRaster as PCRaster - else: - import PCRaster + if not hasattr(self, "NcOutputStatic"): - PCRaster.report(variable, path) + report(variable, path) if gzipit: Gzip(path, storePath=True) else: @@ -2944,15 +2942,8 @@ path = name if self.outputFormat == 1: - if sys.version_info[0] == 2 and sys.version_info[1] >= 6: - try: - import pcraster as PCRaster - except: - import PCRaster as PCRaster - else: - import PCRaster if not hasattr(self, "NcOutputState"): - PCRaster.report(variable, path) + report(variable, path) if gzipit: Gzip(path, storePath=True) else: @@ -3340,14 +3331,14 @@ # first get basename (last bit of path) name = os.path.basename(name) if hasattr(self._userModel(), name): - return exec("cover(self._userModel()." + name + ",scalar(default))") + return eval("cover(self._userModel()." + name + ",scalar(default))") else: self.logger.warning( "Variable: " + name + " not set by API, returning default" ) exec("self._userModel()." + name + " = cover(scalar(default))") # setattr(self._userModel(),name,clone()) - return exec("self._userModel()." + name) + return eval("self._userModel()." + name) else: self.logger.warning( "Unknown style (" Index: wflow-py/wflow/wf_netcdfio.py =================================================================== diff -u -r6db581991e5855e7a1bcd815ea2c53758a3fb1e5 -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision 6db581991e5855e7a1bcd815ea2c53758a3fb1e5) +++ wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -335,10 +335,11 @@ # timeObj = netCDF4.num2date(time[:], units=time.units, calendar=time.calendar) idx = timestep - 1 + + buffreset = int((idx + 1) % self.maxbuf) + bufpos = int((idx) % self.maxbuf) + - buffreset = (idx + 1) % self.maxbuf - bufpos = (idx) % self.maxbuf - try: nc_var = self.nc_trg.variables[var] except: Index: wflow-py/wflow/wflow_sbm.py =================================================================== diff -u -rd4f272e21cd360eb06b827a9b2998c7dda6d96da -r59cffa03cc52cdb4dc62a0ead1aafb6bc039b430 --- wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision d4f272e21cd360eb06b827a9b2998c7dda6d96da) +++ wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision 59cffa03cc52cdb4dc62a0ead1aafb6bc039b430) @@ -1996,7 +1996,7 @@ # Find layer with zi level self.ZiLayer = ifthenelse( self.zi > self.SumThickness, - min(self.ZeroMap + n, self.nrLayersMap - 1), + min(self.ZeroMap + float(n), self.nrLayersMap - 1), self.ZiLayer, ) @@ -2020,12 +2020,12 @@ l_Thickness.append(self.SumThickness) # Height of unsat zone in layer n self.L = ifthenelse( - self.ZiLayer == n, - ifthenelse(self.ZeroMap + n > 0, self.zi - l_Thickness[n - 1], self.zi), + self.ZiLayer == float(n), + ifthenelse(self.ZeroMap + float(n) > 0, self.zi - l_Thickness[n - 1], self.zi), self.UStoreLayerThickness[n], ) # Depth for calculation of vertical fluxes (bottom layer or zi) - self.z = ifthenelse(self.ZiLayer == n, self.zi, self.SumThickness) + self.z = ifthenelse(self.ZiLayer == float(n), self.zi, self.SumThickness) self.storage.append(self.L * (self.thetaS - self.thetaR)) # First layer is treated differently than layers below first layer @@ -2076,7 +2076,7 @@ self.RestPotEvap, self.maskLayer[n], self.ZeroMap, - self.ZeroMap + n, + self.ZeroMap + float(n), self.ActEvapUStore, self.c[n], self.L, @@ -2208,7 +2208,7 @@ Ksat = self.ZeroMap for n in arange(0, len(self.UStoreLayerThickness)): Ksat = Ksat + ifthenelse( - self.ZiLayer == n, + self.ZiLayer == float(n), self.KsatVerFrac[n] * self.KsatVer * exp(-self.f * self.zi), 0.0, ) @@ -2220,13 +2220,13 @@ for n in arange(0, len(self.UStoreLayerThickness)): if self.TransferMethod == 1: self.L = ifthen( - self.ZiLayer == n, + self.ZiLayer == float(n), ifthenelse( - self.ZeroMap + n > 0, self.zi - l_Thickness[n - 1], self.zi + self.ZeroMap + float(n) > 0, self.zi - l_Thickness[n - 1], self.zi ), ) self.Transfer = self.Transfer + ifthenelse( - self.ZiLayer == n, + self.ZiLayer == float(n), min( cover(self.UStoreLayerDepth[n], 0.0), ifthenelse( @@ -2282,7 +2282,7 @@ for n in arange(len(self.UStoreLayerThickness) - 1, -1, -1): # self.UStoreLayerDepth[n] = ifthenelse(self.ZiLayer<=n, self.UStoreLayerDepth[n] + self.ToExtra,self.UStoreLayerDepth[n]) diff = ifthenelse( - self.ZiLayer == n, + self.ZiLayer == float(n), max( 0.0, (cover(self.UStoreLayerDepth[n], 0.0) - self.Transfer) @@ -2333,12 +2333,12 @@ for n in arange(len(self.UStoreLayerThickness) - 1, -1, -1): L = ifthenelse( - self.ZiLayer == n, - ifthenelse(self.ZeroMap + n > 0, self.zi - l_Thickness[n - 1], self.zi), + self.ZiLayer == float(n), + ifthenelse(self.ZeroMap + float(n) > 0, self.zi - l_Thickness[n - 1], self.zi), self.UStoreLayerThickness[n], ) thisLayer = ifthenelse( - self.ZiLayer <= n, + self.ZiLayer <= float(n), min( ToAdd, max( @@ -2348,7 +2348,7 @@ 0.0, ) self.UStoreLayerDepth[n] = ifthenelse( - self.ZiLayer <= n, + self.ZiLayer <= float(n), self.UStoreLayerDepth[n] + thisLayer, self.UStoreLayerDepth[n], ) @@ -2375,7 +2375,7 @@ for n in arange(0, len(self.UStoreLayerThickness)): self.UStoreLayerDepth[n] = ifthenelse( - self.ZiLayer == n, + self.ZiLayer == float(n), self.UStoreLayerDepth[n] - self.Transfer, self.UStoreLayerDepth[n], ) @@ -2491,7 +2491,7 @@ # Find layer with zi level self.ZiLayer = ifthenelse( self.zi > self.SumThickness, - min(self.ZeroMap + n, self.nrLayersMap - 1), + min(self.ZeroMap + float(n), self.nrLayersMap - 1), self.ZiLayer, ) @@ -2513,9 +2513,9 @@ # Height of unsat zone in layer n self.L.append( ifthenelse( - self.ZiLayer == n, + self.ZiLayer == float(n), ifthenelse( - self.ZeroMap + n > 0, self.zi - l_Thickness[n - 1], self.zi + self.ZeroMap + float(n) > 0, self.zi - l_Thickness[n - 1], self.zi ), self.UStoreLayerThickness[n], ) @@ -2910,7 +2910,7 @@ for n in arange(len(self.UStoreLayerThickness)): fracRoot = ifthenelse( - self.ZiLayer > n, + self.ZiLayer > float(n), min( 1.0, max( @@ -2933,7 +2933,7 @@ self.vwc.append( ifthenelse( - self.ZiLayer > n, + self.ZiLayer > float(n), self.UStoreLayerDepth[n] / self.UStoreLayerThickness[n] + self.thetaR, (