expuh {hydromad}R Documentation

Exponential components transfer function models


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.


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"))




input time series.


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.


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


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.


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


whether to return all component time series.


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


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


the parameters as a named vector.


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.


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.


Felix Andrews felix@nfrac.org


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


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]