7.1. The rainfall-runoff process#
Rainfall-runoff hydrology (NL: afvoerhydrologie) is the description of the movement of water from the moment precipitation \(P\) (NL: neerslag) reaches the Earth’s surface until the water flows into a lake or sea. Rainfall-runoff describes the portion (see Fig. 7.2) of the hydrological cycle that takes place on or below the Earth’s surface, focusing primarily on the inflow of water into streams and the runoff behavior (how much water at what time) in those streams.
Rainfall-runoff typically deals with runoff processes on a larger scale, such as river flows resulting from precipitation in an entire watershed (NL: stroomgebied). The behavior of runoff is determined by many factors that influence the relationship between water input (precipitation, snowmelt, artificial water input) and discharge \(Q\) (NL: afvoer) behavior. Often, the most important aspect in engineering is determining the maximum river discharge (peak discharge) resulting from a specific precipitation pattern. Over time, numerous methods and models have been developed to predict the discharge behavior over time or the maximum discharge.
The most reliable information about the magnitude of flow rates, both now and in the future, is likely to be obtained from measurements. In this case, predictions are made based on past measurement data. The system in which rainfall-runoff occurs is so complex that the use of models or theoretical approaches alone can only provide an indication of the runoff regime of a catchment (NL: stroomgebied). A combination of atmospheric conditions, geological and geomorphological conditions, soil and vegetation, and human activities is responsible for the runoff behavior. As a result, a particular rainfall event may cause significant runoff in one area, while producing little to no runoff in another seemingly similar area.
7.1.1. Types of rainfall-runoff processes#
We distinguish the following rainfall-runoff processes:
Saturation excess overland flow (NL: Verzadigde oppervlakteafvoer) or Dunne overland flow (Dunne, 1983) occurs when a saturated zone builds up above an impermeable layer or when the water table rises to the surface. This often happens in valleys or in areas where the upper layer of soil is relatively thin, such as hillsides.
Infiltration excess overland flow or Hortonian overland flow (NL: Hortonse oppervlakteafvoer) (Horton, 1945) occurs when the intensity of rainfall exceeds the infiltration capacity. This results in the formation of a thin sheet of water on the surface, causing water to be ran off over the surface.
Both types of overland flows are usually referred to as surface runoff \(Q_s\), but the mechanisms can thus be quite different.
The term rapid sub-surface flow or interflow or shallow groundwater flow is used when water infiltrates and quickly percolates through the presence of macropores, such as tree roots or animal burrows. The water then enters a temporarily saturated subsurface layer, allowing it to rapidly flow towards a watercourse. This process is faster and generates larger discharges than regular groundwater flow.
Groundwater flow \(Q_g\) or base flow \(Q_b\) (NL: Grondwaterstroming) refers to the saturated inflow of groundwater and is a slow component that contributes to the base flow of a river.
All runoff processes can occur simultaneously within a small area during the same rainfall event. Additionally, the specific process that occurs can vary from one location to another. The significant variation in the characteristics of hydrological processes makes their description a complex matter, and models can only approximate the true situation.
7.1.2. Rainfall excess#
The term “rainfall excess” or “direct runoff” refers to the portion of precipitation that ultimately leads to larger river discharges as a result of a rainfall event. The following processes contribute to a portion of the precipitation not or only much later contributing to runoff, resulting in a loss term in relation to the discharge:
Interception \(E_i\) (NL: interceptie): refers to the amount of water that does not reach the drainage system because it is captured by vegetation and the land surface, where it directly evaporates.
Storage \(S\) (NL: Berging): in depressions such as lakes, swamps, and also on a smaller scale, such as hollows, a significant amount of water can be temporarily stored.
Infiltration \(I\) (NL: infiltratie): typically represents the largest component in the rainfall-runoff balance. It can make a significant difference in the runoff behavior whether the catchment has a high infiltration capacity or whether the area routes all the water over the surface.
7.1.3. River discharge components and determining factors#
River discharges consist of the components of surface, sub-surface and groundwater flow components. In practice, it is difficult to make a clear distinction between these components. The contributions of the components depend on the precipitation pattern and the characteristics of the catchment. In a steep catchment with low infiltration capacity, surface runoff makes a significant contribution to the river discharge after prolonged rainfall. In flat areas with high infiltration capacity, even moderate rainfall intensities do not result in surface runoff. This is the case in most parts of the Netherlands. However, runoff discharge may still increase rapidly due to accelerated groundwater runoff. Particularly, in intensively drained areas, groundwater flows relatively quickly. During periods without rainfall, fast runoff processes are absent, but there can still be slow groundwater flow known as base flow.
Show code cell content
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from myst_nb import glue
import warnings
warnings.filterwarnings("ignore")
plt.rcParams.update({'font.size': 12, 'lines.linewidth': 2})
#get data for Meuse
data_m = pd.read_csv('../datasets/20230815_017.csv', delimiter=';',
usecols=['MEETPUNT_IDENTIFICATIE','WAARNEMINGDATUM',
'WAARNEMINGTIJD (MET/CET)', 'NUMERIEKEWAARDE'], decimal=',')
grouped_m = data_m.groupby(data_m.MEETPUNT_IDENTIFICATIE)
locations_m = data_m['MEETPUNT_IDENTIFICATIE'].unique()
df_meuse = grouped_m.get_group(locations_m[1])
# Modify the line below to handle the date format without space
df_meuse['datetime'] = pd.to_datetime(df_meuse['WAARNEMINGDATUM'] + ' ' + df_meuse['WAARNEMINGTIJD (MET/CET)'], format='%d-%m-%Y %H:%M:%S')
df_meuse['NUMERIEKEWAARDE'] = pd.to_numeric(df_meuse['NUMERIEKEWAARDE'], errors='coerce') # Convert to numeric
df_meuse.set_index('datetime', inplace=True)
daily_avg_meuse = df_meuse.groupby(df_meuse.index.dayofyear)['NUMERIEKEWAARDE'].mean() #take mean value per day of the year
ma_daily_meuse = daily_avg_meuse.rolling(30).mean() #take moving average of 30 days
#get data for Rhine
data_r = pd.read_csv('../datasets/20230815_032.csv', delimiter=';',
usecols=['MEETPUNT_IDENTIFICATIE','WAARNEMINGDATUM',
'WAARNEMINGTIJD (MET/CET)', 'ALFANUMERIEKEWAARDE'])
grouped_r = data_r.groupby(data_r.MEETPUNT_IDENTIFICATIE)
locations_r = data_r['MEETPUNT_IDENTIFICATIE'].unique()
df_rhine = grouped_r.get_group(locations_r[1])
df_rhine['ALFANUMERIEKEWAARDE'] = pd.to_numeric(df_rhine['ALFANUMERIEKEWAARDE'], errors='coerce')
df_rhine = df_rhine[df_rhine['ALFANUMERIEKEWAARDE'] < 1e6] #remove outliers
df_rhine = df_rhine.groupby(df_rhine.WAARNEMINGDATUM)['ALFANUMERIEKEWAARDE'].mean().reset_index()
# df_rhine['datetime'] = pd.to_datetime(df_rhine['WAARNEMINGDATUM']) # Convert to numeric
df_rhine['datetime'] = pd.to_datetime(df_rhine['WAARNEMINGDATUM'].astype(str), dayfirst=True)
df_rhine.set_index('datetime', inplace=True)
df_rhine = df_rhine.sort_values(by='datetime')
df_rhine_day = df_rhine['ALFANUMERIEKEWAARDE'].resample('D').mean()
daily_avg_rhine = df_rhine_day.groupby(df_rhine_day.index.dayofyear).mean() #take mean value per day of the year
ma_daily_rhine = daily_avg_rhine.rolling(30).mean() #take moving average of 30 days
# create plots
fig, ax = plt.subplots()
ma_daily_rhine.plot(ax=ax, color='b', label='Mean Rhine Discharge')
ax.set_xlabel("Month")
ax.set_ylabel("Rhine Discharge Q [m$^3$/s]")
ax.set_ylim(0, 5000)
ax2=ax.twinx()
# make a plot with different y-axis using second axis object
ma_daily_meuse.plot(ax=ax2, color='r', label='Mean Meuse Discharge')
ax2.set_ylabel('Meuse Discharge Q [m$^3$/s]')
ax2.set_ylim(0, 500)
fig.legend(loc="upper right", bbox_to_anchor=(1,1), bbox_transform=ax.transAxes)
#set xlabels to months
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
ax.set_xticks(range(30, 365, 30)) # Asssuming the index contains appropriate month values
ax.set_xticklabels(months)
ax.set_title('Mean Discharge in Rhine and Meuse river')
ax.grid()
# Rotate the labels for better visibility
plt.xticks(rotation=45)
glue("rhinemeuseriver", fig, display=False)
plt.savefig('../images/rhinemeuseriver')
plt.close();
Fig. 7.3 shows the variation in average discharge for the Rhine (NL: Rijn) and the Meuse (NL: Maas) rivers. The plot is based on data obtained from Rijkswaterstaat. Discharge data could be downloaded for different periods and gauge stations in the Netherlands. With the provided code, the mean discharge can be calculated in Python.
The Meuse exhibits much greater variation in discharge throughout the year compared to the Rhine. This is because the Meuse is a rain-fed river, while the Rhine is considered a mixed river. The origin of the Rhine lies in a glaciated area where precipitation (snow) is temporarily stored and slowly released as runoff in spring.
In hydrology, the following types of rivers are distinguished:
Perennial (NL: Permanente) rivers: rivers that flow throughout the year (e.g., the Rhine and the Meuse).
Intermittent (NL: Droogvallende) rivers: rivers that only flow during the wet season (many smaller streams in the Netherlands).
Ephemeral rivers (NL: Wadi’s): rivers that only flow after heavy rainfall. The groundwater table is always lower than the riverbed in such rivers.
Discharge can be seen as the output of a system, the catchment or watershed, with climate as its input. The catchment can be described based on the characteristics of its surface:
Topography (slopes, watershed, size)
Vegetation
Land management and land use
Impervious surfaces
The subsurface, which is determined by the geological structure
Therefore, modeling a catchment starts with collecting accurate map materials, including:
Topographic maps
Land use maps
Demographic maps (urban areas)
Geological maps
Soil maps
Remote sensing imagery can also be used in this context. Recent changes in an area can be quickly detected and processed using such imagery. In addition to map materials, field observations are always necessary as they often provide essential information. The infiltration capacity of an area often proves to be of great importance for the behavior of river discharges. For example, if human activities (such as increasing the size of impervious surfaces) reduce the infiltration capacity, it can result in a significant increase in river discharge and an earlier occurrence of peak flows.
7.1.4. Annual rainfall runoff#
When an annual balance is created for the rainfall-runoff process, it can be assumed that storage is negligible (remember from Budyko in Section 5.3.1). In this case, the precipitation \(P\) is divided into evaporation \(E\), surface runoff \(Q_s\), and groundwater runoff \(Q_g\) (Fig. 7.4). If groundwater emerges completely within the catchment (exfiltration), the groundwater term is eliminated, and the precipitation is equal to evaporation and surface runoff (Fig. 7.5). However, if there is groundwater inflow \(Q_{gi}\) beneath the topographic watershed, it must be included as an incoming term in the balance (Fig. 7.6).
7.1.4.1. Relationship between rainfall and runoff#
When considering the rainfall-runoff relationship on an annual basis, it is necessary to determine the start and end points of the year. Generally, the division is not based on the calendar year but rather on the point where the average streamflows are the smallest. This is because the differences in storage between the beginning and end of such a year are also the smallest. Such a chosen year is referred to as a hydrological river year, and in the Dutch climate, a river year starts on October 1st or November 1st (note that this differs from the hydrological year of groundwater which starts on April 1st). A relationship between rainfall and runoff on an annual basis can be obtained if a series of years’ worth of rainfall and runoff data is available. However, often this data is incomplete, usually lacking the runoff data. In such cases, established relationships for nearby catchments or for upstream or downstream gauging stations can be used, but caution must be exercised. Underground inflow and/or outflow can vary significantly between areas and thus lead to different relationships.
7.1.5. The baseflow#
The baseflow is the flow that is largely independent of rainfall events. At the end of dry periods, minimum flows occur, which are solely caused by the baseflow (also known as recession flow or dry-weather flow). The flow is then sustained by the depletion of one or more storage forms. The water can be stored in the following ways:
Groundwater
Surface waters:
a) Natural: lakes, wetlands, and the rivers themselves
b) Artificial: reservoirs closed off by dams
Snow accumulation
The mechanism of baseflow operates as follows: as the flow decreases, the stored quantities decrease. For storage forms 1 and 2a, there is a natural relationship between the flow \(Q\) and the stored quantity \(S\) at a given moment. The smaller the stored quantity, the lower the flow \(Q\). These storage forms can be seen as reservoirs that gradually deplete, and there is a fixed relationship between \(Q\) and \(S\), for example:
Here, \(k\) is the reservoir coefficient, and its significance for rivers is discussed in the following paragraphs. For groundwater reservoirs, it is often the case that \(n\) = 1, meaning the groundwater storage functions as a linear reservoir, and \(k\) [T] represents the average residence time of the water.
For storage form 2b, the relationship between the stored quantity \(S\) and the flow \(Q\) is mainly governed by the operation of gates and weirs. In the case of storage form 3, the flow \(Q\) is strongly influenced by weather conditions (solar radiation and temperature) in addition to the remaining snowpack. In the following discussion, we will focus exclusively on the depletion of groundwater reserves.
7.1.5.1. Depletion of the groundwater reservoir#
The flow pattern resulting from the depletion of the groundwater reserve is most pronounced in climates where there is an annual rainy season that lasts only a few months. The characteristic flow pattern for such climates is shown in Fig. 7.7.
The decrease in flow during the dry season can occur at different rates, as illustrated in Fig. 7.8
It is evident that the flow curve with a rapid depletion represents a highly responsive catchment. The rate of the flow decrease and the extent of groundwater depletion, reflected in the decline of groundwater levels, are determined by the following factors:
Catchment characteristics:
The nature of the drainage network or system of open water bodies (drainage density), determined by the density, distances \(L\), and depth of rivers, streams, ditches, or drains.
The permeability or transmissivity \(K_D\) of the subsurface (see Section 6.1.2.1).
The storage coefficient \(\mu\), which is equal to the porosity \(p\) minus the moisture content at field capacity (specific retention) (see Section 6.3.7).
Evaporation: This primarily applies to shallow groundwater levels because, in addition to runoff, water is also extracted from the groundwater through capillary rise and evaporation of soil moisture. It can also be applied to catchments that have trees capable of tapping into the groundwater.
7.1.5.2. Depletion patterns in reality#
Despite the significant variation in watercourses and geohydrological conditions in catchment areas, measurements have shown that the depletion pattern of natural watercourses can often be approximated by the relationship:
where \(Q(t)\) represents the discharge at a time \(t\) after the occurrence of discharge \(Q_0\). The time at which the discharge \(Q_0\) occurs can be arbitrarily chosen within the depletion pattern.
Fig. 7.9 illustrates the meaning of the reservoir coefficient \(k\) (also refer to Fig. 7.8). Thus, \(k\) represents a timescale for depleting a reservoir.
# Note that the code cells below is used for the website only.
Use the fact that the groundwater storage functions as a linear reservoir to derive Eq. (7.2).
Answer Exercise 7.1
Step 1
Step 2
Step 3
Step 4
Step 5
First, find \(\lambda\) by entering the trial solution into Eq. (7.5):
Then we find \(A\) by entering \(t=0\) into Eq. (7.6):
Step 6
7.1.5.3. Example: Depletion curve#
Using discharge data from the Rhine river at Lobith we can fit the reservoir coefficient \(k\). In the example below we do this for two moments in the three year time period of this data set. Depending on the choice of \(Q_0\) and time period for the fit we can obtain different values for \(k\).
Show code cell content
# plot the data
df_rhine['Discharge'].plot()
plt.ylim(0,6000)
plt.ylabel(r'Discharge Q [m$^3$/s]')
plt.xlabel('Date')
plt.title('Discharge of the Rhine river at Lobith')
plt.grid();
Show code cell content
# determine reservoir coefficient k
def Qt(t, Q0, k):
return Q0*np.exp(-t/k)
data_fit1 = df_rhine.iloc[50:120,0]
Q01 = data_fit1[0]
t1 = np.arange(0, len(data_fit1), 1)
k1 = curve_fit(Qt, t1, data_fit1, bounds=((Q01-0.0001, -np.inf),(Q01+0.0001, np.inf)))[0][1]
print(fr'Value for reservoir coefficient k: {k1:.0f} day')
data_fit2 = df_rhine.iloc[500:700,0]
Q02 = data_fit2[0]
t2 = np.arange(0, len(data_fit2), 1)
k2 = curve_fit(Qt, t2, data_fit2, bounds=((Q02-0.0001, -np.inf),(Q02+0.0001, np.inf)))[0][1]
print(fr'Value for reservoir coefficient k: {k2:.0f} day')
Value for reservoir coefficient k: 49 day
Value for reservoir coefficient k: 145 day
Show code cell content
# check the fit of the depletion curve
dates1 = df_rhine.index[50:120]
dates2 = df_rhine.index[500:700]
fig = plt.figure()
df_rhine['Discharge'].plot()
plt.plot(dates1, Qt(t1,Q01,k1))
plt.plot(dates2, Qt(t2,Q02,k2))
plt.ylim(0,6000)
plt.ylabel(r'Discharge Q [m$^3$/s]')
plt.xlabel('Date')
plt.title('Discharge of the Rhine river at Lobith')
plt.grid();
7.1.6. Runoff from Precipitation#
7.1.6.1. “Losses”#
As mentioned earlier, several loss processes can be identified regarding the runoff from precipitation (or: effective precipitation). Strictly speaking, there is no actual loss in the hydrological cycle since water is never truly lost. However, the term “loss” is often used when referring to specific mechanisms, such as river discharge. These “losses” represent the difference between the actual precipitation \(P\) and the runoff from effective precipitation \(P_a\), and they consist of:
Evaporation \(E_i\);
Surface storage increase in the catchment \(\displaystyle \frac{\mathrm{d}S_s}{\mathrm{d}t}\) or ponding;
Infiltration \(I\)
Note
When we are looking at short timescales, infiltation is a loss. For longer timescales, however, infiltration is only a loss if it is evaporated by transpiration or soil evaporation, but it is not a loss if it recharges the groundwater and contributes to baseflow.
The effective precipitation is expressed as \(P_a\) and can be calculated using the following equation:
The variation of the so-called “losses” (which actually represent interception, infiltration, and ponding) can be represented by the amount of effective precipitation \(P_a\) as a function of the amount of precipitation \(P\) (Fig. 7.10).
The behavior of the individual loss components strongly depends on the intensity and duration of a rainfall event and the characteristics of the catchment. Fig. 7.10 shows that the proportion of “losses” decreases as the amount of precipitation increases. This is logical considering that the water retention capacity of an area decreases as more water is already retained.
7.1.6.2. Calculations with “Losses”#
Quantitatively determining the amount of effective precipitation involves a high degree of uncertainty in hydrology: there are many influencing factors, which are difficult to quantify, and collecting all the necessary data is practically impossible. Sometimes, it is possible to reasonably estimate the total magnitude of the “losses,” but determining their distribution over the duration of a rainfall event remains challenging. There are several concepts to account for the “losses.”
Each graph in Fig. 7.11 represents a different concept:
A: In this case, the loss is a constant fraction of the rainfall intensity, for example 1/3 part.
B: This concept assumes a constant loss intensity, where only the rainfall above this intensity contributes to runoff.
C: This graph is similar to B, but there is a specific loss capacity that must be satisfied before runoff occurs.
D: Here, an infiltration function is used to represent the variation of loss intensity over time. Only the rainfall above this curve contributes to runoff. An infiltration function like this can be determined, for example, using the Horton equation (equation …).
Of course, combinations of the above functions are also possible, such as \(A\) and \(C\).
Note
Initially, it was stated that the loss intensity decreases over time, which only function \(D\) would comply with. However, during intermediate periods with lower rainfall intensities, some recovery of the potential loss intensity may occur. Therefore, the remaining concepts can still have practical utility.
7.1.6.3. Antecedent wetness of a catchment#
In addition to the amount and duration of rainfall and the topographic and geographic characteristics of an area, the prior weather conditions are of great importance in determining the amount of precipitation that can result in fast runoff. This factor can cause significant variations in runoff patterns under similar rainfall conditions. The prior weather conditions are reflected in the moisture condition of an area.
If it has been raining continuously for a long period, the soil will be more or less saturated and unable to absorb much water; the soil pores are nearly filled. As a result, the rainfall will runoff relatively quickly, leading to high discharge peaks.
On the other hand, a heavy downpour following a prolonged dry period will have little effect, in case the infiltration capacity is high and the area is fairly flat.
Are the following statements true or false?