IHACRES.CWI.model {hydromad}R Documentation

IHACRES Catchment Wetness Index (CWI) model


The Catchment Wetness Index (CWI) effective rainfall model for IHACRES. This is the classic model of Jakeman and Hornberger (1993), with the extensions to ephemeral catchments of Ye et al. (1997).


	tw, f = 0, scale,
        l = 0, p = 1,
        t_ref = hydromad.getOption("cwi")$t_ref,
        s_0 = 0,
        return_state = FALSE)



a ts-like object with named columns:


time series of areal rainfall depths, usually in mm.


time series of potential evapo-transpiration, or more typically, temperature as an indicator of this. Can be omitted if f = 0.


drying rate at reference temperature (tw). This is a time constant, the number of time steps to reduce to a fraction 1/e \approx 37\%. See definition below.


temperature dependence of drying rate. See definition below. The case of f=0 describes an invariant drying rate model, in which case the input data E is not required.


mass balance term (c in the literature). If this parameter is set to NA (as it is by default) in hydromad it will be set by mass balance calculation.


moisture threshold for producing flow (in units of s). This can be used together with p for ephemeral rivers.


power on soil moisture (above the threshold l).


reference temperature in units of E (traditionally 20 deg. C). This is not a parameter; it simply transforms tw (scaling tw by exp(0.062 * t_ref * f).


starting value for soil moisture index s.


to return state variables as well as the effective rainfall.


The IHACRES model with an antecedent precipitation index was introduced by Jakeman et al. (1990), based on the Bedford-Ouse model of Whitehead et al. (1979). This slightly more physics-based version with a Catchment Wetness Index (CWI) was developed by Jakeman and Hornberger (1993). It is a metric-type model, where rainfall effectiveness is proportional to a simple antecedent moisture index, and the output is scaled to enforce mass balance.

The effective rainfall at each time step is proportional to rainfall, scaled by a soil moisture index s:

U[t] = c * s[t] * P[t]

Or, if the parameters l and p for ephemeral rivers are used (after Ye et al., 1997):

U[t] = (c * (s[t] - l))^p * P[t]

The soil moisture index s is calculated by a filter applied to the rainfall, where the drying rate is defined by a time constant tw[t]:

s[t] = (1 - 1 / tw[t]) * s[t-1] + P[t]

If f = 0 then the drying time constant is equal to the value of tw. Otherwise the drying rate varies over time according to the input data E:

tw[t] = tw * \exp(- 0.062 * f * E[t])

Note that the drying rate and effective rainfall are bounded below by 0, a step omitted in the equations above.


cwi.sim returns the modelled time series of effective rainfall, or if return_state = TRUE, a multi-variate time series with named columns U (effective rainfall), s (index of soil moisture, s) and w (the recession rate of s, i.e. (1 - 1 / tw[t]).


Felix Andrews felix@nfrac.org


Jakeman, A. J., and G. M. Hornberger (1993), How much complexity is warranted in a rainfall-runoff model?, Water Resources Research, 29: 2637-2649.

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.

Ye, W., B.C. Bates, N.R. Viney, M. Sivapalan and A.J. Jakeman (1997), Performance of conceptual rainfall-runoff models in low-yielding ephemeral catchments, Water Resources Research, 33: 153-16.

See Also

hydromad(sma = "cwi") to work with models as objects (recommended).


## view default parameter ranges:

x <- cwi.sim(Canning[1:1000,], tw = 162, f = 2, l = 300,
             t_ref = 0, scale = 0.000284, return_state = TRUE)

mod0 <- hydromad(HydroTestData, sma = "cwi", routing = "expuh")

## simulate with some arbitrary parameter values
mod1 <- update(mod0, tw = 32, f = 2, scale = 0.01, tau_s = 10)

## plot results with state variables
testQ <- predict(mod1, return_state = TRUE)
xyplot(cbind(HydroTestData[,1:2], cwi = testQ))

## show effect of increase/decrease in each parameter
parRanges <- list(tw = c(0, 100), f = c(0, 8))
parsims <- mapply(val = parRanges, nm = names(parRanges),
  FUN = function(val, nm) {
    lopar <- min(val)
    hipar <- max(val)
    names(lopar) <- names(hipar) <- nm
    fitted(runlist(decrease = update(mod1, newpars = lopar),
                   increase = update(mod1, newpars = hipar)))

xyplot.list(parsims, superpose = TRUE, layout = c(1,NA),
            main = "Simple parameter perturbation example") +
  layer(panel.lines(fitted(mod1), col = "grey", lwd = 2))
[Package hydromad version 0.9-18 Index]