Pick a scenario; every slider below stays editable. Time runs from 1 March; the river flows left to right.
Pollution enters from the outfall pipe on reach 2 and thins out downstream. The concrete bank cuts reach 4 capacity to 10 % and halves the dispersal success across it.
The science
Two stages. In every reach i juveniles J mature into adults A at rate m (1/60 per day: voles breed from about two months old). Adults breed at b young per adult per day in the breeding season (default 0.09 = half the adults are females, ~5 young per litter, one litter per ~28 days) multiplied by the crowding factor (1 - N/K). dJ/dt = b A (1 - N/K) - m J - (μJ + extra) J - emigration, dA/dt = m J - (μA + extra) A. It is integrated with an explicit 0.25-day step.
Capacity. K = rho * L * v: rho = 0.10 animals per metre of bank at full vegetation cover, L = 200 m of bank per reach, v = vegetation cover (0.2 to 1). Real water vole density varies a lot with bank quality; 0.10 per metre is an illustrative value in the usual order of magnitude, not a survey.
Mink. Predation adds 0.012 * M * (1 - 0.6 v) per adult per day (juveniles 1.5 times that) where M is a relative pressure (1 is a typical mink-occupied bank). Dense bank vegetation hides burrows and removes up to 60 % of the risk. Mink never appear to catch anything on screen: the effect is a rate. The threshold pressure M* (annual-average birth rate) is where the low-density growth rate r reaches zero. The growth rate is the positive root of (r + m + μJ)(r + μA) = b m (Euler-Lotka for the two-stage model), and the annual average birth rate is b * (breeding months / 12). With seasonal breeding the true threshold is lower (births are bunched, so juveniles spend longer exposed): the sweep finds it by simulation and shows both.
Floods. Burrow entrances sit 0.2 to 1.2 m above normal water, uniformly. When the river rises to stage h the fraction of flooded burrows is f = clamp((h - 0.2)/1.0, 0, 1) and every animal pays an extra mortality 0.25 f per day for the length of the flood (5 days). Survival of a flood in a closed adult group is then exp(-(μA + 0.25 f) * 5).
Pollution and corridors. The outfall concentration c = P exp(-x/1.5 reaches) adds mortality 0.01 c and removes up to half of the fertility at c = 1. Juveniles emigrate at 0.02 * min(1.5, N/K) per day, split between up- and downstream neighbours; a fraction 1 - conn dies in transit (roads, culverts, mink).
Honest simplifications. Deterministic, continuous numbers (no demographic noise, so a tiny population never goes exactly extinct); no sex ratio, no territory behaviour or infanticide, no winter weight loss; the age-structure, litter size, mortality rates and the 0.25/day flood hazard are typical or illustrative values, not measurements of one population; an annual-average growth rate only approximates a seasonal one (the sweep shows the gap); voles are drawn about three times life size so they are visible. Only the density-independent structure (growth rate, equilibrium, flood survival) is checked analytically.