The gravity screen - searching for what the old screen excluded
Generated by build_gravity_screen.py.
Generated by build_gravity_screen.py.
gravity_sites.md tested the eight existing candidates and found two with positive head. But those eight came from a screen hunting the opposite property - large volume on rising ground - so testing them was never a search. This is the search.

The gravity window is both criteria at once
A basin has to do two things, and they bracket it from opposite sides:
- fill by gravity - its top water level must sit BELOW the river’s flood level;
- drain back by gravity - its bed must sit ABOVE the river level at its outfall, because the only alternative flood route is out across the moor, and on the Levels that is not acceptable.
The outfall need not be the intake. A return channel running downstream reaches a lower river level, so the drain-back test is against the lowest channel level within reach rather than the nearest one. That relaxes the window - by how much depends entirely on the gradient, and on a flat moor the answer is ‘a little’.
river AT OUTFALL < basin bed .. basin TWL < river flood
So the whole working volume must lie inside the flood band. With a 2 m band, a 1 Mm3 basin needs at least 0.50 km2 of footprint - gravity basins are necessarily wide and shallow, which is the opposite of what the old screen rewarded and, on flat moor, exactly what the ground offers.
The guesses, recorded rather than agonised over
Every new possibility here arrives with caveats. Rather than stall, they are made explicit and carried into the output:
| assumption | value | why |
|---|---|---|
| flood band above channel bed | 2.0 m | no stage model exists. A judgement, and the single most influential number here — --flood-band varies it |
| minimum channel | 50 km2 | below this a watercourse is not worth diverting from |
| corridor | 2.5 km | how far a basin can sit and still justify a diversion channel |
| minimum depth | 0.3 m | ignore paper-thin sheets |
| resolution | 10 m (dem_fine_10m.tif) | the 1 m raster is ~1.3 billion cells and where are the wide shallow hollows is not a 1 m question. 1 m is the right tool for fixing a chosen site’s stage-volume curve, which find_reservoir_sites.py already does |
What the screen found
22% of the study box lies inside the gravity window at a 2 m flood band. That is the first result and it is not a shortlist - it is a statement about the landscape.
The Levels ARE the basin
The two largest features are 184 km2 holding 351 Mm3 and 103 km2 holding 225 Mm3. Those are not reservoir sites; they are the moors. On ground this flat the whole floodplain sits within 2 m of the river, so contiguous labelling merges it.
That is worth stopping on rather than filtering out. The screen has independently rediscovered how the Levels already work - and the Water Level Management Plans confirm it. Curry Moor is an existing flood storage moor, filled from the Tone through Knapp and New Bridge inlets and emptied by a pumping station. The gravity-diversion scheme this layer has been reasoning toward is, in outline, what the IDB already operates.
That reframes the engineering question from where do we build a basin to can existing flood storage moors be operated to recharge an aquifer as well as to attenuate floods. The capital is largely in place; what is missing is the injection plant and the operating agreement. It also inherits every constraint in those plans - summer penning levels, bird inundation requirements, and the tidal outfall.
Site-scale candidates
Setting the moors aside, 8 discrete candidates under 20 km2 hold at least 0.25 Mm3 inside the window.
| # | Mm3 | km2 | mean depth | to channel | easting | northing |
|---|---|---|---|---|---|---|
| 1 | 6.91 | 3.32 | 2.08 m | 0.24 km | 335560 | 128921 |
| 2 | 5.17 | 2.98 | 1.74 m | 0.61 km | 338264 | 127369 |
| 3 | 1.61 | 1.04 | 1.54 m | 1.84 km | 334886 | 126233 |
| 4 | 0.88 | 0.47 | 1.88 m | 1.72 km | 353364 | 138461 |
| 5 | 0.62 | 0.46 | 1.34 m | 1.62 km | 353988 | 120485 |
| 6 | 0.32 | 0.18 | 1.77 m | 2.08 km | 336297 | 124539 |
| 7 | 0.28 | 0.34 | 0.82 m | 0.04 km | 333132 | 143107 |
| 8 | 0.26 | 0.20 | 1.33 m | 1.95 km | 354919 | 119931 |
2 of them hold 1 Mm3 or more within 1 km of a channel, which is the shortlist the operating concept actually needs - the event structure wants 1-2 Mm3, not more.
Panel A is the geometry the window forces: every candidate sits on the wide-and-shallow diagonal, because that is the only shape that fits between a river’s normal and flood levels. Panel B shows the large ones are not the close ones, which is the trade a diversion channel has to pay for.
A real scheme is a mixture, and that is the point
Nothing in this layer has to be chosen exclusively. The chapters have been testing mechanisms one at a time because that is how you find out what each is worth, but the arrangement they point at combines them:
- a gravity-filled basin where terrain allows it, and a pumped one where it does not - the two are not rivals, they are the same function at different sites;
- several modest intakes on different rivers rather than one large one, sized at the ~150,000 m3/day the hydrology keeps busy (pump sizing);
- a fast mound taking the flood peak and cascading into a slow one for carry-over (synthesis);
- injection sized to clear the basin inside the ~14-day gap between events, not to some annual total.
The layer’s findings are complements, not alternatives, and the optimisation stage is where the mixture gets chosen.
What this screen does not settle
- The flood band is a guess. It is the number the whole screen turns on and there is no stage model behind it. Vary it with
--flood-bandbefore trusting any candidate. - A hollow is not a reservoir. These are contiguous areas inside a level band. Whether one can be embanked, founded, sealed against peat seepage, drained and consented is a different question entirely, and
find_reservoir_sites.pyis the tool for the ones that survive. - Contiguity is not enclosure. These are areas inside a level band, not depressions. A true basin is a hollow you can fill without it running away sideways, and testing that needs a sink-fill, which this screen does not do. It is why the moors appear as single features.
- Land use is not checked. Nothing here knows whether a candidate is a SSSI, a village, or somebody’s best field.
core/constraints.pyhas the designations and this screen does not consult them. - The flood route is asserted, not traced. The window guarantees the bed sits above the lowest reachable river level, which makes a gravity return possible. It does not route the return channel, size its outfall, check its gradient, or confirm the return does not simply re-flood the moor downstream. The relaxation the downstream outfall buys is real but it assumes a channel that has not been drawn.