knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  warning = FALSE,
  message = FALSE,
  cache = FALSE,
  eval = TRUE
)

The curvenumber [@curvenumber-archive] is an R package [@Rbase] which allows to calculate two indices for the classification of hydrological responses: the Base Flow Index (BFI) and the Curve Number (CN). These indices are indicators of low and high flow responses, respectively. Techniques have been developed to calculate the indices for gauged and ungauged catchments in the United States [@Rallison1980; @Hjelmfelt1980; @Hawkins1993].

This work presents the first stable release of the curvenumber R package, which allows to calculate the CN and BFI empirically as well as from spatial data layers for catchments in the United Kingdom. The proposed method is based on previous investigations made by @Bulygina2011 but sets the scene for a more general approach that can be applied globally.

The package contains sample datasets as well as a number of examples to test the main functionalities. The functions FindQevents() and FindQevents(), for instance, are used to identify rainfall-runoff events according to @Hjelmfelt1980. The function EmpiricalCN() is used to identify the Curve Number from time series data as well as to plot the CN-P asymptotic behaviour, according to @Hawkins1993. The direct storm runoff can be calulated using the function DirectStormRunoff() and RegionalisedCN() allows to calculate the CN given soil and vegetation maps of the area. The package also allows to calculate the BFI given a soil map RegionalisedBFI() and/or a time series of river discharges EmpiricalBFI().

Work is currently ongoing to develop the curvenumber package further and use it with a probabilistic hydrological multi-model framework [@fuseGitHub; @fuseJOSS] to predict the effects of land use changes on catchment flows.

Dependencies and installation

The curvenumber package, as well as the examples in the vignette, depend on a number of CRAN packages. Check for missing dependencies and install them:

packs <- c("dplyr", "zoo", "tgp", "stats", "utils", "BH", "Rcpp", "testthat",
           "qualV", "devtools")
new.packages <- packs[!(packs %in% installed.packages()[, "Package"])]
if(length(new.packages)) install.packages(new.packages)

This package is not yet published on CRAN but can be installed from Github using devtools functionalities:

devtools::install_github("cvitolo/curvenumber")

Load the package:

library("curvenumber")

Usage

For demonstration purposes, we will use data available for the Plynlimon catchments in the United Kingdom. This data is available from the Environmental Information Platform hosted by the Centre for Ecology and Hydrology.

# LOAD ALL THE SAMPLE DATA
# Look-up table for Plynlimon sub-catchments and codes
data("PlynlimonTable")
# Load table S1 from Bulygina et al. 2011
data("S1")
# Plynlimon sub-catchments spatial polygons data frame
data("PlynlimonSUBCATCHMENTS")
# Load time series (in mm/hour) for Plynlimon subcatchments
data("SevernTS")
# SOIL MAP (HOST percentage distribution of classes)
data("PlynlimonSOIL")
# LAND COVER (VEGETATION 2013) MAP
data("PlynlimonVEG")

Calculate regionalised and empirical BFI

As Severn at Plynlimon flume is a gauged catchment, the discharge time series is avalable and can be used to calculate the empirical BFI as follows:

EmpiricalBFI(Qflow = SevernTS$Q)

Calculate the regionalised BFI for Severn at Plynlimon flume, given a map of percentage distribution of soil classes and a lookup table.

RegionalisedBFI(soil = PlynlimonSOIL, 
                catchment = PlynlimonSUBCATCHMENTS[1,], 
                lookupTable = S1)

This value is not expected to diverge from the empirical value +- the weighted standard deviation of BFI, which is calculated as follows.

StDevBFIHOST(soil = PlynlimonSOIL, 
             catchment = PlynlimonSUBCATCHMENTS[1,],
             lookupTable = S1)

Regionalised and empirical BFI are very similar, the difference is much lower than the standard deviation.

Calculate regionalised and empirical CN

As Severn at Plynlimon flume is a gauged catchment, we can use the precipitation and discharge time series to calculate the empirical CN using the code below. The code takes a while to run, and the result should be 81.

EmpiricalCN(tseries = SevernTS)

In order to calculate the regionalised CN for Severn at Plynlimon flume, we need a vegetation map, a map of percentage distribution of soil classes and a lookup table. The lookup should be generated by the user based on the vegetation classes and hydrological condition of the region of interest. For the HOST classification, the package contains a function to generate the default lookup table, which does not take into account of the particular hydrological condition of the area:

dfLookup <- MakeLoopkupTable()

In some cases the hydrological conditions are different from the default ones. For instance, according to @Bulygina2011 the Severn at Plynlimn flume catchment should have forest and pasture in good condition. The corresponding lookup table is:

dfLookup <- MakeLoopkupTable("Severn&Wye")

The regionalised CN can be calculated as follows:

RegionalisedCN(soil = PlynlimonSOIL,
               catchment = PlynlimonSUBCATCHMENTS[1,],
               lookupTable = dfLookup,
               vegetation = PlynlimonVEG)

This value is not expected to diverge from the empirical value +- 2 (standard deviation of CN), according to @Bulygina2011.

References



cvitolo/curvenumber documentation built on April 19, 2022, 3:33 a.m.