This is the 2D counterpart to the 3D beaver-dam scene, solving the identical water-balance ODE system but rendering it as a stream cross-section (elevation view) plus a live hydrograph strip chart instead of an orbiting 3D pond, so the same equations read the way a hydrologist actually plots them:
dh/dt = (Q_in − Q_out − Q_seep) / A
Q_weir = Cw·L·(h − h_dam)^1.5 (h > h_dam)
Q_leak = k·h (porous dam body)
Q_seep = K·h
dWT/dt = ΣQ_seep − k_drain·WT
Q_downstream = Q_out(last dam) + k_drain·WT
The upper pane is a longitudinal profile: three ponds sit immediately upstream of their dam, each filled to its own solved depth h; a translucent band beneath the streambed rises and falls with the aggregate water-table reservoir, and flow markers drift downstream at a speed set by the locally solved discharge. The lower pane is a real-time hydrograph — inflow and downstream discharge plotted against time — the standard way flood attenuation is actually read off in hydrology, and a genuinely distinct representation from the 3D scene's instanced particle flow.
- Dam crest height — taller dams hold back more water before spilling, raising storage capacity.
- Beaver dams present — toggled off, inflow passes straight through with no ponding or seepage, so you can compare the hydrograph with and without the cascade.
- Soil permeability — controls how fast pond water recharges the surrounding water table (the process that turns a stream reach into a wetland).
- Trigger storm event — injects a flood pulse upstream; the peak-attenuation readout compares the pulse's peak inflow against the peak it produces downstream, visible directly as the gap between the two hydrograph curves.
Real-world relevance: this is the mechanism behind "beaver dam analogue" restoration — a cascade of small dams slows and stores floodwater, elevates the local water table, and sustains stream baseflow through dry spells, which is exactly how beaver activity converts a simple channel into a wetland.