Adding Two Layer Infiltration to a Subcatchment from an LID Control

Principal Investigator

     
Robert Dickinson
     

Timeline

February 2026 - April 2026


ABSTRACT

This idea started while listening to this talk at ICWMM 2026:

Enhancing Urban Water Balance Representation in EPA SWMM Using a Two-Layer Infiltration Approach

by Sherif S. Ahmed, Craig Kipkie, Tara Paradis, Lotte Veth, and Bert van Duin.

This proposal describes a minimal-impact enhancement to EPA SWMM5 that adds two-layer soil infiltration to standard subcatchments by reusing the existing LID (Low Impact Development) control’s soil layer definitions and the proven LID percolation equation from lid_proc.c.

The approach requires only two additions to the existing INP file format: a SOIL2 keyword in [LID_CONTROLS] to define a lower soil layer (using the identical 7 parameters already used by the existing SOIL keyword), and a single UseAsInfil flag in [LID_USAGE] that tells SWMM to use the LID’s SOIL + SOIL2 layers as the subcatchment’s pervious area infiltration model instead of the default [INFILTRATION] method.

No new infiltration method keyword is needed in [OPTIONS]. No new INP section format is required. Existing INP files are 100% backward compatible. The total change to existing SWMM5 source code is approximately 39 lines.

Motivation

Standard SWMM5 infiltration methods (Horton, Green-Ampt, Modified Green-Ampt, Curve Number) treat the soil column as a single homogeneous layer. This is a significant simplification for many real-world sites where distinct soil horizons have very different hydraulic properties. Common scenarios that single-layer models cannot capture include:

  • Sandy topsoil (A-horizon) overlying a clay subsoil (B-horizon) — creates perched water table conditions and delayed runoff response
  • Well-draining surface soil over a restrictive layer — produces rapid initial infiltration but early saturation from below
  • Different moisture recovery rates between soil layers during continuous simulation — affects antecedent conditions for subsequent storms
  • Deep percolation estimates needed for groundwater interaction modeling — requires tracking moisture through the full soil profile

Meanwhile, the SWMM5 LID module already contains a sophisticated soil moisture model with an exponential percolation equation that has been validated through years of use. This proposal simply makes that proven model available for general subcatchment infiltration without duplicating any code or parameters.

The Key Insight: Reuse, Don’t Rebuild

The SWMM5 LID control’s SOIL line already defines all seven properties needed for a soil layer: thickness, porosity, field capacity, wilting point, saturated hydraulic conductivity (Ksat), capillary suction head, and initial moisture deficit. The LID parser already handles input validation, unit conversion, and range checking for all these parameters.

Rather than creating a completely new infiltration method with a new 14-parameter format and hundreds of lines of new parsing code, this approach makes the minimum possible changes:

  1. SOIL2 keyword in [LID_CONTROLS] — defines the lower soil layer using the same 7 parameters and the same parser as the existing SOIL keyword
  2. UseAsInfil flag in [LID_USAGE] — when set to 1, tells SWMM to use this LID’s SOIL (upper) and SOIL2 (lower) layers for the subcatchment’s pervious area infiltration

That’s it. One new keyword, one new flag.

The comparison with a traditional “new infiltration method” approach is striking:

How It Works

INP File Setup

Define a soil profile as a LID control with both SOIL and SOIL2 layers. The LID type is BC (Bio-Retention) since it already requires a SOIL line:

Then assign it to subcatchments with UseAsInfil = 1:

When UseAsInfil = 1, Number/Area/Width can be zero — the LID is serving as a soil profile definition, not a physical BMP. Multiple subcatchments can share the same profile. Subcatchments without UseAsInfil = 1 continue using the standard [INFILTRATION] method.

The LID Percolation Equation

The heart of the two-layer model is the percolation equation already proven in SWMM5’s LID module (lid_proc.c, soilFluxRates function):

perc = Ksat × exp(−15.0 × (1.0 − θ / porosity))

This exponential function approximates the Brooks-Corey unsaturated hydraulic conductivity relationship. The exponent of 15.0 was calibrated for the LID module and provides realistic behavior across all USDA soil types:

The same equation is applied twice: once for upper → lower layer percolation, and once for lower → deep groundwater percolation. Green-Ampt infiltration handles the surface → upper layer flux.

Moisture Balance

Each layer independently tracks moisture content with these governing equations:

  • Upper layer: dθ_u / dt = (infil − perc_upper − ET_upper) / thickness_upper
  • Lower layer: dθ_l / dt = (perc_upper − perc_lower − ET_lower) / thickness_lower

Moisture is bounded between the wilting point and porosity of each layer. During dry periods, moisture drains to field capacity via continued percolation, and the Green-Ampt cumulative infiltration resets to allow infiltration capacity recovery.

Typical Soil Parameter Values

Reference values for USDA soil texture classes. These are used directly in both the SOIL and SOIL2 lines:

A typical two-layer profile pairs a more permeable upper layer (e.g., Sandy Loam topsoil) with a less permeable lower layer (e.g., Clay Loam or Clay subsoil). The contrast in Ksat values between layers controls how quickly water percolates through the full profile and whether perched saturation develops at the layer interface.

Implementation Summary

The implementation requires two new source files (lid_twolayer.h and lid_twolayer.c) and minimal changes to existing code:

  • Add a second TSoilLayer (soil2) and hasSoil2 flag to TLidProc structure (~3 lines)lid.h
  • Parse SOIL2 keyword using identical logic as SOIL (~15 lines); parse UseAsInfil in [LID_USAGE] (~12 lines)lid.c
  • Check if lidTwoLayer_isActive(j) before calling default infiltration (~5 lines)subcatch.c
  • Init and close calls for the lid_twolayer module (~4 lines)project.c

Total changes to existing source files: approximately 39 lines. All new computation logic is isolated in the two new files. The implementation reuses the existing LID soil property parsing, validation, and unit conversion — zero duplication.

Potential Applications

  • Continuous simulation models where antecedent moisture conditions significantly affect runoff response between storms
  • Sites with clay subsoil layers that create perched water tables and delayed saturated runoff
  • Groundwater interaction studies requiring separate tracking of deep percolation through layered soil
  • Calibration of infiltration parameters in areas with known soil boring data showing distinct A/B/C horizons
  • Post-development site modeling where fill material overlies native clay soils
  • Agricultural and rural subcatchments with tilled topsoil over compacted subsoil

Backward Compatibility

This enhancement is fully backward compatible with all existing SWMM5 input files:

  • The SOIL2 keyword is optional — LID controls without it work exactly as before
  • The UseAsInfil parameter is optional — if omitted from [LID_USAGE], it defaults to 0 (no override)
  • No changes to [OPTIONS], [INFILTRATION], [SUBCATCHMENTS], or any other existing INP section
  • Subcatchments with UseAsInfil = 0 (or without any LID usage) continue using the default infiltration method
  • A single model can mix standard infiltration and two-layer infiltration across different subcatchments

Status and Next Steps

The C source code (lid_twolayer.h and lid_twolayer.c), a complete example INP file, and a detailed integration guide are available. The proposed enhancement is being submitted for consideration by the SWMM5+ Technical Advisory Committee at CIMM.org.

Future enhancements under consideration:

  • Coupling deep percolation output to the SWMM5 groundwater module for recharge
  • Extending to SOIL3, SOIL4, etc. for N-layer soil profiles
  • Temperature-dependent Ksat for frozen ground modeling
  • Capillary rise from lower to upper layer during prolonged dry periods
  • Layer-specific root zone evapotranspiration


Source code, example INP file, and full integration guide available upon request.


DISCUSSIONS

There are no discussions for this research project.



RELATED PROJECTS