expuh {hydromad} | R Documentation |
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")) ssg.expuh(theta) normalise.expuh(theta)
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 ( |
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. |
epsilon |
values smaller than this in the output will be set to zero. |
theta |
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.
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)