mHM
The mesoscale Hydrological Model
|
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). | |
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.
COPYING
and COPYING.LESSER
provided with this software. The complete GNU license text can also be found at http://www.gnu.org/licenses/.
|
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
[in] | integer(i4) :: nNodes | number of network nodes = nCells1 |
[in] | integer(i4) :: nLinks | number of stream segment (reaches) |
[in] | integer(i4), dimension(:) :: netPerm | routing order of a given domain (permutation) |
[in] | integer(i4), dimension(:) :: netLink_fromN | from node |
[in] | integer(i4), dimension(:) :: netLink_toN | to node |
[in] | real(dp), dimension(:) :: netLink_C1 | routing parameter C1 ([7] p. 25-41) |
[in] | real(dp), dimension(:) :: netLink_C2 | routing parameters C2 (id) |
[in] | real(dp), dimension(:) :: netNode_qOUT | Total 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 |
Definition at line 380 of file mo_mrm_routing.f90.
Referenced by 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
[in] | logical :: read_states | whether states are derived from restart file |
[in] | integer(i4) :: processCase | Process switch for routing |
[in] | real(dp), dimension(:) :: global_routing_param | routing parameters |
[in] | real(dp), dimension(:) :: L1_total_runoff | total runoff from L1 grid cells |
[in] | real(dp), dimension(:) :: L1_areaCell | L1 cell area |
[in] | integer(i4), dimension(:) :: L1_L11_Id | L1 cell ids on L11 |
[in] | real(dp), dimension(:) :: L11_areaCell | L11 cell area |
[in] | integer(i4), dimension(:) :: L11_L1_Id | L11 cell ids on L1 |
[in] | integer(i4), dimension(:) :: L11_netPerm | L11 routing order |
[in] | integer(i4), dimension(:) :: L11_fromN | L11 source grid cell order |
[in] | integer(i4), dimension(:) :: L11_toN | L11 target grid cell order |
[in] | integer(i4) :: L11_nOutlets | L11 number of outlets/sinks |
[in] | integer(i4) :: timestep | simulation timestep in [h] |
[in] | real(dp) :: tsRoutFactor | factor between routing timestep and hydrological timestep |
[in] | integer(i4) :: nNodes | number of nodes |
[in] | integer(i4) :: nInflowGauges | number of inflow gauges |
[in] | integer(i4), dimension(:) :: InflowGaugeIndexList | index list of inflow gauges |
[in] | logical, dimension(:) :: InflowGaugeHeadwater | flag for headwater cell of inflow gauge |
[in] | integer(i4), dimension(:) :: InflowGaugeNodeList | gauge node list at L11 |
[in] | real(dp), dimension(:) :: InflowDischarge | inflowing discharge at discharge gauge at current day |
[in] | integer(i4) :: nGauges | number of recording gauges |
[in] | integer(i4), dimension(:) :: gaugeIndexList | index list for outflow gauges |
[in] | integer(i4), dimension(:) :: gaugeNodeList | gauge node list at L11 |
[in] | logical :: map_flag | flag indicating whether routing resolution iscoarser than hydrologic resolution |
[in] | real(dp), dimension(:) :: L11_length | L11 link length |
[in] | real(dp), dimension(:) :: L11_slope | L11 slope |
[in] | real(dp), dimension(:) :: L11_FracFPimp | L11 fraction of flood plain with impervios cover |
[in,out] | real(dp), dimension(:) :: L11_C1 | L11 muskingum parameter 1 |
[in,out] | real(dp), dimension(:) :: L11_C2 | L11 muskingum parameter 2 |
[in,out] | real(dp), dimension(:) :: L11_qOut | total runoff from L11 grid cells |
[in,out] | real(dp), dimension(:, :) :: L11_qTIN | L11 inflow to the reach |
[in,out] | real(dp), dimension(:, :) :: L11_qTR | L11 routed outflow |
[in,out] | real(dp), dimension(:) :: L11_qMod | modelled discharge at each grid cell |
[in,out] | real(dp), dimension(:) :: GaugeDischarge | modelled discharge at each gauge |
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().