Skip to content

Commit ba5efd3

Browse files
committed
Bug correction reservoir wflow_hbv
1 parent 0609f05 commit ba5efd3

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

wflow/wflow_hbv.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -581,15 +581,27 @@ def initial(self):
581581

582582
self.wf_updateparameters()
583583

584-
self.ReserVoirLocs = self.ZeroMap
584+
if hasattr(self, "ReserVoirSimpleLocs") or hasattr(
585+
self, "LakeLocs"
586+
):
587+
self.ReserVoirLocs = self.ZeroMap
588+
self.filter_P_PET = self.ZeroMap + 1.0
585589

586590
if hasattr(self, "ReserVoirSimpleLocs"):
587591
# Check if we have simple and or complex reservoirs
592+
self.ReserVoirSimpleLocs = pcr.nominal(self.ReserVoirSimpleLocs)
593+
self.ReservoirSimpleAreas = pcr.nominal(self.ReservoirSimpleAreas)
588594
tt_simple = pcr.pcr2numpy(self.ReserVoirSimpleLocs, 0.0)
589595
self.nrresSimple = tt_simple.max()
590596
self.ReserVoirLocs = self.ReserVoirLocs + pcr.cover(
591597
pcr.scalar(self.ReserVoirSimpleLocs), 0.0
592598
)
599+
res_area = pcr.cover(pcr.scalar(self.ReservoirSimpleAreas), 0.0)
600+
self.filter_P_PET = pcr.ifthenelse(
601+
pcr.boolean(pcr.cover(res_area, pcr.scalar(0.0))),
602+
res_area * 0.0,
603+
self.filter_P_PET,
604+
)
593605
else:
594606
self.nrresSimple = 0
595607

@@ -686,6 +698,9 @@ def initial(self):
686698
self.TopoLdd,
687699
)
688700
)
701+
702+
tt_filter = pcr.pcr2numpy(self.filter_P_PET, 1.0)
703+
self.filterResArea = tt_filter.min()
689704

690705
# HBV Soil params
691706
self.FC = self.readtblDefault(
@@ -899,8 +914,10 @@ def initial(self):
899914
# Alf ranges from 5 to > 60. 5 for hardrock. large values for sediments
900915
# "Noah J. Finnegan et al 2005 Controls on the channel width of rivers:
901916
# Implications for modeling fluvial incision of bedrock"
902-
903-
upstr = pcr.catchmenttotal(1, self.TopoLdd)
917+
if (self.nrresSimple + self.nrlake) > 0:
918+
upstr = pcr.catchmenttotal(1, self.TopoLddOrg)
919+
else:
920+
upstr = pcr.catchmenttotal(1, self.TopoLdd)
904921
Qscale = upstr / pcr.mapmaximum(upstr) * Qmax
905922
W = (
906923
(alf * (alf + 2.0) ** (0.6666666667)) ** (0.375)
@@ -1285,7 +1302,7 @@ def dynamic(self):
12851302
# I nthe origal HBV code
12861303
RestEvap = pcr.max(0.0, self.PotEvaporation - self.IntEvap)
12871304

1288-
if hasattr(self, "ReserVoirComplexLocs"):
1305+
if (self.nrresSimple + self.nrlake) > 0 and self.filterResArea == 0:
12891306
self.ReserVoirPotEvap = self.PotEvaporation
12901307
self.ReserVoirPrecip = self.Precipitation
12911308

@@ -1494,15 +1511,19 @@ def dynamic(self):
14941511
# only run the reservoir module if needed
14951512

14961513
if self.nrresSimple > 0:
1497-
self.ReservoirVolume, self.Outflow, self.ResPercFull, self.DemandRelease = simplereservoir(
1514+
self.ReservoirVolume, self.Outflow, self.ResPercFull, self.ResPrecip, self.ResEvap, self.DemandRelease = simplereservoir(
14981515
self.ReservoirVolume,
14991516
self.SurfaceRunoff,
1517+
self.ResSimpleArea,
15001518
self.ResMaxVolume,
15011519
self.ResTargetFullFrac,
15021520
self.ResMaxRelease,
15031521
self.ResDemand,
15041522
self.ResTargetMinFrac,
15051523
self.ReserVoirSimpleLocs,
1524+
self.ReserVoirPrecip,
1525+
self.ReserVoirPotEvap,
1526+
self.ReservoirSimpleAreas,
15061527
timestepsecs=self.timestepsecs,
15071528
)
15081529
self.OutflowDwn = pcr.upstream(

wflow/wflow_sediment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def estimate_sedriv_tranport_iter(Q, deltaT, h, x, W, mv = -999):
8484

8585
it = np.ceil(deltaT / np.amin(minTstep))
8686
#Maximum number of iterations
87-
it = max(it, 1000)
87+
it = min(it, 1000)
8888

8989
return it
9090

0 commit comments

Comments
 (0)