expuh {hydromad}R Documentation

Exponential components transfer function models

Description

A unit hydrograph (linear transfer function) defined as a system of exponentially receding components. Each component is defined by its time constant and fractional volume, and if there are multiple (up to 3) such components they may be in a parallel and/or series configuration.

Usage

expuh.sim(U, delay = 0,
          tau_s = 0, tau_q = 0, tau_3 = 0,
          v_s = 1, v_q = NA, v_3 = 0,
          series = 0, loss = 0,
          Xs_0 = 0, Xq_0 = 0, X3_0 = 0,
          pars = NULL,
          return_components = FALSE,
	  na.action = na.pass,
          epsilon = hydromad.getOption("sim.epsilon"))

ssg.expuh(theta)
normalise.expuh(theta)

Arguments

U

input time series.

delay

lag (dead time) between input and response, in time steps.

tau_s, tau_q, tau_3

time constants (τ) for the exponential components.

v_s, v_q, v_3

fractional volumes (v) for the exponential components.

series

defines the configuration of exponential components, as being in parallel and/or series (for second or third order models). See Details.

loss

a constant loss (or gain, if negative) term subtracted from the slow (s) component.

Xs_0, Xq_0, X3_0

initial values of the exponential components.

pars

the parameters as a named vector. If this is given, it will over-ride the named parmameter arguments.

return_components

whether to return all component time series.

na.action

function to remove missing values, e.g. na.omit.

epsilon

values smaller than this in the output will be set to zero.

theta

the parameters as a named vector.

Details

The expuh model is a transfer function translating an input time series U into an output series X. It describes a configuration of exponentially decaying components, each defined by a recession rate α and peak response β. However, in hydrology these parameters are more easily interpreted in terms of time constants τ (number of time steps to reduce to a fraction 1/e, 37%) and fractional volumes v. These are directly related as:

τ = -1 / \log(α)

v = β / (1 - α)

If there are two components in parallel, these are conventionally called slow (s) and quick (q) flow components. The total simulated flow X is the sum of these; X[t] = X_s[t] + X_q[t], and:

X_s[t] = α_s X_s[t-1] + β_s U[t]

X_q[t] = α_q X_q[t-1] + β_q U[t]

Two components might also be arranged in series rather than parallel, in which case:

X_s[t] = α_s X_s[t-1] + β_s U[t]

X[t] = α_q X[t-1] + β_q X_s[t]

This configuration is specified by the argument series = 1. The default series = 0 specifies all components to be in parallel.

In the case of three components, with corresponding time constants τ_s, τ_q and tau_3 (tau_s, tau_q, tau_3), there are four possible types of configuration:

series = 0

all 3 components in parallel, i.e. independent flows: X = s + q + 3. In this case v_q defaults to 1 - v_s - v_3 in order to ensure that the total volume is 1.

series = 1

one component in parallel with two in series: the q component is in series with the 3 component, and the s component is in parallel: X = (q * 3) + s. In this case v_q defaults to 1.

series = 2

two components in parallel with one in series: the s and q components are in parallel and the 3 component is in series: X = 3 * (s + q). In this case v_q defaults to 1 - v_s in order to ensure that the total volume of the parallel component is 1. The total volume will be 1 if v_3 is also 1.

series = 3

all 3 components in series: X = s * q * 3. In this case v_q defaults to 1. The total volume will be 1 if v_s and v_3 are also 1.

Value

the model output as a ts object, with the same dimensions and time window as the input U. If return_components = TRUE, it will have multiple columns named Xs, Xq and, if relevant, X3.

Author(s)

Felix Andrews felix@nfrac.org

References

Jakeman, A.J., I.G. Littlewood, and P.G. Whitehead (1990), Computation of the instantaneous unit hydrograph and identifiable component flows with application to two small upland catchments, Journal of Hydrology, 117: 275-300.

See Also

expuh.sriv.fit armax

Examples

data(HydroTestData)
mod1 <- hydromad(HydroTestData, routing = "expuh",
                 tau_s = 30, tau_q = 5, v_s = 0.5)
flowcomps <- predict(mod1, return_components = TRUE)
xyplot(cbind(`Slow component` = flowcomps[,"Xs"],
             `Total flow` = flowcomps[,1] + flowcomps[,2]),
       superpose = TRUE) +
  layer(panel.refline(h = 0))

U  <- ts(c(1, rep(0, 30)))
xyplot(cbind("tau_s = 10" = expuh.sim(U, tau_s = 10),
             "& tau_q = 1" = expuh.sim(U, tau_s = 10, tau_q = 1, v_s = 0.5),
             "&& v_s = 0.9" = expuh.sim(U, tau_s = 10, tau_q = 1, v_s = 0.9)),
       superpose = TRUE)
[Package hydromad version 0.9-18 Index]