Index: wflow-py/wflow/wflow_bmi.py =================================================================== diff -u -r4f224b2e50123f64885aea12613b3a3c10ce309c -r9803fa86a5cec7c9999bf57726e8016ad2438cfc --- wflow-py/wflow/wflow_bmi.py (.../wflow_bmi.py) (revision 4f224b2e50123f64885aea12613b3a3c10ce309c) +++ wflow-py/wflow/wflow_bmi.py (.../wflow_bmi.py) (revision 9803fa86a5cec7c9999bf57726e8016ad2438cfc) @@ -31,6 +31,9 @@ if logstr in 'DEBUG': self.loggingmode = logging.DEBUG + """ If set to True all set and get grids are writtesn to disk for debugging """ + self.wrtodisk = False + self.bmilogger = setlogger('wflow_bmi.log','wflow_bmi_logging',thelevel=self.loggingmode) self.bmilogger.info("__init__: wflow_bmi object initialised.") @@ -225,14 +228,22 @@ return st - def get_var(self, name): + def get_var(self, long_var_name): """ Return an nd array from model library """ - self.bmilogger.debug("get_var: " + str(name)) - return np.flipud(self.dynModel.wf_supplyMapAsNumpy(name)) + self.bmilogger.debug("get_var: " + str(long_var_name)) + src = self.dynModel.wf_supplyMapAsNumpy(long_var_name) + if self.wrtodisk: + fname = str(self.currenttimestep) + "_get_" + long_var_name + ".map" + arpcr = self.dynModel.numpy2pcr(self.dynModel.Scalar, src, -999) + self.bmilogger.debug("Writing to disk: " + fname) + self.dynModel.report(arpcr,fname) + + return np.flipud(src) + def set_var(self, long_var_name, src): """ Set the values(s) in a map using a numpy array as source @@ -242,6 +253,12 @@ is present a uniform map will be set in the wflow model. """ + if self.wrtodisk: + fname = str(self.currenttimestep) + "_set_" + long_var_name + ".map" + arpcr = self.dynModel.numpy2pcr(self.dynModel.Scalar, np.flipud(src), -999) + self.bmilogger.debug("Writing to disk: " + fname) + self.dynModel.report(arpcr,fname) + if long_var_name in self.outputonlyvars: self.bmilogger.error("set_var: " + long_var_name + " is listed as an output only variable, cannot set. " + str(self.outputonlyvars)) raise ValueError("set_var: " + long_var_name + " is listed as an output only variable, cannot set. " + str(self.outputonlyvars)) @@ -336,11 +353,16 @@ self.currenttimestep = 0 self.name = "undefined" self.myModel = None + self.dynModel = None self.loggingmode = logging.ERROR logstr = os.getenv('wflow_bmi_loglevel', 'ERROR') + self.wrtodisk = False + if os.getenv("wflow_bmi_writedisk",'False') in 'True': + self.wrtodisk = True + if logstr in 'ERROR': self.loggingmode = logging.ERROR print logstr @@ -771,6 +793,12 @@ if long_var_name in self.inputoutputvars: ret = self.dynModel.wf_supplyMapAsNumpy(long_var_name) self.bmilogger.debug("get_value: " + long_var_name) + if self.wrtodisk: + fname = str(self.currenttimestep) + "_get_" + long_var_name + ".map" + arpcr = self.dynModel.numpy2pcr(self.dynModel.Scalar, src, -999) + self.bmilogger.debug("Writing to disk: " + fname) + self.dynModel.report(arpcr,fname) + try: fret = np.flipud(ret) return fret @@ -942,6 +970,12 @@ is present a uniform map will be set in the wflow model. """ + if self.wrtodisk: + fname = str(self.currenttimestep) + "_set_" + long_var_name + ".map" + arpcr = self.dynModel.numpy2pcr(self.dynModel.Scalar, src, -999) + self.bmilogger.debug("Writing to disk: " + fname) + self.dynModel.report(arpcr,fname) + if long_var_name in self.outputonlyvars: self.bmilogger.error("set_value: " + long_var_name + " is listed as an output only variable, cannot set. " + str(self.outputonlyvars)) raise ValueError("set_value: " + long_var_name + " is listed as an output only variable, cannot set. " + str(self.outputonlyvars))