Example #1
0
    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
Example #2
0
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
Example #3
0
    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]
Example #4
0
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