Index: wflow-py/wflow/rtc_wflow_bmi.py =================================================================== diff -u -ra57fff7eb129fa2f39ac05f3c39055b8c6260d80 -rc8e2fba98b7e0b0d9062e2dba1cba046ce931bab --- wflow-py/wflow/rtc_wflow_bmi.py (.../rtc_wflow_bmi.py) (revision a57fff7eb129fa2f39ac05f3c39055b8c6260d80) +++ wflow-py/wflow/rtc_wflow_bmi.py (.../rtc_wflow_bmi.py) (revision c8e2fba98b7e0b0d9062e2dba1cba046ce931bab) @@ -1,5 +1,5 @@ -from wrapperExtended import BMIWrapperExtended +from wflow.wrappers.rtc.wrapperExtended import BMIWrapperExtended Index: wflow-py/wflow/wflow_bmi_combined.py =================================================================== diff -u -rbd884e04f1b1f1764371528699feea86203e6274 -rc8e2fba98b7e0b0d9062e2dba1cba046ce931bab --- wflow-py/wflow/wflow_bmi_combined.py (.../wflow_bmi_combined.py) (revision bd884e04f1b1f1764371528699feea86203e6274) +++ wflow-py/wflow/wflow_bmi_combined.py (.../wflow_bmi_combined.py) (revision c8e2fba98b7e0b0d9062e2dba1cba046ce931bab) @@ -233,8 +233,26 @@ self.bmilogger.info(self.bmimodels) + def update_to_start_time(self, start_time): + """ + Update the model until and including the start time in case start time of models differ. + - one or more timesteps foreward + + :var double time: time in the units and epoch returned by the function get_time_units. + """ + for key, value in self.bmimodels.iteritems(): + + time = self.bmimodels[key].get_start_time() + + if (start_time - time) > 0: + timespan = start_time - time + nrsteps = int(timespan / self.get_time_step()) + + for st in range(0, nrsteps): + self.bmimodels[key].update(-1.0) + def set_start_time(self, start_time): """ Sets the start time for all bmi models @@ -551,8 +569,8 @@ for key, value in self.bmimodels.iteritems(): st.append(self.bmimodels[key].get_current_time()) - #return st[-1] - return numpy.array(st).max() + return st[-1] + #return numpy.array(st).max() def get_end_time(self): """ @@ -625,9 +643,12 @@ cname = long_var_name.split(self.comp_sep) if self.bmimodels.has_key(cname[0]): - return self.bmimodels[cname[0]].get_value_at_indices(cname[1],inds) - else: - return None + tmp = self.bmimodels[cname[0]].get_value(cname[1]) + if self.wrtodisk: + report(numpy2pcr(Scalar,tmp, -999),long_var_name + "_get_" + str(self.get_current_time()) + '.map') + return self.bmimodels[cname[0]].get_value_at_indices(cname[1],inds) + + return None def set_value_at_indices(self, long_var_name, inds, src): @@ -644,6 +665,10 @@ if self.bmimodels.has_key(cname[0]): self.bmimodels[cname[0]].set_value_at_indices(cname[1], inds,src) + if self.wrtodisk: + npmap = self.bmimodels[cname[0]].getnumpy(cname[1], inds,src) + report(self.bmimodels[cname[0]].get_value(cname[1]),long_var_name + "_set_" + str(self.get_current_time()) + '.map') + def get_grid_type(self, long_var_name): Index: wflow-py/wflow/wflow_lintul.py =================================================================== diff -u -rbd884e04f1b1f1764371528699feea86203e6274 -rc8e2fba98b7e0b0d9062e2dba1cba046ce931bab --- wflow-py/wflow/wflow_lintul.py (.../wflow_lintul.py) (revision bd884e04f1b1f1764371528699feea86203e6274) +++ wflow-py/wflow/wflow_lintul.py (.../wflow_lintul.py) (revision c8e2fba98b7e0b0d9062e2dba1cba046ce931bab) @@ -404,7 +404,7 @@ modelparameters.append(self.ParamType(name="VAP",stack="inmaps/VAP",type="timeseries",default=10.0,verbose=False,lookupmaps=[])), modelparameters.append(self.ParamType(name="WIND",stack="inmaps/WIND",type="timeseries",default=2.0,verbose=False,lookupmaps=[])), modelparameters.append(self.ParamType(name="RAIN",stack="inmaps/RAIN",type="timeseries",default=2.0,verbose=False,lookupmaps=[])), - modelparameters.append(self.ParamType(name="CRPSTART",stack="inmaps/CRPSTART",type="timeseries",default=11.0,verbose=False,lookupmaps=[])), + modelparameters.append(self.ParamType(name="CRPST",stack="inmaps/CRPST",type="timeseries",default=11.0,verbose=False,lookupmaps=[])), return modelparameters def stateVariables(self): @@ -501,12 +501,20 @@ self.logger.info("Reading initial conditions...") #: It is advised to use the wf_resume() function #: here which pick up the variable save by a call to wf_suspend() - try: - self.wf_resume(self.Dir + "/instate/") - except: - self.logger.warn("Cannot load initial states, setting to default") + if self.reinit == 1: + self.logger.info("Setting initial conditions to default") for s in self.stateVariables(): - exec "self." + s + " = cover(1.0)" + exec "self." + s + " = cover(0.0)" + else: + self.wf_resume(self.Dir + "/instate/") + + + #try: + # self.wf_resume(self.Dir + "/instate/") + #except: + # self.logger.warn("Cannot load initial states, setting to default") + # for s in self.stateVariables(): + # exec "self." + s + " = cover(1.0)" def default_summarymaps(self): @@ -540,7 +548,7 @@ np_STARTED = pcr_as_numpy(self.STARTED) # Create numpy array from states: - np_CRPSTART = pcr_as_numpy(self.CRPSTART) + np_CRPSTART = pcr_as_numpy(self.CRPST) #np_Day = pcr_as_numpy(self.DAY) np_DVS = pcr_as_numpy(self.DVS) np_LAI = pcr_as_numpy(self.LAI) @@ -576,7 +584,7 @@ np_CropHarvNow = pcr_as_numpy(CropHarvNow) elif self.CropStartDOY == 0 and self.HarvestDAP == 0: started_gt_zero = self.STARTED > 0. - crpprfl_eq_zero = self.CRPSTART == 0. + crpprfl_eq_zero = self.CRPST == 0. CropHarvNow = pcrand(started_gt_zero, crpprfl_eq_zero) np_CropHarvNow = pcr_as_numpy(CropHarvNow) else: @@ -600,8 +608,8 @@ np_crpstart_eq_started = np.equal(np_CRPSTART[:], np_STARTED[:]) np_CropStartNow = np.logical_and(np_crpstart_gt_0[:], np_crpstart_eq_started[:]) CropStartNow = numpy2pcr(Boolean, np_CropStartNow, -99) - CropStarted = self.CRPSTART > 0 - np_CropStarted = pcr_as_numpy(self.CRPSTART) + CropStarted = self.CRPST > 0 + np_CropStarted = pcr_as_numpy(self.CRPST) else: np_CropStartNow = np_Zero[:] @@ -613,7 +621,7 @@ # Implement forcing data, coefficients and some handy numbers spatially, as numpy arrays: #self.STARTED += self.CRPSTART * ifthenelse(CropHarvNow, Zero, 1.) - ifthenelse(CropHarvNow, self.STARTED, 0.) - self.STARTED += self.CRPSTART + self.STARTED += self.CRPST @@ -740,7 +748,6 @@ np_EXPLOR = 1000. * np_RROOTD[:] * np_WCFC[:] ############################################################################################################# - if self.BMI_RUN == "True" and self.WATERLIMITED == "True": np_Transpiration = pcr_as_numpy(self.Transpiration) np_PotTrans = pcr_as_numpy(self.PotTrans) @@ -752,7 +759,6 @@ else: print "BMI not engaged => no water reduction" TRANRF = np_One[:] - ############################################################################################################# # Water Limitation: effects on partitioning @@ -834,7 +840,7 @@ #---------------------------------------------------------------------- - self.Test = self.CRPSTART + self.Test = self.CRPST bla = self.timestepsecs/self.basetimestep np_Test = pcr_as_numpy(self.Test) @@ -919,7 +925,9 @@ myModel = WflowModel(wflow_cloneMap, caseName,runId,configfile) dynModelFw = wf_DynamicFramework(myModel, _lastTimeStep,firstTimestep=_firstTimeStep,datetimestart=starttime) - dynModelFw.createRunId(NoOverWrite=False,level=loglevel) + dynModelFw.createRunId(NoOverWrite=False,level=loglevel) + + dynModelFw.setupFramework() dynModelFw._runInitial() dynModelFw._runResume() dynModelFw._runDynamic(0,0) Index: wflow-py/wflow/wflow_sbm.py =================================================================== diff -u -r1960c2fe17ff9b9c9133054390876c444f1ebbbd -rc8e2fba98b7e0b0d9062e2dba1cba046ce931bab --- wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision 1960c2fe17ff9b9c9133054390876c444f1ebbbd) +++ wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision c8e2fba98b7e0b0d9062e2dba1cba046ce931bab) @@ -1605,19 +1605,20 @@ self.inund = self.ExfiltWater + self.ExcessWater - ponding_add = self.ZeroMap + ponding_add = self.ZeroMap if self.nrpaddyirri > 0: ponding_add = cover(min(ifthen(self.h_p > 0,self.inund),self.h_p-self.PondingDepth),0.0) self.PondingDepth = self.PondingDepth + ponding_add - irr_depth = ifthenelse(self.PondingDepth < self.h_min, self.h_max - self.PondingDepth, 0.0) - sqmarea = areatotal(self.reallength * self.reallength, nominal(ifthen(irr_depth > 0,self.IrrigationPaddyAreas))) - self.IrriDemandm3 = (irr_depth/1000.0)*sqmarea - IRDemand = idtoid(ifthen(self.IrriDemandm3>0,self.IrrigationPaddyAreas), self.IrrigationSurfaceIntakes, self.IrriDemandm3) * (-1.0 / self.timestepsecs) + irr_depth = ifthenelse(self.PondingDepth < self.h_min, self.h_max - self.PondingDepth, 0.0) * self.CRPST + sqmarea = areatotal(self.reallength * self.reallength, self.IrrigationPaddyAreas) + self.IrriDemandm3 = cover((irr_depth/1000.0)*sqmarea,0) + IRDemand = idtoid(self.IrrigationPaddyAreas, self.IrrigationSurfaceIntakes, self.IrriDemandm3) * (-1.0 / self.timestepsecs) + self.IRDemand= IRDemand self.Inflow = cover(IRDemand,self.Inflow) + self.irr_depth = irr_depth - UStoreCapacity = self.SoilWaterCapacity - self.SatWaterDepth - sum_list_cover(self.UStoreLayerDepth,self.ZeroMap) Ksat = self.KsatVer * exp(-self.f*self.zi) Index: wflow-py/wflow/wrappers/rtc/wrapperExtended.py =================================================================== diff -u -r91d6bcb5e0e6908c800b79712b77ad3cce13a5d3 -rc8e2fba98b7e0b0d9062e2dba1cba046ce931bab --- wflow-py/wflow/wrappers/rtc/wrapperExtended.py (.../wrapperExtended.py) (revision 91d6bcb5e0e6908c800b79712b77ad3cce13a5d3) +++ wflow-py/wflow/wrappers/rtc/wrapperExtended.py (.../wrapperExtended.py) (revision c8e2fba98b7e0b0d9062e2dba1cba046ce931bab) @@ -1,3 +1,4 @@ +import bmi import bmi.wrapper class BMIWrapperExtended(bmi.wrapper.BMIWrapper): @@ -7,7 +8,7 @@ t = self.get_current_time() tEnd = self.get_end_time() - while (t < tEnd): + while (t < time): self.update() t = self.get_current_time()