5.13.2-dev0
mHM
The mesoscale Hydrological Model
Loading...
Searching...
No Matches
mo_mrm_routing Module Reference

Performs runoff routing for mHM at level L11. More...

Functions/Subroutines

subroutine, public mrm_routing (read_states, processcase, global_routing_param, l1_total_runoff, l1_areacell, l1_l11_id, l11_areacell, l11_l1_id, l11_netperm, l11_fromn, l11_ton, l11_noutlets, timestep, tsroutfactor, nnodes, ninflowgauges, inflowgaugeindexlist, inflowgaugeheadwater, inflowgaugenodelist, inflowdischarge, ngauges, gaugeindexlist, gaugenodelist, map_flag, l11_length, l11_slope, l11_fracfpimp, l11_c1, l11_c2, l11_qout, l11_qtin, l11_qtr, l11_qmod, gaugedischarge)
 route water given runoff
 
subroutine l11_routing (nnodes, nlinks, netperm, netlink_fromn, netlink_ton, netlink_c1, netlink_c2, netnode_qout, ninflowgauges, inflowheadwater, inflownodelist, netnode_qtin, netnode_qtr, netnode_qmod)
 Performs runoff routing for mHM at L11 upscaled network (Routing Network).
 

Detailed Description

Performs runoff routing for mHM at level L11.

This module performs flood routing at a given time step through the stream network at level L11 to the sink cell. The Muskingum flood routing algorithm is used.

Changelog
  • Stephan Thober Aug 2015
    • adapted to mRM
  • Sebastian Mueller Jun 2020
    • outsourcing helper functions
Authors
Luis Samaniego
Date
Dec 2012

Function/Subroutine Documentation

◆ l11_routing()

subroutine mo_mrm_routing::l11_routing ( integer(i4), intent(in)  nnodes,
integer(i4), intent(in)  nlinks,
integer(i4), dimension(:), intent(in)  netperm,
integer(i4), dimension(:), intent(in)  netlink_fromn,
integer(i4), dimension(:), intent(in)  netlink_ton,
real(dp), dimension(:), intent(in)  netlink_c1,
real(dp), dimension(:), intent(in)  netlink_c2,
real(dp), dimension(:), intent(in)  netnode_qout,
integer(i4), intent(in)  ninflowgauges,
logical, dimension(:), intent(in)  inflowheadwater,
integer(i4), dimension(:), intent(in)  inflownodelist,
real(dp), dimension(:, :), intent(inout)  netnode_qtin,
real(dp), dimension(:, :), intent(inout)  netnode_qtr,
real(dp), dimension(nnodes), intent(out)  netnode_qmod 
)
private

Performs runoff routing for mHM at L11 upscaled network (Routing Network).

Hydrograph routing is carried out with the Muskingum algorithm [7]. This simplification of the St. Venant equations is justified in mHM because the potential areas of application of this model would hardly exhibit abruptly changing hydrographs with supercritical flows. The discharge leaving the river reach located on cell \( i \) \( Q_{i}^{1}(t) \) at time step \( t \) can be determined by

\[ Q_{i}^{1}(t) = Q_{i}^{1}(t-1) + c_{1} \left( Q_{i}^{0}(t-1) - Q_{i}^{1}(t-1) \right) + c_{2} \left( Q_{i}^{0}(t) - Q_{i}^{0}(t-1) \right) \]

with

\[ Q_{i}^{0}(t) = Q_{i'}(t) + Q_{i'}^{1}(t) \]

\[ c_{1}= \frac{\Delta t} { \kappa (1- \xi ) + \frac{\Delta t}{2} } \]

\[ c_{2}= \frac{ \frac{\Delta t}{2} - \kappa \xi} { \kappa (1- \xi) + \frac{\Delta t}{2} } \]

where \( Q_{i}^{0} \) and \( Q_{i}^{1} \) denote the discharge entering and leaving the river reach located on cell \( i \) respectively. \( Q_{i'} \) is the contribution from the upstream cell \( i'\). \( \kappa \) Muskingum travel time parameter. \( \xi \) Muskingum attenuation parameter. \( \Delta t \) time interval in hours. \( t \) Time index for each \( \Delta t \) interval. To improve performance, a routing sequence "netPerm" is required. This permutation is determined in the mo_init_mrm routine.

TODO: add description

Parameters
[in]integer(i4) :: nNodesnumber of network nodes = nCells1
[in]integer(i4) :: nLinksnumber of stream segment (reaches)
[in]integer(i4), dimension(:) :: netPermrouting order of a given domain (permutation)
[in]integer(i4), dimension(:) :: netLink_fromNfrom node
[in]integer(i4), dimension(:) :: netLink_toNto node
[in]real(dp), dimension(:) :: netLink_C1routing parameter C1 ([7] p. 25-41)
[in]real(dp), dimension(:) :: netLink_C2routing parameters C2 (id)
[in]real(dp), dimension(:) :: netNode_qOUTTotal outflow from cells (given domain) L11 at time tt in [m3 s-1]
[in]integer(i4) :: nInflowGauges[-] number of inflow points
[in]logical, dimension(:) :: InflowHeadwater[-] if to consider headwater cells of inflow gauge
[in]integer(i4), dimension(:) :: InflowNodeList[-] L11 ID of inflow points
[in,out]real(dp), dimension(:, :) :: netNode_qTIN[m3 s-1] Total inputs at t-1 and t
[in,out]real(dp), dimension(:, :) :: netNode_qTR[m3 s-1] Transformed outflow leaving node I (Muskingum)
[out]real(dp), dimension(nNodes) :: netNode_Qmod[m3 s-1] Simulated routed discharge
Authors
Luis Samaniego
Date
Dec 2005

Definition at line 380 of file mo_mrm_routing.f90.

Referenced by mrm_routing().

Here is the caller graph for this function:

◆ mrm_routing()

subroutine, public mo_mrm_routing::mrm_routing ( logical, intent(in)  read_states,
integer(i4), intent(in)  processcase,
real(dp), dimension(:), intent(in)  global_routing_param,
real(dp), dimension(:), intent(in)  l1_total_runoff,
real(dp), dimension(:), intent(in)  l1_areacell,
integer(i4), dimension(:), intent(in)  l1_l11_id,
real(dp), dimension(:), intent(in)  l11_areacell,
integer(i4), dimension(:), intent(in)  l11_l1_id,
integer(i4), dimension(:), intent(in)  l11_netperm,
integer(i4), dimension(:), intent(in)  l11_fromn,
integer(i4), dimension(:), intent(in)  l11_ton,
integer(i4), intent(in)  l11_noutlets,
integer(i4), intent(in)  timestep,
real(dp), intent(in)  tsroutfactor,
integer(i4), intent(in)  nnodes,
integer(i4), intent(in)  ninflowgauges,
integer(i4), dimension(:), intent(in)  inflowgaugeindexlist,
logical, dimension(:), intent(in)  inflowgaugeheadwater,
integer(i4), dimension(:), intent(in)  inflowgaugenodelist,
real(dp), dimension(:), intent(in)  inflowdischarge,
integer(i4), intent(in)  ngauges,
integer(i4), dimension(:), intent(in)  gaugeindexlist,
integer(i4), dimension(:), intent(in)  gaugenodelist,
logical, intent(in)  map_flag,
real(dp), dimension(:), intent(in)  l11_length,
real(dp), dimension(:), intent(in)  l11_slope,
real(dp), dimension(:), intent(in)  l11_fracfpimp,
real(dp), dimension(:), intent(inout)  l11_c1,
real(dp), dimension(:), intent(inout)  l11_c2,
real(dp), dimension(:), intent(inout)  l11_qout,
real(dp), dimension(:, :), intent(inout)  l11_qtin,
real(dp), dimension(:, :), intent(inout)  l11_qtr,
real(dp), dimension(:), intent(inout)  l11_qmod,
real(dp), dimension(:), intent(inout)  gaugedischarge 
)

route water given runoff

This routine first performs mpr for the routing variables if required, then accumulates the runoff to the routing resolution and eventually routes the water in a third step. The last step is repeated multiple times if the routing timestep is smaller than the timestep of the hydrological timestep

Parameters
[in]logical :: read_stateswhether states are derived from restart file
[in]integer(i4) :: processCaseProcess switch for routing
[in]real(dp), dimension(:) :: global_routing_paramrouting parameters
[in]real(dp), dimension(:) :: L1_total_runofftotal runoff from L1 grid cells
[in]real(dp), dimension(:) :: L1_areaCellL1 cell area
[in]integer(i4), dimension(:) :: L1_L11_IdL1 cell ids on L11
[in]real(dp), dimension(:) :: L11_areaCellL11 cell area
[in]integer(i4), dimension(:) :: L11_L1_IdL11 cell ids on L1
[in]integer(i4), dimension(:) :: L11_netPermL11 routing order
[in]integer(i4), dimension(:) :: L11_fromNL11 source grid cell order
[in]integer(i4), dimension(:) :: L11_toNL11 target grid cell order
[in]integer(i4) :: L11_nOutletsL11 number of outlets/sinks
[in]integer(i4) :: timestepsimulation timestep in [h]
[in]real(dp) :: tsRoutFactorfactor between routing timestep and hydrological timestep
[in]integer(i4) :: nNodesnumber of nodes
[in]integer(i4) :: nInflowGaugesnumber of inflow gauges
[in]integer(i4), dimension(:) :: InflowGaugeIndexListindex list of inflow gauges
[in]logical, dimension(:) :: InflowGaugeHeadwaterflag for headwater cell of inflow gauge
[in]integer(i4), dimension(:) :: InflowGaugeNodeListgauge node list at L11
[in]real(dp), dimension(:) :: InflowDischargeinflowing discharge at discharge gauge at current day
[in]integer(i4) :: nGaugesnumber of recording gauges
[in]integer(i4), dimension(:) :: gaugeIndexListindex list for outflow gauges
[in]integer(i4), dimension(:) :: gaugeNodeListgauge node list at L11
[in]logical :: map_flagflag indicating whether routing resolution iscoarser than hydrologic resolution
[in]real(dp), dimension(:) :: L11_lengthL11 link length
[in]real(dp), dimension(:) :: L11_slopeL11 slope
[in]real(dp), dimension(:) :: L11_FracFPimpL11 fraction of flood plain with impervios cover
[in,out]real(dp), dimension(:) :: L11_C1L11 muskingum parameter 1
[in,out]real(dp), dimension(:) :: L11_C2L11 muskingum parameter 2
[in,out]real(dp), dimension(:) :: L11_qOuttotal runoff from L11 grid cells
[in,out]real(dp), dimension(:, :) :: L11_qTINL11 inflow to the reach
[in,out]real(dp), dimension(:, :) :: L11_qTRL11 routed outflow
[in,out]real(dp), dimension(:) :: L11_qModmodelled discharge at each grid cell
[in,out]real(dp), dimension(:) :: GaugeDischargemodelled discharge at each gauge
Authors
Stephan Thober
Date
Aug 2015

Definition at line 104 of file mo_mrm_routing.f90.

References mo_mrm_pre_routing::add_inflow(), mo_mrm_global_variables::is_start, mo_mrm_global_variables::l11_areacell, mo_mrm_global_variables::l11_c1, mo_mrm_global_variables::l11_c2, mo_mrm_pre_routing::l11_e_acc(), mo_mrm_global_variables::l11_fromn, mo_mrm_global_variables::l11_l1_id, mo_mrm_global_variables::l11_length, mo_mrm_global_variables::l11_netperm, mo_mrm_global_variables::l11_noutlets, mo_mrm_global_variables::l11_qmod, mo_mrm_global_variables::l11_qout, mo_mrm_global_variables::l11_qtin, mo_mrm_global_variables::l11_qtr, l11_routing(), mo_mrm_pre_routing::l11_runoff_acc(), mo_mrm_global_variables::l11_slope, mo_mrm_global_variables::l11_ton, mo_mrm_global_variables::l1_l11_id, mo_mrm_mpr::reg_rout(), and mo_mrm_global_variables::riv_temp_pcs.

Referenced by mo_mhm_interface_run::mhm_interface_run_do_time_step().

Here is the call graph for this function:
Here is the caller graph for this function: