@@ -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 (
0 commit comments