AI-Hydro Interactive Module · Streamflow

Reading a Hydrograph

A storm. A stream. A wiggly line. Learn how to read the shape — rising limb, peak, recession — and pull baseflow apart from quickflow with a slider you control.

Scroll the intro to step through limbs · Move sliders for live baseflow & rainfall response · Click workflow nodes to jump
Follow the arrow — runoff In Module 1 you traced a water molecule ending as surface runoff. This module reads what happens next: that runoff arrives at a stream gauge and traces a shape in time — the hydrograph. When you're done here, Module 4 goes deeper: splitting that shape into baseflow vs quickflow.

The seven-step tour — click to jump

📈
Intro
🫀
Anatomy
🌊
Baseflow
⛈️
Storms
✓
Check
🐍
Python
📜
Provenance

1 · What is a hydrograph?

A hydrograph is a time-series of discharge — usually m³/s on the y-axis and hours or days on the x-axis. Scroll the panel on the right to walk through the three named regions.

time → discharge Q → Hydrograph rainfall pulse

Step 1 · Rising limb

After rain falls, the channel doesn't respond instantly — water has to reach the stream. The discharge climbs steeply: this is the rising limb. Steeper limb → flashier catchment (small, urban, saturated).

Step 2 · Peak

The flow tops out at the peak discharge — the largest instantaneous flow during the event. Lag time is the delay between the rainfall centroid and this peak. For flood design, the peak is everything.

Step 3 · Falling limb (recession)

Once rain stops, the channel drains. The falling limb, or recession, often follows a near-exponential decay set by catchment storage. Slow recession → big groundwater reservoir; fast recession → little storage.

Why this matters The shape encodes catchment memory. Flashy = small / impervious / wet. Damped = large / forested / dry. It's the entry skill for flood forecasting, recession analysis, and model calibration.

2 · Anatomy of a single storm event

A 96-hour event: a 4-hour pulse drives a gamma-shaped response. Hover for hourly values. The dashed line is a straight-line baseflow separation (event start → recession inflection).

Discharge Q(t)
Straight-line baseflow
Rising limb
Peak
Falling limb
Rainfall

Probe by dragging: at hour the discharge is —.

3 · Baseflow separation — the Lyne–Hollick filter

Real baseflow isn't a straight line. The Lyne–Hollick filter [1] runs three forward/backward passes of a one-parameter recursion:

ft = α · ft−1 + (1+α)/2 · (Qt − Qt−1)
bt = Qt − max(ft, 0)

Drag α inline: → higher values strip more quickflow, giving a smoother, lower baseflow line. BFI = baseflow volume ÷ total volume.

BFI
—
baseflow / total
Mean Q
—
m³/s
Peak Q
—
m³/s

Filtered baseflow

Drag the slider — both lines update at ~60 fps.

Total discharge
Filtered baseflow
Quickflow (shaded)
Practical default α = 0.925 with 3 passes (forward, backward, forward) is the published Lyne–Hollick default. Move the slider above to 0.99 and see baseflow approach a near-flat line.

4 · Doubling rainfall ≠ doubling peak

Two storms on the same catchment. Drag the number: drop as much rain on the right panel as the left, and the peak grows faster than linearly. That's saturated soil at work.

Small storm (10 mm)

Peak: — m³/s · Volume: — m³ · Runoff coef: —

Large storm (20 mm)

Peak: — m³/s · Volume: — m³ · Runoff coef: —
Non-linearity, observed Notice how peak ratio (right peak ÷ left peak) grows faster than the rainfall ratio above ~2× — that's the soil-moisture saturation effect. The model here uses a simple SCS curve-number-style runoff fraction: Q_runoff = P · (P − Ia)² / (P − Ia + S), scaled and convolved with a gamma unit-hydrograph kernel.

5 · Checkpoint

Answer all three questions correctly to mark this module complete.

A small headwater catchment after a brief storm shows a steep, narrow hydrograph that peaks in 2 hours and is back to baseflow within 6. What does that shape tell you?

You raise the Lyne–Hollick filter parameter from α = 0.925 to α = 0.985. What happens to the computed BFI?

If you double the rainfall on an already-wet catchment, what's the most likely outcome for the peak discharge?

6 · Pull it together with real-shape data

Pick a gauge. The cell synthesises a year of daily streamflow shaped to mimic that catchment's character (snowmelt, flashy, or baseflow-dominated), then overlays the Lyne–Hollick baseflow. The source regenerates each time you change the gauge.

AI-Hydro agent action For the real CAMELS series instead of synthesised data: in chat, ask "Fetch streamflow for gauge 14305500 from CAMELS and compute the Lyne–Hollick BFI." The agent runs fetch_streamflow_data and extract_hydrological_signatures.
python CAMELS-shape annual hydrograph + Lyne–Hollick baseflow

    

References

  1. Lyne, V. & Hollick, M. (1979). Stochastic time-variable rainfall-runoff modelling. Institute of Engineers Australia National Conference, Publ. 79/10, 89–93.
  2. Nathan, R.J. & McMahon, T.A. (1990). Evaluation of automated techniques for base flow and recession analyses. Water Resources Research, 26(7), 1465–1473. DOI: 10.1029/WR026i007p01465
  3. Eckhardt, K. (2005). How to construct recursive digital filters for baseflow separation. Hydrological Processes, 19(2), 507–515. DOI: 10.1002/hyp.5675
  4. Addor, N., Newman, A.J., Mizukami, N. & Clark, M.P. (2017). The CAMELS data set: catchment attributes and meteorology for large-sample studies. Hydrology and Earth System Sciences, 21, 5293–5313. DOI: 10.5194/hess-21-5293-2017
  5. USDA-SCS (1972). National Engineering Handbook, Section 4: Hydrology. Runoff curve-number method.
Module
reading-a-hydrograph · v0.2.0 · CC-BY-4.0
Authors
Mohammad Galib, Purdue University
Synthetic event
96-hour gamma response (shape=4, scale=6) on a 4-hour rainfall pulse, hand-tuned for instruction.
Baseflow filter
Lyne–Hollick recursive digital filter (1979); 3 passes; default α = 0.925.
Storm comparison model
SCS curve-number runoff fraction convolved with gamma UH.
Annual series
Per-gauge seeded synthesis (snowmelt / flashy / baseflow profiles); replace with fetch_streamflow_data for real CAMELS.
Environment
Python (numpy, matplotlib) via AI-Hydro preview kernel.
CC-BY-4.0