Skip to contents

Assign hydraulic variables (width, water depth, discharge, water velocity, ...) across a river object from measured values based on scaling relationships and/or uniform flow equations.

Usage

hydro_river(x, river, level = "AG", leopold = TRUE,
 expWidth = 0.5, expDepth = 0.4, expQ = 1,
 crossSection = "natural", ks = 30, minSlope = NULL)

Arguments

x

Data frame containing measured hydraulic variables. It must consist of columns data (numeric values of width in m, depth in m or discharge in m^3 s^(-1)), type (containing the variable type: width ("w"), depth ("d") or discharge ("Q")), and node (ID of AG or RN nodes to where data have been measured). See details.

river

river object. It must have been aggregated (via aggregate_river).

level

Aggregation level at which the nodes in x$node are defined and at which hydraulic variables are calculated. Possible values are "RN", "AG". See OCNet for details.

leopold

Logical. Should scaling relationships of hydraulic variables with drainage area (in the spirit of Leopold and Maddock, 1953) be preferred over uniform flow (Gauchler-Strickler/Manning) relationships? See details.

expWidth

Exponent for the scaling relationship of width to drainage area. See details.

expDepth

Exponent for the scaling relationship of depth to drainage area. See details.

expQ

Exponent for the scaling relationship of discharge to drainage area. See details.

crossSection

Shape of the river cross-section (constant across the river network). Possible values are "rectangular", "natural", or a numeric value indicating the exponent of the width-depth relationship. See details.

ks

Roughness coefficient according to Gauchler-Strickler (in m^(1/3)s^(-1)). It is the inverse of Manning's roughness coefficient. It can be a single value (thus assumed constant for the whole river network), or a vector of length equal to the number of nodes at the specified level (one roughness coefficient value for each corresponding node).

minSlope

Minimum slope value, replacing null or NaN values of slope in the river object. If NULL, it is assumed equal to either river$slope0 (if the river is an OCN) or to the minimum positive slope value at the selected level.

Value

A river object. The following elements are added to the list indicated by level:

width, depth, discharge

Values assigned at all nodes (see Details). Units are m, m, m^3 s^(-1), respectively.

velocity

Values in m s^(-1). Calculated by continuity (i.e., ratio between discharge and cross-sectional area).

volume

Values in m^3. Calculated as cross-sectional area times length.

hydraulicRadius

Values in m. Calculated as the ratio between cross-sectional area and wetted perimeter.

shearStress

Values in N m^(-2). Shear stress exerted at the streambed by waterflow. Calculated as gamma*hydraulicRadius*slope, where gamma = 9806 N m^(-3) is the specific weight of water.

Details

This function is a more complete version of rivergeometry_OCN.

x must consist of at least one width value and one value of either depth or discharge. All values included in x$data must be referred to the same time point, so that spatial interpolation can be performed. If the goal is assessing spatio-temporal changes in hydraulic variables, then hydro_river must be run independently for each time point. For each node, one cannot specify multiple values of the same variable type. Function locate_site can be used to attribute x$node.

If level = "AG", the drainage area values used for the power law relationships are calculated as 0.5*(river$AG$A + river$AG$AReach). If level = "RN", river$RN$A is used.

Width values in x are assumed to be measured at the water surface. If a single width value is provided, widths are calculated at all nodes from a power-law relationship on drainage area with exponent expWidth and such that width at the measured node is equal to the provided value. If multiple values of width are provided, the function fits a width-drainage area power law on the provided values. In this case, expWidth is not used and the output (fitted) width values at the measured nodes are generally different than the observed ones.

Depending on the type of depth and discharge data in x, the function behaves in eight different ways:

  1. If one depth value and zero discharge values are provided, the Gauchler-Strickler uniform flow relationship (hereafter GS) is applied to find discharge at the node where depth was measured. Discharge values are then attributed to all nodes based on a power-law relationship vs. drainage area (hereafter PL) with exponent expQ. Finally, depth values at all nodes are derived from GS.

  2. If one discharge value and zero depth values are provided, discharge values are attributed to all nodes based on a PL with exponent expQ, and such that the value at the measurement node be equal to the observed one. Depth values at all nodes are then derived from GS.

  3. If one discharge and one depth value are provided (not necessarily referred to the same node), discharge values are first attributed as in case 2. If leopold = TRUE, depth values are derived from a PL with exponent expDepth; conversely, GS is applied.

  4. If multiple values of discharge and zero values of depth are provided, discharge values are attributed from a power-law fit on measured values vs. drainage area (heareafter PLF). Depth values are then obtained from GS.

  5. If multiple values of depth and zero values of discharge are provided, depth values are obtained by PLF. Discharge values are then calculated from GS.

  6. If multiple values of discharge and one value of depth are provided, discharge values are first computed as in case 4. Depth values are then obtained by either PF with exponent expDepth (if leopold = TRUE), or alternatively via GS.

  7. If multiple values of depth and one value of discharge are provided, depth values are first computed as in case 5. Discharge values are then obtained as in case 2 (if leopold = TRUE), or alternatively computed from GS.

  8. If multiple values of both discharge and depth are provided, discharge values are computed as in case 4, and depth values are computed as in case 5.

Cross-sections are assumed as vertically symmetric. If crossSection = "natural", the relationship between width and depth at a cross-section is expressed by width ~ depth^0.65, as suggested by Leopold and Maddock (1953) (where width ~ discharge^0.26 and depth ~ discharge^0.4). Assuming crossSection = 0 is equivalent to "rectangular" (width does not depend on depth), while crossSection = 1 corresponds to an isosceles triangular cross-section.

See also

aggregate_river, locate_site, rivergeometry_OCN.

Examples

if (FALSE) { # interactive() && traudem::can_register_taudem()
# \donttest{
 
fp <- system.file("extdata/wigger.tif", package="rivnet")
river <- extract_river(outlet=c(637478,237413),
                       DEM=fp)
river <- aggregate_river(river)

data <- c(12.8,  6.7,  3.3,  1.1,  9.5,  0.8)
type <- c("w",   "w",  "w",  "w",  "Q",  "d")
node <- c( 46,   109,  181,  145,   46,   46) # assume these have been found via locate_site

x <- data.frame(data=data, type=type, node=node)

river1 <- hydro_river(x, river) # case 3
river2 <- hydro_river(x, river, leopold = FALSE) # case 3 (depth calculated via GS)

plot(0.5*(river1$AG$A + river1$AG$AReach), river1$AG$depth) # Power law with exponent 0.4
plot(0.5*(river2$AG$A + river2$AG$AReach), 
  river2$AG$depth) # Higher depths in reaches with small slope

river3 <- hydro_river(x, river, leopold = FALSE, minSlope = 0.002)
plot(0.5*(river1$AG$A + river1$AG$AReach), river1$AG$depth) # Variability is reduced

river <- hydro_river(x[-5, ], river) # case 1
river <- hydro_river(x[-6, ], river) # case 2

 # }
}