fieldmesh

Soil water models: how others do it, and what the simulator takes#

Written 2026-10-16. The soil advisory is backtested on a simulated farm (sim/physics.py), and its results turn on how that soil moves water: on 2026-10-15 the simulator's layered soil began to move water below field capacity, and several results changed (soil advisory). This note sets the simulator beside the models agriculture already uses, and lists what it lacked. Found through Semantic Scholar and the models' own documentation and source. On 2026-10-16 the simulator took what the list below asked for, and was checked against HYDRUS-1D and a real profile.

The models#

model water below field capacity root uptake evaporation from the soil code and licence
FAO-56 / pyfao56 none: one bucket from the root zone the dual crop coefficient: an evaporation layer of 0.10 to 0.15 m pyfao56, CC0
AquaCrop / AquaCrop-OSPy none: a compartment drains only above field capacity (drainage.py); capillary rise only from a water table by root zone its own evaporation layer AquaCrop-OSPy, Apache-2.0
DSSAT a tipping bucket drains each layer above its drained upper limit; capillary rise by root length in each layer and the water it holds (Ritchie 1998) Ritchie's first stage, or Suleiman and Ritchie dssat-csm-os, BSD-3-Clause
APSIM the SoilWater bucket, with an unsaturated flow term (DiffusConst, DiffusSlope); or SWIM, Richards' equation each layer's extraction rate (kl) where roots are yes ApsimX, its own general use licence
PCSE / WOFOST a bucket, in classic WOFOST from the root zone yes PCSE, EUPL-1.1
HYDRUS-1D Richards' equation, van Genuchten and Mualem Feddes' function, with root density yes freeware from PC-Progress; phydrus and its adapted Fortran, LGPL-3.0
SWAP Richards' equation Feddes', or de Jong van Lier's matric flux potential yes an unofficial mirror, GPL-2.0
fieldmesh's simulator Darcy's law between layers, van Genuchten fitted to each horizon's limits with Rosetta3's residual water, Mualem's conductivity with Rosetta3's L, their geometric mean, since 2026-10-15 FAO-56's: whole to the crop's p, then less; by root density, falling in a line to none at the roots' depth (Prasad 1988), since 2026-10-16 FAO-56's dual coefficient, from the top 0.10 m, since 2026-10-16 Apache-2.0

So the simulator's soil before 2026-10-15 was the crop models' bucket: FAO-56's, AquaCrop's, near enough DSSAT's. Since then it moves water as the Richards models do, though layer by layer and explicitly rather than by solving the equation.

What the literature says about the choices made#

Where a soil's own parameters come from#

The simulator fits each horizon's curve through three points of its own: saturation, field capacity at 33 kPa, the wilting point at 1500 kPa. Since 2026-10-16 the residual water and Mualem's L are Rosetta3's for each of its soils' texture and bulk density; before, no residual and L 0.5. Better sources for all of it:

What the simulator took, 2026-10-16#

The list this note first ended with, in order, and what each did:

  1. Checked against a reference model and a real profile. HYDRUS-1D, through phydrus in a container (an outside benchmark, not a dependency of fieldmesh), on the same soils: the simulator's water content was within 0.0002 to 0.002 of it, as root mean square error, while water spread and rose by capillarity, and 0.002 to 0.012 while a watering soaked in. The soil before 2026-10-15 was 0.012 to 0.040 out. USCRN's Crossville, Tennessee station, under grass: the simulated soil followed its probes hour by hour, correlation 0.85 to 0.96.
  2. The crop's use whole to its p, drawn by root density. On Crossville's 98 rain-free summer days, the soil before this dried at 5 cm at 0.56 of the rate the probes saw, at 10 cm 0.71, at 20 cm 1.12. FAO-56's use took 5 and 10 cm to 0.71 and 0.90; drawing by root density, 5 cm to 0.75 and 20 cm from 1.37 to 1.31. With the evaporation below as well: 0.74, 0.85 and 1.26.
  3. Evaporation, FAO-56's dual coefficient. In the simulator, and in the advisory's weather balance for a bed whose crop is named, so that a young crop's wet soil is counted. FAO-56's estimate of a canopy's cover from its basal coefficient (Eq. 76) leaves a mown lawn a third bare, and so evaporating a quarter more than FAO-56's own coefficients for turf; a lawn is taken to cover 0.95 of its ground.
  4. A pan that passes little water: a 5 cm horizon of compacted silt loam, saturated conductivity 0.5 mm an hour, as an option of the growing bed (growing_bed(pan_mm=…)).
  5. Rosetta3's residual water and L for each of the simulator's soils, in the three-point fit; not yet its whole curve.

At Crossville the simulated top 5 cm still dried at three quarters of the observed rate, and 20 cm a quarter faster: the roots' depth and shape under that grass, and the probes' own calibration, are not known. Every table in the soil advisory was run again on it, three draws of the noise each.

Sources#