Catchment hydrology — rainfall to river discharge
A 120 km² upland catchment routed from rain gauge to gauging station: interception and evapotranspiration, the infiltration threshold that decides between overland flow and throughflow, percolation to an unconfined aquifer, and the baseflow that keeps the river running — with P = Q + E + ΔS closing at 1400 = 950 + 450.
Rendering…
Make it your own.
{
"nodes": [
{ "id": "rainfall", "type": "rain-cloud", "label": "Rain P — 1400 mm yr⁻¹: out(P) = 1400 mm/yr", "x": 40, "y": 40, "width": 150, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9", "bold": true },
{ "id": "evapotranspiration", "type": "sun", "label": "Vapour E — 450 mm yr⁻¹: in(E) = 450 mm/yr", "x": 40, "y": 200, "width": 150, "height": 104, "fill": "#fce7f3", "stroke": "#be185d", "bold": true },
{ "id": "balance", "type": "clipboard", "label": "P = Q + E + ΔS: net(total) = 0 mm/yr", "x": 40, "y": 360, "width": 150, "height": 104, "fill": "#f1f5f9", "stroke": "#475569", "bold": true },
{ "id": "interception", "type": "pine-tree", "label": "Canopy store S_i = 1 mm; 15% evaporates", "x": 215, "y": 40, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "infiltration", "type": "funnel", "label": "Infiltration capacity — 12 mm h⁻¹", "x": 215, "y": 200, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309", "bold": true },
{ "id": "percolation", "type": "chevron", "label": "Percolation past the root zone", "x": 215, "y": 360, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
{ "id": "surface", "type": "water-drop", "label": "Puddles S_s = 5 mm depression storage", "x": 390, "y": 40, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "soilwater", "type": "layers", "label": "Soil water S_m = 150 mm at field capacity", "x": 390, "y": 200, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
{ "id": "aquifer", "type": "cylinder", "label": "Aquifer S_g = 3000 mm of stored water", "x": 390, "y": 360, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
{ "id": "overland", "type": "arrow-right", "label": "Overland flow — minutes to hours", "x": 565, "y": 40, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309", "bold": true },
{ "id": "throughflow", "type": "arrow-right", "label": "Throughflow — hours to days", "x": 565, "y": 200, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
{ "id": "baseflow", "type": "arrow-right", "label": "Baseflow — weeks to years", "x": 565, "y": 360, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309", "bold": true },
{ "id": "channel", "type": "ocean-wave", "label": "Channel S_c = 10 mm; 3.6 m³ s⁻¹ mean flow", "x": 740, "y": 40, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8", "bold": true },
{ "id": "gauging", "type": "gauge-chart", "label": "Weir Q: in(Q) = 950 mm/yr leaves the basin", "x": 740, "y": 200, "width": 150, "height": 104, "fill": "#ccfbf1", "stroke": "#0f766e" },
{ "id": "coefficient", "type": "pie-chart", "label": "Runoff coefficient Q/P = 0.68", "x": 740, "y": 360, "width": 150, "height": 104, "fill": "#ccfbf1", "stroke": "#0f766e", "bold": true },
{ "id": "hydrograph", "type": "line-chart", "label": "Storm hydrograph — lag time 6 h", "x": 915, "y": 40, "width": 150, "height": 104, "fill": "#ccfbf1", "stroke": "#0f766e", "bold": true },
{ "id": "peak", "type": "bar-chart", "label": "Peak 42 m³ s⁻¹, 2-year return period", "x": 915, "y": 200, "width": 150, "height": 104, "fill": "#ccfbf1", "stroke": "#0f766e" },
{ "id": "urbanisation", "type": "bridge", "label": "Sealed surfaces raise the peak, cut the lag", "x": 915, "y": 360, "width": 150, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c", "bold": true }
],
"edges": [
{ "id": "e1", "source": "rainfall", "target": "interception", "label": "I_c = 210 mm/yr caught by the canopy", "thickness": 2.5 },
{ "id": "e2", "source": "interception", "target": "evapotranspiration", "label": "E_i = 210 mm/yr — wet-canopy loss" },
{ "id": "e3", "source": "rainfall", "target": "soilwater", "label": "F = 1000 mm/yr infiltrates", "thickness": 2.5 },
{ "id": "e4", "source": "rainfall", "target": "surface", "label": "R_x = 190 mm/yr — excess over 12 mm/h" },
{ "id": "e5", "source": "infiltration", "target": "soilwater", "label": "while intensity < 12 mm h⁻¹", "style": "dashed" },
{ "id": "e6", "source": "surface", "target": "overland", "label": "once the surface store fills", "thickness": 2.5 },
{ "id": "e7", "source": "overland", "target": "channel", "thickness": 2.5 },
{ "id": "e8", "source": "surface", "target": "channel", "label": "Q_o = 190 mm/yr — overland flow" },
{ "id": "e9", "source": "soilwater", "target": "throughflow" },
{ "id": "e10", "source": "throughflow", "target": "channel", "thickness": 2.5 },
{ "id": "e11", "source": "soilwater", "target": "channel", "label": "Q_t = 360 mm/yr — throughflow" },
{ "id": "e12", "source": "soilwater", "target": "evapotranspiration", "label": "T = 240 mm/yr — transpiration" },
{ "id": "e13", "source": "soilwater", "target": "percolation" },
{ "id": "e14", "source": "percolation", "target": "aquifer", "thickness": 2.5 },
{ "id": "e15", "source": "soilwater", "target": "aquifer", "label": "G = 400 mm/yr — percolation" },
{ "id": "e16", "source": "aquifer", "target": "baseflow", "thickness": 2.5 },
{ "id": "e17", "source": "baseflow", "target": "channel", "label": "keeps the river running in drought", "thickness": 2.5 },
{ "id": "e18", "source": "aquifer", "target": "channel", "label": "Q_b = 400 mm/yr — baseflow" },
{ "id": "e19", "source": "channel", "target": "gauging", "label": "Q = 950 mm/yr past the weir", "thickness": 2.5 },
{ "id": "e20", "source": "gauging", "target": "hydrograph", "thickness": 2.5 },
{ "id": "e21", "source": "hydrograph", "target": "peak" },
{ "id": "e22", "source": "balance", "target": "rainfall", "label": "1400 = 950 + 450 + 0", "style": "dashed" },
{ "id": "e23", "source": "coefficient", "target": "channel", "label": "two-thirds of the rain reaches it", "style": "dashed" },
{ "id": "e24", "source": "urbanisation", "target": "overland", "label": "more of it, sooner", "style": "dashed" },
{ "id": "e25", "source": "urbanisation", "target": "hydrograph", "label": "a flashier response", "style": "dashed" },
{ "id": "e26", "source": "evapotranspiration", "target": "rainfall", "label": "recycled through the atmosphere", "thickness": 2.5 }
]
}