def FW1Withlake(Model, Lake, ll_temp=None, q_0=None): """ ============================================================== FW1Withlake(Model, Lake,ll_temp=None, q_0=None) ============================================================== FW1 connects two module : 1- The distributed rainfall-runoff module 2- Triangular function-1 routing method 3- Lake module Parameters ---------- Model : TYPE DESCRIPTION. Lake : TYPE DESCRIPTION. ll_temp : TYPE, optional DESCRIPTION. The default is None. q_0 : TYPE, optional DESCRIPTION. The default is None. Returns ------- None. """ plake = Lake.MeteoData[:, 0] et = Lake.MeteoData[:, 1] t = Lake.MeteoData[:, 2] tm = Lake.MeteoData[:, 3] # lake simulation Lake.Qlake, _ = hbv_lake.simulate( plake, t, et, Lake.Parameters, [Model.Timef, Lake.CatArea, Lake.LakeArea], Lake.StageDischargeCurve, 0, init_st=Lake.InitialCond, ll_temp=tm, lake_sim=True) # qlake is in m3/sec # lake routing Lake.QlakeR = routing.muskingum(Lake.Qlake, Lake.Qlake[0], Lake.Parameters[11], Lake.Parameters[12], Model.Timef) # subcatchment distrrm.RunLumpedRRM(Model) distrrm.DistMAXBAS(Model) qlz1 = np.array([ np.nansum(Model.qlz[:, :, i]) for i in range(Model.Parameters.shape[2] + 1) ]) # average of all cells (not routed mm/timestep) quz1 = np.array([ np.nansum(Model.quz[:, :, i]) for i in range(Model.Parameters.shape[2] + 1) ]) # average of all cells (routed mm/timestep) qout = qlz1 + quz1 # qout = (qlz1 + quz1) * Model.CatArea / (Model.Timef* 3.6) Model.qout = qout[:-1] + Lake.QlakeR
def FW1Withlake(ConceptualModel, FPL, sp_prec, sp_et, sp_temp, parameters, p2, snow, init_st, lakeCalibArray, StageDischargeCurve, LakeParameters, lakecell, lake_initial, ll_temp=None, q_0=None): plake = lakeCalibArray[:, 0] et = lakeCalibArray[:, 1] t = lakeCalibArray[:, 2] tm = lakeCalibArray[:, 3] # lake simulation q_lake, _ = hbv_lake.simulate(plake, t, et, LakeParameters[:-1], p2, StageDischargeCurve, 0, init_st=lake_initial, ll_temp=tm, lake_sim=True) # qlake is in m3/sec # lake routing qlake_r = routing.TriangularRouting(q_lake, LakeParameters[-1]) # subcatchment AdditionalParameters = p2[0:2] st, q_lz, q_uz = distrrm.RunLumpedRRP(ConceptualModel, FPL, sp_prec=sp_prec, sp_et=sp_et, sp_temp=sp_temp, sp_pars=parameters, p2=AdditionalParameters, snow=snow, init_st=init_st) SPMAXBAS = parameters[:, :, -1] q_uz = distrrm.DistMAXBAS(FPL, SPMAXBAS, q_uz) # q_lz1 = np.array([ np.nansum(q_lz[:, :, i]) for i in range(sp_prec.shape[2] + 1) ]) # average of all cells (not routed mm/timestep) q_uz1 = np.array([ np.nansum(q_uz[:, :, i]) for i in range(sp_prec.shape[2] + 1) ]) # average of all cells (routed mm/timestep) q_out = (q_lz1 + q_uz1) * p2[1] / (p2[0] * 3.6) q_out = q_out[:-1] + qlake_r return st, q_out, q_uz, q_lz
def HapiWithlake(Model, Lake, ll_temp=None, q_0=None): """ ============================================================ HapiWithlake(Model, Lake,ll_temp=None, q_0=None) ============================================================ HapiWithlake connects three modules the lake, the distributed ranfall-runoff module and spatial routing module Parameters ---------- Model : [Catchment object] DESCRIPTION. Lake : TYPE DESCRIPTION. ll_temp : TYPE, optional DESCRIPTION. The default is None. q_0 : TYPE, optional DESCRIPTION. The default is None. Returns ------- None. """ plake = Lake.MeteoData[:, 0] et = Lake.MeteoData[:, 1] t = Lake.MeteoData[:, 2] tm = Lake.MeteoData[:, 3] # lake simulation Lake.Qlake, _ = hbv_lake.simulate( plake, t, et, Lake.Parameters, [Model.Timef, Lake.CatArea, Lake.LakeArea], Lake.StageDischargeCurve, 0, init_st=Lake.InitialCond, ll_temp=tm, lake_sim=True) # qlake is in m3/sec # lake routing Lake.QlakeR = routing.Muskingum_V(Lake.Qlake, Lake.Qlake[0], Lake.Parameters[11], Lake.Parameters[12], Model.Timef) # subcatchment distrrm.RunLumpedRRM(Model) # routing lake discharge with DS cell k & x and adding to cell Q qlake = routing.Muskingum_V( Lake.QlakeR, Lake.QlakeR[0], Model.Parameters[Lake.OutflowCell[0], Lake.OutflowCell[1], 10], Model.Parameters[Lake.OutflowCell[0], Lake.OutflowCell[1], 11], Model.Timef) qlake = np.append(qlake, qlake[-1]) # both lake & Quz are in m3/s Model.quz[Lake.OutflowCell[0], Lake.OutflowCell[1], :] = Model.quz[ Lake.OutflowCell[0], Lake.OutflowCell[1], :] + qlake # run the GIS part to rout from cell to another distrrm.SpatialRouting(Model) Model.qout = Model.qout[:-1]
def HapiWithlake(ConceptualModel, flow_acc, flow_direct, sp_prec, sp_et, sp_temp, parameters, p2, snow, init_st, lakeCalibArray, StageDischargeCurve, LakeParameters, lakecell, lake_initial, ll_temp=None, q_0=None): plake = lakeCalibArray[:, 0] et = lakeCalibArray[:, 1] t = lakeCalibArray[:, 2] tm = lakeCalibArray[:, 3] # lake simulation q_lake, _ = hbv_lake.simulate(plake, t, et, LakeParameters, p2, StageDischargeCurve, 0, init_st=lake_initial, ll_temp=tm, lake_sim=True) # qlake is in m3/sec # lake routing qlake_r = routing.muskingum(q_lake, q_lake[0], LakeParameters[11], LakeParameters[12], p2[0]) # subcatchment AdditionalParameters = p2[0:2] st, q_lz, q_uz = distrrm.RunLumpedRRP(ConceptualModel, flow_acc, sp_prec=sp_prec, sp_et=sp_et, sp_temp=sp_temp, sp_pars=parameters, p2=AdditionalParameters, snow=snow, init_st=init_st) # routing lake discharge with DS cell k & x and adding to cell Q q_lake = routing.muskingum(qlake_r, qlake_r[0], parameters[lakecell[0], lakecell[1], 10], parameters[lakecell[0], lakecell[1], 11], p2[0]) q_lake = np.append(q_lake, q_lake[-1]) # both lake & Quz are in m3/s q_uz[lakecell[0], lakecell[1], :] = q_uz[lakecell[0], lakecell[1], :] + q_lake # run the GIS part to rout from cell to another q_out, q_uz_routed, q_lz_trans = distrrm.SpatialRouting( q_lz, q_uz, flow_acc, flow_direct, parameters, p2) q_out = q_out[:-1] return st, q_out, q_uz_routed, q_lz_trans