2.0.0b10
catchment modelling framework
Loading...
Searching...
No Matches
Infiltration in a conceptual model

As lumped models are a quite abstract realisation of a catchment, often a simplified kinematic wave approach is used to connect storages. Kinematic waves are sufficient for many different flux connections, but can lead to problems when trying to model infiltration. One way to model the infiltration in CMF is the ConceptualInfiltration approach.

Hydrological concept

a) Light rainfall on a dry soil: Incoming surface fluxes, like rain or snow melt, infiltrate immediately and completely when the soil is dry and the flux intensity is below infiltration capacity

b) Saturation excess: when the upper soil approaches saturation, only a portion of the incoming fluxes infiltrate, the surplus remains in the surfacewater storage and might be routed somewhere else. This accounts for large cells, as in lumped or semidistributed layers, where saturation does not need to be reached everywhere to result in surface runoff.

c) Infiltration excess: when the incoming flux gets higher than the saturated conductivity of the top soil layer, only the saturated conductivity in m/day infiltrates.

Mathematical considerations

For the approach we call the sum of incoming fluxes on the surface, like rain, snow melt, irrigation and dew \(\sum I\) in \(m^3/day\), and the effective infiltration rate \(Q_{inf}\) also in \(m^3/day\). The infiltration capacity of the soil is given as saturated conductivity \(K_{sat}\) in \(m/day\). The infiltration rate is therefore limited by \(K_{sat} A\), where \(A\) is the area of the cell.

To express the approach as an equation we get:

\[ Q_{inf} = \left(1-e_{sat}\right) Q_{inf,pot} \]

where:

  • \(e_{sat}\) Saturation excess, ranging from 0 (nowhere saturated soil layer) to 1 (fully saturated).
  • \(Q_{inf,pot}= \min(\sum I, K_{sat} A)\) is the potential infiltration, given by the incoming fluxes limited by the saturated conductivity.

For light enough rain ( \(\sum I < K_{sat} A\)) on a dry soil, ( \(e_{sat}=0\)), the infiltration equals the incoming fluxes:

\[ Q_{inf} = \sum I \]

Infiltration excess

For very heavy rain or irrigation on a not well drained, but dry soil, eg. compacted, bare, sandy loam, we get:

\[ \sum I > K_{sat} A \rightarrow Q_{inf,pot} = K_{sat} A \rightarrow Q_{inf} = K_{sat}A \]

but only for the time of the event.

Saturation excess

A naive formulation for the saturation excess is a binary switch. The receiving top soil is either full, and all the potential infiltration \(Q_{inf,pot}\) stays in the surface water and is eventually routed elsewhere, or, the top soil has space and all of \(Q_{inf,pot}\) goes into the soil. As an equation:

\[ e_{sat} = 1 ,\ if\ W>=1,\ else\ 0 \]

Where \(W\) is the water filled porespace, or wetness. In conceptual models, this is expressed as stored volume per capacity \(V/C\).

This naive approach assumes a homogeneous state of saturated / unsaturated for the whole study region. This does not hold even for the patch scale with a micro relief and is certainly false for lumped models, where the topsoil layer represents the topsoil of a study area of thousands of kmĀ² and hundreds of m in height difference. To take hetereogeneity inside of the cell into account, we define \(e_{sat}\) as a continuous function of the top soil wetness \(W\). A sigmoidal function is both continuous and expresses a slow raise of surface overflow when the soil gets wetter and approaches a no infiltration limit for high soil wetness.

To gain an approach, that scales from patch to continental basins, the reaction is scaled by the parameter \(W_{1/2}\) that contains the wetness, at which half of the incoming water infiltrates, and half of the water stays back in the surface water. For the simple infiltration connection in cmf, we have chosen the Boltzmann function:

\[ e_{sat}(W_{soil}, W_{1/2}) = -\frac{1}{1+e^{-1/5 \omega}} \\ \omega = (W - W_{1/2})\cdot (1 - W_{1/2}) \]

For small scales with a sharp surface runoff response, one might choose \(W_{1/2} > 0.9\) and for large and/or steep catchments lower values, down to \(W_{1/2}\approx 0.5\). The response is shown in the figure below.

The left figure shows the relative infiltration flux \(\frac {Q_{inf}}{\sum I}\) in terms of the wetness \(V/C\) for \(W_{1/2}=0.95\) (blue) and \(W_{1/2}=0.75\)(orange). The right figure shows the development of the infiltration \(Q_{inf}\) (solid line) and the saturation excess \(\sum I - Q_{inf}\) (dashed line) over time with a constant inflow of the topsoil capacity in one day day ( \(\sum I = C/day \)) starting with a complete dry soil ( \(W=0\)). The lower right figure shows the development of the soil water volume (solid line) and the surface water volume (dashed line) if no water is lost.

Implementation in cmf

To show the implementation, we are using the code of the right figure above, with \(W_{1/2}=0.9\)

Setup up a cell

from __future__ import print_function, division
import cmf
c = p.NewCell(0,0,0,1000)
c.surfacewater_as_storage()
l=c.add_layer(1)
The study area, holding all cells, outlets and streams.
Definition project.h:53

Connect and adjust

Note: for simple infiltration the receiving node comes first, sorry.

cmf.ConceptualInfiltration(c.layers[0], c.surfacewater, W0=0.9)
# adjust the saturated conductivity in m/day.
l.soil.Ksat = 1.0 # 1000 mm/day infiltration capacity - quite a lot, but not extreme
# Set the constant rainfall to C[m3]/1 day
c.set_rainfall(l.get_capacity())

Integrate

solver = cmf.RKFIntegrator(p, 1e-9)
I = c.get_rainfall(t)
q_inf = [c.surfacewater.flux_to(l, t) / I]
inf_ex = [c.surfacewater.waterbalance(t) / I]
for t in solver.run(solver.t, solver.t + cmf.day * 2, cmf.h):
q_inf.append(c.surfacewater.flux_to(l, t) / I)
inf_ex.append(c.surfacewater.waterbalance(t) / I)

Plot

from pylab import plot
plot(q_inf, '-')
plot(inf_ex, '--')