Index: examples/wflow_rhine_sbm/wflow_sbm.ini =================================================================== diff -u -r01a02941af2650cc7087fd1d02d95159062faad0 -rb4fd8a698283e62ac1c8624375925fd23a92b924 --- examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision 01a02941af2650cc7087fd1d02d95159062faad0) +++ examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision b4fd8a698283e62ac1c8624375925fd23a92b924) @@ -2,6 +2,16 @@ IF=0,1 +# Define the forcings needed for the model here +# the filename is either the name of the pcraster map-stack or the name of the +# variable in the netcdf input file +[inputmapstacks] +Precipitation = /inmaps/P +EvapoTranspiration = /inmaps/PET +Temperature = /inmaps/TEMP +# this is optional inflow (positive) or outflow (negative) of the kin-wave reservoir +Inflow = /inmaps/IF + [fit] parameter_0 = M #parameter_1 = RootingDepth Index: wflow-py/wflow/wf_DynamicFramework.py =================================================================== diff -u -r01a02941af2650cc7087fd1d02d95159062faad0 -rb4fd8a698283e62ac1c8624375925fd23a92b924 --- wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision 01a02941af2650cc7087fd1d02d95159062faad0) +++ wflow-py/wflow/wf_DynamicFramework.py (.../wf_DynamicFramework.py) (revision b4fd8a698283e62ac1c8624375925fd23a92b924) @@ -57,29 +57,41 @@ class netcdfinput(): - def __init__(self,netcdffile,logging,precipvar='P',petvar='PET',tempvar='TEMP',readinmem=True): + def __init__(self,netcdffile,logging,vars=[],readinmem=True): """ - First try to setup a class to facilitaye reading netcdf files + First try to setup a class read netcdf files (converted with pcr2netcdf.py) """ self.dataset = netCDF4.Dataset(netcdffile,mode='r') logging.info("Reading input from netCDF file: " + netcdffile + ": " + str(self.dataset).replace('\n',' ')) self.alldat ={} - if readinmem: - self.alldat['P'] = self.dataset.variables[precipvar][:] - self.alldat['PET'] = self.dataset.variables[petvar][:] - self.alldat['TEMP'] = self.dataset.variables[tempvar][:] - else: - self.alldat['P'] = self.dataset.variables[precipvar] - self.alldat['PET'] = self.dataset.variables[petvar] - self.alldat['TEMP'] = self.dataset.variables[tempvar] + a = pcr2numpy(cover(0.0),0.0).flatten() + # Determine steps in mem based on memory usage + floatspermb = 1048576/4 + maxmb = 4000 + self.maxsteps = maxmb * len(a)/floatspermb + 1 + self.fstep = 0 + self.lstep = self.fstep + self.maxsteps - def gettimestep(self,timestep,logging,var='P'): + for var in vars: + self.alldat[var] = self.dataset.variables[var][self.fstep:self.maxsteps] + #self.alldat['PET'] = self.dataset.variables[petvar][self.fstep:self.maxsteps] + #self.alldat['TEMP'] = self.dataset.variables[tempvar][self.fstep:self.maxsteps] + def gettimestep(self,timestep,logging,var='P'): + ncindex = timestep -1 if self.alldat.has_key(var): - np_step = self.alldat[var][timestep,:,:] + if ncindex == self.lstep: # Read new block of data in mem + logging.debug("reading new netcdf data block starting at: " + str(ncindex)) + for vars in self.alldat: + self.alldat[vars] = self.dataset.variables[vars][ncindex:ncindex + self.maxsteps] + self.fstep = ncindex + self.lstep = ncindex + self.maxsteps + print ncindex - self.fstep + np_step = self.alldat[var][ncindex-self.fstep,:,:] return numpy2pcr(Scalar, np_step, 1E31) else: + logging.debug("Var (" + var + ") not found returning 0") return cover(0.0) @@ -197,7 +209,7 @@ area - an area-map to average from oformat - format of the output file (csv, txt, tss, only csv and tss at the moment) - Step 1: make avearge of variable using the areaverage function + Step 1: make average of variable using the areaverage function Step 2: Sample the values from the areas (remember the index so we can do it faster lateron) step 3: store them in order """ @@ -425,7 +437,7 @@ self.ncfile = configget(self._userModel().config,'framework','netcdfinput',"None") if self.ncfile != "None": - self.NcInput = netcdfinput(caseName +"/" + 'inmaps.nc',self.logger) + self.NcInput = netcdfinput(caseName +"/" + 'inmaps.nc',self.logger,vars=['P','PET','TEMP']) # Fill the summary (stat) list from the ini file self.statslst = [] @@ -1423,7 +1435,7 @@ assert path is not "" if self.ncfile != "None": - return self.NcInput.gettimestep(self._userModel().currentTimeStep() -1 ,self.logger,var=varname) + return self.NcInput.gettimestep(self._userModel().currentTimeStep() ,self.logger,var=varname) if os.path.isfile(path): mapje=readmap(path)