A rainfall-driven water table — high evapotranspiration
Generated by build_wt_coupled.py. Step 2 of next_steps.md, built on the same store the runoff model uses, with the signed-exchange departure agreed before building.
Generated by build_wt_coupled.py. Step 2 of next_steps.md, built on the same store the runoff model uses, with the signed-exchange departure agreed before building.
The structure
SOIL sm += rain - pet*(sm/smax); recharge = overflow
AQUIFER h += recharge/Sy - k*(h - h_base)
k*(h - h_base) is SIGNED. Positive means the aquifer is feeding surface water; negative means surface water is recharging the aquifer. The direction falls out of the state instead of being assumed, so the sum over any period is a net flux with a sign - which is what makes step 3’s closed balance possible rather than retro-fitted. A one-way leaky tank would have counted the same water twice: once as baseflow in the river, again as storage in the aquifer.
h_baseis calibrated and CONSTANT, because step 1 (rainfall to river level) does not exist yet. That makes the exchange a signed linear reservoir - the standard baseflow formulation, and a correct special case of what we want, not a different model. When step 1 lands,h_basebecomes a time series and nothing else in the file changes. The structure was built now so that substitution is one line.
Does it work?
Fitted on the first 70% of each record and scored on the last 30%, which the fit never sees. Models are reported by their VALIDATION score.
- stations fitted: 12
- validation NSE > 0.5: 10 (83%)
- median validation NSE: 0.77 (calibration 0.83)

By aquifer
| aquifer | n | median val NSE | half-life d | recharge mm/yr | net exchange m/yr |
|---|---|---|---|---|---|
| unknown | 6 | 0.71 | 127 | 502 | +1.879 |
| Chalk | 4 | 0.83 | 36 | 493 | +29.171 |
| Carboniferous Limestone | 2 | 0.77 | 41 | 484 | +52.679 |
half-life is ln2/k - how long the aquifer takes to give up half its head above base level. Read it against the registry’s T1/T2/T3 tiers: a short half-life is a conduit however much storage it appears to hold. A POSITIVE net exchange means the aquifer is a net feeder of surface water over the record, which is what an unstressed outcrop aquifer should be.
What this still is not
h_baseconstant, per the note above - step 1 replaces it- rainfall is the REGIONAL MEAN of the nine catchment series, not the nearest catchment per borehole. Assigning boreholes to catchments is step 1’s job
- PET is a calibrated seasonal sinusoid, not a Penman calculation - there is no radiation or temperature series in this project. It carries the seasonality, which is what recharge needs, and its amplitude is fitted
- no injection. Nothing in the record contains one, so nothing here is validated for it. Step 3.