Converts the discharge series from flood_runoff into a routed
hydrograph and a water depth, using one of five methods that form a
complexity ladder. All methods obtain depth from Manning's equation for a
wide channel; they differ in how the flood wave is routed, from a steady
baseline to progressively more physics.
Usage
flood_route(
x,
method = c("muskingum-cunge", "manning-normal", "kinematic", "diffusive", "dynamic"),
width = 20,
slope = 0.001,
n = 0.035,
celerity = 1.5,
dx = 1000,
dt = 86400,
area_km2 = 100,
hand = NULL
)Arguments
- x
A
flood_projectwhoserunoffslot has been populated, or a dischargedata.framewith columnsdateandQ_mm.- method
One of
"muskingum-cunge"(default),"manning-normal","kinematic","diffusive"or"dynamic".- width
Representative channel width in metres. Default
20.- slope
Representative bed slope (dimensionless). Default
0.001.- n
Manning's roughness. If
xis a project with a scalar roughness set, that value is used unlessnis given explicitly. Default0.035.- celerity
Wave celerity in m/s for routing. Default
1.5.- dx
Reach length in metres for routing. Default
1000.- dt
Time step in seconds. Default
86400(daily).- area_km2
Catchment area in square kilometres, used to convert runoff depth (mm/day) to volumetric discharge (m^3/s). Default
100.- hand
Optional Height Above Nearest Drainage surface as a numeric vector or, with terra installed, a
SpatRaster. When supplied, the scalar peak depth is turned into a spatial inundation-depth field (flooding cells whose height above drainage is below the peak water level), stored asdepth_rasterand drawn byflood_map. A raw DEM may be passed for a crude proxy. DefaultNULL(no spatial depth).
Value
If x is a flood_project, the same object with its
route slot populated. Otherwise a list of class flood_route
with elements method, routed (a data frame of date,
Q_cms inflow and Q_routed outflow), peak_depth_m,
peak_velocity_ms, attenuation (routed peak divided by inflow
peak), depth_raster (a spatial inundation-depth field when
hand was supplied, otherwise NULL) and the hydraulic settings
used.
Details
"manning-normal"Steady uniform flow. Depth is the Manning normal depth of the (unrouted) peak discharge. The fast baseline.
"kinematic"Kinematic wave: near-pure translation of the hydrograph with negligible attenuation. Suited to steeper channels.
"diffusive"Diffusive wave: adds hydraulic diffusion so the peak attenuates and backwater effects appear.
"muskingum-cunge"Physically-based storage routing at diffusive-wave accuracy and low cost. The pragmatic default.
"dynamic"Uses the discharge-scaled hydraulic diffusivity as the best stable approximation available in pure R. Full two-dimensional Saint-Venant hydrodynamics are out of scope; for those, couple to a dedicated hydraulic model.
All routing is carried out with the numerically stable Muskingum-Cunge family, varying its diffusion to represent each rung of the ladder.
References
Cunge, J. A. (1969). On the subject of a flood propagation computation method (Muskingum method). Journal of Hydraulic Research, 7(2), 205-230.
Manning, R. (1891). On the flow of water in open channels and pipes. Transactions of the Institution of Civil Engineers of Ireland, 20, 161-207.
See also
flood_runoff for the discharge this routes.
Examples
set.seed(1)
dates <- seq(as.Date("2020-06-01"), by = "day", length.out = 30)
Q <- c(0, 1, 3, 8, 18, 30, 22, 14, 8, 4, 2, 1, rep(0, 18))
disc <- data.frame(date = dates, Q_mm = Q)
r_mc <- flood_route(disc, method = "muskingum-cunge")
r_kin <- flood_route(disc, method = "kinematic")
# Kinematic attenuates less than Muskingum-Cunge
r_kin$attenuation >= r_mc$attenuation
#> [1] TRUE
# Spatial inundation depth from a HAND surface (a numeric vector here; a
# terra SpatRaster works the same way and produces a mappable raster)
hand <- c(0, 0.5, 1, 2, 4, 6)
r_spatial <- flood_route(disc, area_km2 = 300, hand = hand)
r_spatial$depth_raster # deepest in the valley, dry on high ground
#> [1] 2.8553495 2.3553495 1.8553495 0.8553495 0.0000000 0.0000000