Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Soil Texture Catalog

USDA soil texture classification. LocalSky uses field capacity (FC), wilting point (WP), available water (AW = FC - WP), and infiltration rate per texture + slope. Source: src/engine/soil_catalog.rs.

Pick texture per zone in the zone editor. If unsure, use the USDA texture triangle: rub moist soil between your fingers and match to the closest class.

Catalog

Values per FAO-56 Table 19 + USDA NRCS Part 652 Table 11-3.

TextureFC (m³/m³)WP (m³/m³)AW (mm/m)Infil flat (mm/hr)Infil 3-5% (mm/hr)Infil >5% (mm/hr)
Sand0.090.0360503525
Loamy sand0.140.0680352518
Sandy loam0.230.10130251812
Loam0.340.1222013107
Silt loam0.320.151701085
Clay loam0.390.20190864
Clay0.420.25170543

How the values map into the engine

Total Available Water (TAW)

TAW_mm = (FC - WP) * root_depth_mm

This is the depth of water the zone can hold between field capacity (fully wet, no gravity drainage) and the wilting point (so dry the plant gives up). St. Augustine on sandy loam at the default 150 mm root depth: TAW = (0.23 - 0.10) * 150 = 19.5 mm. Same species on loam at the same depth: TAW = (0.34 - 0.12) * 150 = 33 mm, more than 1.6x the buffer.

Readily Available Water (RAW)

RAW_mm = TAW_mm * MAD_pct

MAD (Management Allowed Depletion) comes from the species catalog. RAW is the depletion threshold beyond which the plant starts to stress. LocalSky’s irrigation trigger is depletion >= RAW.

St. Augustine on sandy loam with default 50% MAD: RAW = 19.5 * 0.50 = 9.75 mm. The engine triggers irrigation when the bucket dips below ~10 mm of depletion.

Infiltration rate

Determines whether cycle-and-soak is needed. The three slope bands per row reflect that water runs off faster on a hillside than on a level patch. The cycle-and-soak splitter divides total runtime when the sprinkler’s precipitation rate exceeds infiltration.

Example: spray head (15 mm/hr precip) on clay flat (5 mm/hr infiltration). Each minute of runtime delivers 15/60 = 0.25 mm but the soil can only absorb 5/60 = 0.083 mm. Cycling 1 minute on, 4 minutes “soak” wouldn’t actually work because evaporation losses kick in. LocalSky’s default minimum cycle is 3 minutes; soak gap is 30 minutes; the splitter computes the maximum continuous on-time at ~(infiltration/precip) * 60 minutes.

Picking the right texture for your zone

Without a soil test, two practical methods:

Ribbon test

  1. Take a handful of moist (not wet) soil. Squeeze into a ball.
  2. Squeeze the ball through your thumb and forefinger to form a ribbon.
  3. Categorize:
    • No ribbon, falls apart: sand or loamy sand
    • Weak ribbon (<2.5 cm before breaking): sandy loam or loam
    • Medium ribbon (2.5-5 cm): clay loam or silt loam
    • Strong ribbon (>5 cm): clay

Jar test

  1. Half-fill a quart jar with soil from the zone’s root depth.
  2. Fill the rest with water + a teaspoon of dish soap.
  3. Shake hard. Set aside.
  4. After 1 minute, mark the sand layer (settles first).
  5. After 2 hours, mark the silt layer.
  6. After 24-48 hours, mark the clay layer (or what hasn’t settled yet).
  7. Use the USDA triangle to classify based on relative thicknesses.

When in doubt

If you genuinely don’t know, sandy loam is the safest “Florida default” guess. It’s the median Florida turf soil and the engine’s math is most forgiving when off by one texture class in either direction (loamy sand or loam).

Contributing a texture

The catalog is a fixed enumeration (USDA’s classification is the standard; “soil 1” and “soil 2” aren’t textures). New entries are not expected. If you need finer-grained soil characterization, override per zone via direct FC/WP/AW values in a future iteration’s ZoneConfig.soil_overrides block.

Further reading