Index: wflow-py/_version.py =================================================================== diff -u -r0b41e43f37d232133cd4d014e63c39941525df35 -re59169d4b535e077a267eba3d2ba75f73803fbc8 --- wflow-py/_version.py (.../_version.py) (revision 0b41e43f37d232133cd4d014e63c39941525df35) +++ wflow-py/_version.py (.../_version.py) (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -2,4 +2,4 @@ VERSION='1.0.master.1' MVERSION='1.0.master' NVERSION='1.0.1' -BUILD='2017-09-05 08:53:12.915000' +BUILD='2017-09-05 09:18:23.637000' Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/ET.py'. Fisheye: No comparison available. Pass `N' to diff? Index: wflow-py/wflow/__init__.py =================================================================== diff -u -r0b41e43f37d232133cd4d014e63c39941525df35 -re59169d4b535e077a267eba3d2ba75f73803fbc8 --- wflow-py/wflow/__init__.py (.../__init__.py) (revision 0b41e43f37d232133cd4d014e63c39941525df35) +++ wflow-py/wflow/__init__.py (.../__init__.py) (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -2,7 +2,7 @@ __version__='1.0.master' __release__='1.0.master.1' __versionnr__='1.0.1' -__build__='2017-09-05 08:53:12.915000' +__build__='2017-09-05 09:18:23.637000' import os, sys import osgeo.gdal as gdal Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/glacier.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/groundwater.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/hargreaves.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/reporting.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/rootzone.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/routing.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/snow.py'. Fisheye: No comparison available. Pass `N' to diff? Index: wflow-py/wflow/sphy/ET.py =================================================================== diff -u --- wflow-py/wflow/sphy/ET.py (revision 0) +++ wflow-py/wflow/sphy/ET.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,15 @@ +#-Function to calculate the potential evapotranspiration +def ETpot(etr, kc): + etpot = etr * kc + return etpot + +#-Function to calculate the actual evapotranspiration +def ETact(pcr, etpot, rootwater, rootsat, etreddry, rainfrac): + etredwet = pcr.ifthenelse(rootwater >= rootsat, pcr.scalar(0), 1) + etact = pcr.ifthenelse(rainfrac > 0, pcr.min(etpot * etreddry * etredwet, rootwater), 0) + return etact + + + + + Index: wflow-py/wflow/sphy/__init__.py =================================================================== diff -u --- wflow-py/wflow/sphy/__init__.py (revision 0) +++ wflow-py/wflow/sphy/__init__.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1 @@ \ No newline at end of file Index: wflow-py/wflow/sphy/glacier.py =================================================================== diff -u --- wflow-py/wflow/sphy/glacier.py (revision 0) +++ wflow-py/wflow/sphy/glacier.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,21 @@ +print 'glacier module imported' + +#-Function to calculate melt from clean ice or debris covered glaciers +def GlacCDMelt(pcr, temp, ddf, glacfrac): + glacdmelt = pcr.max(0, temp) * ddf * glacfrac + return glacdmelt + +#-Total glacier melt +def GMelt(glaccimelt, glacdcmelt): + glacmelt = glaccimelt + glacdcmelt + return glacmelt + +#-Function to calculate runoff from glaciers +def GlacR(glacf, gmelt, glacfrac): + glacr = glacf * gmelt * glacfrac + return glacr + +#-Function to calculate glacier percolation to groundwater +def GPerc(glacf, gmelt, glacfrac): + gperc = (1 - glacf) * gmelt * glacfrac + return gperc Index: wflow-py/wflow/sphy/groundwater.py =================================================================== diff -u --- wflow-py/wflow/sphy/groundwater.py (revision 0) +++ wflow-py/wflow/sphy/groundwater.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,19 @@ +print 'groundwater module imported' + +#-Function to calculate groundwater recharge +def GroundWaterRecharge(pcr, deltagw, gwrecharge, subperc, glacperc): + gwseep = (1 - pcr.exp(-1 / deltagw)) * (subperc + glacperc) + gwrecharge = (pcr.exp(-1 / deltagw) * gwrecharge) + gwseep + return gwrecharge + +#-Function to calculate baseflow +def BaseFlow(pcr, gw, baser, gwrecharge, basethresh, alphagw): + baser = pcr.ifthenelse(gw <= basethresh, 0, (baser * pcr.exp(-alphagw) + gwrecharge * (1 - pcr.exp(-alphagw)))) + return baser + +#-Function to calculate the groundwater height, taken from the bottom of the gw layer (zero reference) +def HLevel(pcr, Hgw, alphagw, gwrecharge, yield_gw): + Hgw = (Hgw * pcr.exp(-alphagw)) + ((gwrecharge * (1 - pcr.exp(-alphagw))) / (800 * yield_gw * alphagw)) + return Hgw + + Index: wflow-py/wflow/sphy/hargreaves.py =================================================================== diff -u --- wflow-py/wflow/sphy/hargreaves.py (revision 0) +++ wflow-py/wflow/sphy/hargreaves.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,15 @@ +#-Extraterrestrial radiation +def extrarad(self, pcr): + DayNo = self.wf_supplyJulianDOY() # timecalc.julian(self)[0] + LatRad = self.Lat * (self.pi / 180) + dr = 1 + 0.033 * pcr.cos((2 * self.pi * DayNo) / 365) + delta = 0.409 * pcr.sin(((2 * self.pi * DayNo) / 365) - 1.39) + omegas = pcr.acos(-1 * pcr.tan(LatRad) * pcr.tan(delta)) + Ra = ((24 * 60) / self.pi) * self.Gsc * dr * (pcr.scalar(omegas) * pcr.sin(LatRad) * pcr.sin(delta) +\ + pcr.cos(LatRad) * pcr.cos(delta) * pcr.sin(omegas)) + return Ra + +#-Modified Hargreaves for calculation of ETref +def Hargreaves(pcr, ra, temp, tempmax, tempmin): + ETref = pcr.max(0.0023 * 0.408 * ra * (temp + 17.8) * (pcr.max(tempmax - tempmin, 0))**0.5, 0) + return ETref \ No newline at end of file Index: wflow-py/wflow/sphy/reporting.py =================================================================== diff -u --- wflow-py/wflow/sphy/reporting.py (revision 0) +++ wflow-py/wflow/sphy/reporting.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,57 @@ +#-Function to report the output +def REPM(self, pcr, tot, var, fname, outops, TSS=False, MAP=False): + if outops == 'Day': + if TSS: + TSS.sample(var) + if MAP: + self.report(var, self.outpath + fname) + tot = 0 + elif outops == 'Month': + dim = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + if self.calendar.isleap(self.curdate.year): + dim[1] = 29 + else: + dim[1] = 28 + tot = tot + var + if self.curdate.day == dim[self.curdate.month-1]: + if TSS: + TSS.sample(tot) + if MAP: + self.report(tot, self.outpath + fname + 'M') + tot = 0 + elif outops == 'Year': + if self.calendar.isleap(self.curdate.year): + ydays = 366 + else: + ydays = 365 + tot = tot + var + if self.timecalc.julian(self)[0] == ydays: + if TSS: + TSS.sample(tot) + if MAP: + self.report(tot, self.outpath + fname + 'Y') + tot = 0 + else: + tot = tot + var + if self.curdate == self.enddate: + pcr.report(tot, self.outpath + fname + '.map') + tot = 0 + return tot + +#-Function to initialise the reporting +def reporting(self, pcr, tot, var): + for outops in ['Day','Month','Year','Final']: + try: + TSS = eval('self.' + tot + '_' + outops + 'TS') + try: + MAP = eval('self.' + tot + '_' + outops + '_map') + setattr(self, tot + '_'+outops, REPM(self, pcr, eval('self.'+tot+'_'+outops), var, eval('self.'+tot+'_fname'), outops, TSS, MAP)) + except: + setattr(self, tot + '_'+outops, REPM(self, pcr, eval('self.'+tot+'_'+outops), var, eval('self.'+tot+'_fname'), outops, TSS)) + except: + try: + MAP = eval('self.' + tot + '_' + outops + '_map') + setattr(self, tot + '_'+outops, REPM(self, pcr, eval('self.'+tot+'_'+outops), var, eval('self.'+tot+'_fname'), outops, False, MAP)) + except: + pass + Index: wflow-py/wflow/sphy/rootzone.py =================================================================== diff -u --- wflow-py/wflow/sphy/rootzone.py (revision 0) +++ wflow-py/wflow/sphy/rootzone.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,20 @@ +#-Function to calculate rootzone runoff +def RootRunoff(pcr, rainfrac, rootwater, rootsat): + rootrunoff = pcr.ifthenelse(rainfrac > 0, pcr.max(rootwater - rootsat, 0), 0) + return rootrunoff + +#-Function to calculate rootzone drainage +def RootDrainage(pcr, rootwater, rootdrain, rootfield, rootsat, drainvel, rootTT): + rootexcess = pcr.max(rootwater - rootfield, 0) + rootexcessfrac = rootexcess / (rootsat - rootfield) + rootlat = rootexcessfrac * drainvel + rootdrainage = pcr.max(pcr.min(rootwater, rootlat * (1-pcr.exp(-1/rootTT)) + rootdrain * pcr.exp(-1/rootTT)), 0) + return rootdrainage + +#-Function to calculate rootzone percolation +def RootPercolation(pcr, rootwater, subwater, rootfield, rootTT, subsat): + rootexcess = pcr.max(rootwater - rootfield, 0) + rootperc = rootexcess * (1 - pcr.exp(-1 / rootTT)) + rootperc = pcr.ifthenelse(subwater >= subsat, 0, pcr.min(subsat - subwater, rootperc)) + rootperc = pcr.max(pcr.min(rootperc, rootwater), 0) + return rootperc Index: wflow-py/wflow/sphy/routing.py =================================================================== diff -u --- wflow-py/wflow/sphy/routing.py (revision 0) +++ wflow-py/wflow/sphy/routing.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,7 @@ +print 'routing module imported' + +def ROUT(pcr, q, oldq, flowdir, kx): + rr = (q * 0.001 * pcr.cellarea()) / (24*3600) + ra = pcr.accuflux(flowdir, rr) + ra = (1 - kx) * ra + kx * oldq + return ra Index: wflow-py/wflow/sphy/snow.py =================================================================== diff -u --- wflow-py/wflow/sphy/snow.py (revision 0) +++ wflow-py/wflow/sphy/snow.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,35 @@ +print 'snow module imported' + +#-Function to calculate the potential snow melt +def PotSnowMelt(pcr, temp, ddfs): + melt = pcr.max(0, temp) * ddfs + return melt +#-Function to calculate the actual snow melt +def ActSnowMelt(pcr, snowstore, potmelt): + melt = pcr.min(snowstore, potmelt) + return melt + +#-Function that updates the snow storage +def SnowStoreUpdate(pcr, snowstore, snow, actmelt, temp, snowwatstore): + snowstore = snowstore + snow - actmelt + pcr.ifthenelse(temp < 0, pcr.scalar(snowwatstore), 0) + return snowstore + +#-Function that determines the maximum amount of water that can be stored in the snowpack +def MaxSnowWatStorage(snowsc, snowstore): + maxsnowwatstore = snowsc * snowstore + return maxsnowwatstore + +#-Function to calculate the actual snow water storage +def SnowWatStorage(pcr, temp, maxsnowwatstore, snowwatstore, actmelt, rain): + snowwatstore = pcr.ifthenelse(temp < 0, 0, pcr.min(maxsnowwatstore, snowwatstore + actmelt + rain)) + return snowwatstore + +#-Function to calculate the total snow storage (snowstore + snowwatstore) +def TotSnowStorage(snowstore, snowwatstore, snowfrac, rainfrac): + totalsnowstore = (snowstore + snowwatstore) * (snowfrac + rainfrac) + return totalsnowstore + +#-Function to calculate runoff from snow +def SnowR(pcr, snowwatstore, maxsnowwatstore, actmelt, rain, oldsnowwatstore, snowfrac): + snowr = pcr.ifthenelse(snowwatstore == maxsnowwatstore, (((actmelt + rain) - (snowwatstore - oldsnowwatstore)) * snowfrac), 0) + return snowr Index: wflow-py/wflow/sphy/subzone.py =================================================================== diff -u --- wflow-py/wflow/sphy/subzone.py (revision 0) +++ wflow-py/wflow/sphy/subzone.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,21 @@ +#-Function to calculate capillary rise +def CapilRise(pcr, subfield, subwater, capmax, rootwater, rootsat, rootfield): + subrelwat = pcr.max(pcr.min((subwater / subfield), 1), 0) + rootrelwat = pcr.max(pcr.min((rootwater / rootfield), 1), 0) + caprise = pcr.min(subwater, capmax * (1 - rootrelwat) * subrelwat) + caprise = pcr.min(caprise, rootsat - rootwater) # adding caprise can not exceed saturated rootwater content + return caprise + +#-Function to calculate percolation from subsoil (only if groundwater module is used) +def SubPercolation(pcr, subwater, subfield, subTT, gw, gwsat): + subperc = pcr.ifthenelse((gw < gwsat) & ((subwater - subfield) > 0), (subwater - subfield) * (1 - pcr.exp(-1 / subTT)), 0) + return subperc + +#-Function to calculate drainage from subsoil (only if groundwater module is NOT used) +def SubDrainage(pcr, subwater, subfield, subsat, drainvel, subdrainage, subTT): + subexcess = pcr.max(subwater - subfield, 0) + subexcessfrac = subexcess / (subsat - subfield) + sublateral = subexcessfrac * drainvel + subdrainage = (sublateral + subdrainage) * (1 - pcr.exp(-1 / subTT)) + subdrainage = pcr.max(pcr.min(subdrainage, subwater), 0) + return subdrainage \ No newline at end of file Index: wflow-py/wflow/sphy/timecalc.py =================================================================== diff -u --- wflow-py/wflow/sphy/timecalc.py (revision 0) +++ wflow-py/wflow/sphy/timecalc.py (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -0,0 +1,15 @@ + +#-Function to return the julian day of the year +def julian(self): + y= self.curdate.year + start= self.datetime.datetime(y,1,1).toordinal() + current= self.curdate.toordinal() + day= current-start+1 + return day, 1 + +#-Function to calculate the number of timesteps for the model run +def timesteps(self): + nrTimeSteps = (self.enddate - self.startdate).days + 1 + print 'Running SPHY for '+str(self.startdate.day)+'-'+str(self.startdate.month)+'-'+str(self.startdate.year)+' through '+str(self.enddate.day)+'-'+str(self.enddate.month)+'-'+str(self.enddate.year) + print 'with '+str(nrTimeSteps)+' daily timesteps' + return nrTimeSteps \ No newline at end of file Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/subzone.py'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e59169d4b535e077a267eba3d2ba75f73803fbc8 refers to a dead (removed) revision in file `wflow-py/wflow/timecalc.py'. Fisheye: No comparison available. Pass `N' to diff? Index: wflow-py/wflow/wflow_sphy.py =================================================================== diff -u -r0b41e43f37d232133cd4d014e63c39941525df35 -re59169d4b535e077a267eba3d2ba75f73803fbc8 --- wflow-py/wflow/wflow_sphy.py (.../wflow_sphy.py) (revision 0b41e43f37d232133cd4d014e63c39941525df35) +++ wflow-py/wflow/wflow_sphy.py (.../wflow_sphy.py) (revision e59169d4b535e077a267eba3d2ba75f73803fbc8) @@ -257,11 +257,11 @@ # import the required modules import datetime, calendar - import wflow.reporting as reporting - import wflow.timecalc as timecalc - import wflow.ET as ET - import wflow.rootzone as rootzone - import wflow.subzone as subzone + import wflow.sphy.reporting as reporting + import wflow.sphy.timecalc as timecalc + import wflow.sphy.ET as ET + import wflow.sphy.rootzone as rootzone + import wflow.sphy.subzone as subzone #from wflow.wflow_lib import * from math import pi @@ -280,15 +280,15 @@ if self.GlacFLAG == 1: self.SnowFLAG = 1 self.GroundFLAG = 1 - import glacier # glacier melting processes + import wflow.sphy.glacier as glacier # glacier melting processes self.glacier = glacier del glacier if self.SnowFLAG == 1: - import snow # snow melt processes + import wflow.sphy.snow as snow # snow melt processes self.snow = snow del snow if self.RoutFLAG == 1: - import routing # simple routing scheme + import wflow.sphy.routing as routing # simple routing scheme self.routing = routing del routing if self.LakeFLAG == 1: @@ -309,7 +309,7 @@ self.dynamic_veg = dynamic_veg del dynamic_veg if self.GroundFLAG == 1: - import groundwater # groundwater storage as third storage layer. This is used instead of a fixed bottomflux + import wflow.sphy.groundwater as groundwater # groundwater storage as third storage layer. This is used instead of a fixed bottomflux self.groundwater = groundwater del groundwater @@ -319,20 +319,20 @@ # self.inpathforcingP = config.get('DIRS','inputforcingdirP') # self.outpath = config.get('DIRS', 'outputdir') - self.starttime = configget(self.config,"run","starttime","0") - ds = dt.datetime.strptime(self.starttime, '%Y-%m-%d %H:%M:%S %Z') - self.endtime = configget(self.config,"run","endtime","0") - de = dt.datetime.strptime(self.endtime, '%Y-%m-%d %H:%M:%S %Z') + # self.starttime = configget(self.config,"run","starttime","0") + # ds = dt.datetime.strptime(self.starttime, '%Y-%m-%d %H:%M:%S %Z') + # self.endtime = configget(self.config,"run","endtime","0") + # de = dt.datetime.strptime(self.endtime, '%Y-%m-%d %H:%M:%S %Z') # #-set the timing criteria - sy = ds.year - sm = ds.month - sd = ds.day - ey = de.year - em = de.month - ed = de.day - self.startdate = self.datetime.datetime(sy,sm,sd) - self.enddate = self.datetime.datetime(ey,em,ed) + # sy = ds.year + # sm = ds.month + # sd = ds.day + # ey = de.year + # em = de.month + # ed = de.day + # self.startdate = self.datetime.datetime(sy,sm,sd) + # self.enddate = self.datetime.datetime(ey,em,ed) # #-get start date of first forcing file in forcing directory # syF = config.getint('TIMING', 'startyear_F') @@ -584,7 +584,7 @@ #-and the start date of the first forcing file in your forcing directory. #self.counter = (self.startdate - self.startdateF).days # #-initial date - self.curdate = self.startdate + # self.curdate = self.startdate #self.curdate = configget(self.config,"run","starttime","0") #print self.curdate #-initial soil properties