Index: doc/index.rst =================================================================== diff -u -ra2fa1126e61092a40a3ec17cf9e959d80e91b480 -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- doc/index.rst (.../index.rst) (revision a2fa1126e61092a40a3ec17cf9e959d80e91b480) +++ doc/index.rst (.../index.rst) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -22,7 +22,10 @@ + matplotlib + gdal + Alternatively you can use one of the releases (executable) to run the models withour installing python and the + required packages: https://github.com/openstreams/wflow/releases + Introduction ============ Index: doc/wflow_routing.rst =================================================================== diff -u -r34c2b30d41c043c3a36fb6b265acea8484cd201e -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- doc/wflow_routing.rst (.../wflow_routing.rst) (revision 34c2b30d41c043c3a36fb6b265acea8484cd201e) +++ doc/wflow_routing.rst (.../wflow_routing.rst) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -2,14 +2,10 @@ ======================= -.. warning:: - - The documentation of this model is incomplete - Introduction ------------ The wflow routing module uses the pcraster kinematic wave to route water over a DEM. By adding a bankflull level -and a floodplainwidth to the configuration the model can also inclue estimate flow over a floodplain. +and a floodplainwidth to the configuration the model can also include estimated flow over a floodplain. Method ====== @@ -64,6 +60,8 @@ [inputmapstacks] # Name of the mapstack with specific discharge (mm/timestep output from the hydrological model) IW= inmaps/IW + # of if you next this within say the wflow\_hv model: + # IW = outmaps/IW @@ -74,11 +72,69 @@ In addition to the settings in the ini file you need to give the model additional maps or lookuptables in the staticmaps or intbl directories: +Lookup tables +~~~~~~~~~~~~~ +:N.tbl: + Manning's N fro all no-river cells. Defaults to 0.072 +:N_River.tbl: + Manning's N for the river cells. Defaults to 0.036 +:N_FloodPlain.tbl: + Manning's N for the floodplain. A floodplain is always linked to a river cell. Defaults to 2* N of the river +As with all models the lookup tables can be replaced by a map with the same name (but with the .map extension) in the staticmaps directory. +staticmaps +~~~~~~~~~~ + +:wflow_subcatch.map: + Map of the subcatchment in the area. Usually shared with the hydrological model + +:wflow_dem.map: + The digital elevation model. Usually shared with the hydrological model + +:wflow_ldd.map: + The D8 local drainage network. + +:wflow_river.map: + Definition of the river cells. + +:wflow_riverlength.map: + Optional map that defines the actual legth of the river in each cell. + +:wflow_riverlength_fact.map: + Optional map that defines a multiplication factor fro the river length in each cell. + +:wflow_gauges.map: + Map of river gauges that can be used in outputting timeseries + +:wflow_inflow.map: + Optional map of inflow points into the surface water. Limited testing. + +:wflow_riverwidth.map: + Optional map of the width of the river for each river cell. + +:wflow_floodplainwidth.map: + Optional map of the width of the floodplain for each river cell. + +:wflow_bankfulldepth.map: + Optional map of the level at which the river starts to flood and water will also be conducted over the floodplain. + +:wflow_floodplaindist.map: + Optional map that defines the relation between the water level in the floodplain + +:wflow_landuse.map: + Required map of landuse/land cover. This map is used in the lookup tables to relate parameters to landuse/landcover. + Usually shared with the hydrological model + +:wflow_soil.map: + Required map of soil type. Usually shared with the hydrological model + + + + wflow_routing module documentation ---------------------------------- Index: examples/wflow_rhine_sbm/instate/SurfaceRunoff.map =================================================================== diff -u -rb1767106ac9c9dccca2d2ad84581809714db3b2f -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 Binary files differ Index: examples/wflow_rhine_sbm/wflow_routing.ini =================================================================== diff -u -r34c2b30d41c043c3a36fb6b265acea8484cd201e -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- examples/wflow_rhine_sbm/wflow_routing.ini (.../wflow_routing.ini) (revision 34c2b30d41c043c3a36fb6b265acea8484cd201e) +++ examples/wflow_rhine_sbm/wflow_routing.ini (.../wflow_routing.ini) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -60,3 +60,4 @@ self.AlphaCh = alch self.AlphaFP = alfp self.Ncombined = nc +self.MassBalKinWave = wat Index: examples/wflow_rhine_sbm/wflow_sbm.ini =================================================================== diff -u -r34c2b30d41c043c3a36fb6b265acea8484cd201e -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision 34c2b30d41c043c3a36fb6b265acea8484cd201e) +++ examples/wflow_rhine_sbm/wflow_sbm.ini (.../wflow_sbm.ini) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -92,6 +92,7 @@ #self.watbal=wat self.PotenEvap=PET self.Precipitation=P +self.MassBalKinWave=wat [summary] self.MaxLeakage=MaxLeakage.map Index: wflow-py/wflow/wflow_routing.py =================================================================== diff -u -r34c2b30d41c043c3a36fb6b265acea8484cd201e -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- wflow-py/wflow/wflow_routing.py (.../wflow_routing.py) (revision 34c2b30d41c043c3a36fb6b265acea8484cd201e) +++ wflow-py/wflow/wflow_routing.py (.../wflow_routing.py) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -168,10 +168,10 @@ self.WaterLevel = self.WaterLevelCH + self.WaterLevelFP # Dtermien Qtot as a check - self.Qtot = pow(self.WaterLevelCH/self.AlphaCh * self.Bw,1.0/self.Beta) + pow(self.WaterLevelFP/self.AlphaFP * self.Pfp,1.0/self.Beta) + self.Qtot = pow(self.WaterLevelCH/self.AlphaCh * self.Bw,1.0/self.Beta) + pow(self.WaterLevelFP/self.AlphaFP * (self.Pfp + self.Bw),1.0/self.Beta) # wetted perimeter (m) self.Pch = self.wetPerimiterCH(self.WaterLevelCH,self.Bw) - self.Pfp = ifthenelse(self.River,self.wetPerimiterFP(self.WaterLevelFP,self.floodPlainWidth + self.Bw,sharpness=self.floodPlainDist),0.0) + self.Pfp = ifthenelse(self.River,self.wetPerimiterFP(self.WaterLevelFP,self.floodPlainWidth,sharpness=self.floodPlainDist),0.0) # Alpha self.WetPComb = self.Pch + self.Pfp @@ -184,8 +184,9 @@ self.AlphaCh = self.AlpTerm * pow(self.Pch, self.AlpPow) self.Alpha = ifthenelse(self.River,self.AlpTermComb * pow(self.Pch + self.Pfp, self.AlpPow),self.AlphaCh) self.OldKinWaveVolume = self.KinWaveVolume - self.KinWaveVolume = (self.WaterLevelCH * self.Bw * self.DCL) + (self.WaterLevelFP * self.Pfp * self.DCL) + self.KinWaveVolume = (self.WaterLevelCH * self.Bw * self.DCL) + (self.WaterLevelFP * (self.Pfp + self.Bw) * self.DCL) + def stateVariables(self): """ returns a list of state variables that are essential to the model. @@ -306,7 +307,7 @@ self.OutputLoc = readmap(os.path.join(self.Dir,wflow_gauges)) # location of output gauge(s) self.InflowLoc = pcrut.readmapSave(os.path.join(self.Dir,wflow_inflow), 0.0) # location abstractions/inflows. self.RiverWidth = pcrut.readmapSave(os.path.join(self.Dir,wflow_riverwidth), 0.0) - self.bankFull = pcrut.readmapSave(os.path.join(self.Dir,wflow_bankfulldepth), 16.0) + self.bankFull = pcrut.readmapSave(os.path.join(self.Dir,wflow_bankfulldepth), 999999.0) self.floodPlainWidth = pcrut.readmapSave(os.path.join(self.Dir,wflow_floodplainwidth), 8000.0) self.floodPlainDist = pcrut.readmapSave(os.path.join(self.Dir,wflow_floodplaindist), 0.5) @@ -482,7 +483,7 @@ self.wf_resume(os.path.join(self.Dir,"instate")) self.Pch = self.wetPerimiterCH(self.WaterLevelCH,self.Bw) - self.Pfp = ifthenelse(self.River,self.wetPerimiterFP(self.WaterLevelFP,self.floodPlainWidth + self.Bw,sharpness=self.floodPlainDist),0.0) + self.Pfp = ifthenelse(self.River,self.wetPerimiterFP(self.WaterLevelFP,self.floodPlainWidth,sharpness=self.floodPlainDist),0.0) self.WetPComb = self.Pch + self.Pfp self.Ncombined = (self.Pch/self.WetPComb*self.N**1.5 + self.Pfp/self.WetPComb*self.NFloodPlain**1.5)**(2./3.) @@ -497,7 +498,7 @@ self.SurfaceRunoffMM = self.SurfaceRunoff * self.QMMConv # Determine initial kinematic wave volume - self.KinWaveVolume = (self.WaterLevelCH * self.Bw * self.DCL) + (self.WaterLevelFP * self.Pfp * self.DCL) + self.KinWaveVolume = (self.WaterLevelCH * self.Bw * self.DCL) + (self.WaterLevelFP * (self.Pfp + self.Bw) * self.DCL) self.OldKinWaveVolume = self.KinWaveVolume self.SurfaceRunoffMM = self.SurfaceRunoff * self.QMMConv @@ -544,7 +545,7 @@ self.SurfaceRunoffMM = self.SurfaceRunoff * self.QMMConv # SurfaceRunoffMM (mm) from SurfaceRunoff (m3/s) self.updateRunOff() self.InflowKinWaveCell = upstream(self.TopoLdd, self.SurfaceRunoff) - self.MassBalKinWave = (self.KinWaveVolume - self.OldKinWaveVolume) / self.timestepsecs + self.InflowKinWaveCell + self.Inwater - self.SurfaceRunoff + self.MassBalKinWave = (-self.KinWaveVolume + self.OldKinWaveVolume) / self.timestepsecs + self.InflowKinWaveCell + self.Inwater - self.SurfaceRunoff Runoff = self.SurfaceRunoff Index: wflow-py/wflow/wflow_sbm.py =================================================================== diff -u -r34c2b30d41c043c3a36fb6b265acea8484cd201e -r0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0 --- wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision 34c2b30d41c043c3a36fb6b265acea8484cd201e) +++ wflow-py/wflow/wflow_sbm.py (.../wflow_sbm.py) (revision 0fc7439329d0ea7ec14ea9360d97a18ebbcf82c0) @@ -1231,7 +1231,7 @@ self.SurfaceRunoffMM = self.SurfaceRunoff * self.QMMConv # SurfaceRunoffMM (mm) from SurfaceRunoff (m3/s) self.updateRunOff() self.InflowKinWaveCell = upstream(self.TopoLdd, self.SurfaceRunoff) - self.MassBalKinWave = (self.KinWaveVolume - self.OldKinWaveVolume) / self.timestepsecs + self.InflowKinWaveCell + self.Inwater - self.SurfaceRunoff + self.MassBalKinWave = (-self.KinWaveVolume + self.OldKinWaveVolume) / self.timestepsecs + self.InflowKinWaveCell + self.Inwater - self.SurfaceRunoff Runoff = self.SurfaceRunoff