WEPP Soil Files Package
WEPP soil input file format specification, manipulation utilities, and pre-built soil library
See also: AGENTS.md for coding conventions and wepppy.soils for SSURGO data acquisition.
User documentation: Soil Input File Specification (line-by-line file format reference) and Soil File Parameters (parameter dictionary with extended descriptions).
Overview
The wepppy.wepp.soils package provides tools and data for working with WEPP soil input files (.sol). This package handles the model integration side of soils - parsing WEPP file formats, transforming parameters, version migration, and providing pre-built reference soils. For data acquisition from SSURGO/STATSGO2 databases, see the wepppy.soils package.
Key Capabilities:
- Parse and generate WEPP soil files across 8 format versions (97.5 - 9005)
- Transform soil parameters for disturbance scenarios (wildfire, logging, land use change)
- Migrate between WEPP file format versions with parameter estimation
- Access pre-built soil library (50+ states, standardized forest/rangeland soils)
- Calculate erodibility and hydraulic parameters from soil texture
Primary Users:
- NoDb controllers building WEPP model input files
- Researchers transforming soils for scenario modeling
- Wildfire analysts applying burn severity adjustments
- Model developers extending WEPP soil capabilities
Package Organization:
wepppy/wepp/soils/
├── __init__.py # Package exports
├── README.md # This file
├── builder/ # Soil file builders
├── horizon_mixin.py # Erodibility and conductivity calculations
├── soilsdb/ # Pre-built soil library
│ ├── README.md # Library documentation
│ ├── __init__.py # Library API
│ └── data/ # Soil files (Database/, Forest/, Forest2006/)
└── utils/ # Parsing and transformation utilities
├── README.md # WeppSoilUtil documentation
├── wepp_soil_util.py # Primary soil file parser/transformer
├── multi_ofe.py # Multi-OFE composition
└── utils.py # Helper functions
Quick Start
Parse a WEPP Soil File
from wepppy.wepp.soils.utils import WeppSoilUtil
# Load soil file
soil = WeppSoilUtil('/path/to/soil.sol')
# Access properties
print(f"Texture: {soil.simple_texture}")
print(f"Clay: {soil.clay}%, Sand: {soil.sand}%")
print(f"Depth: {soil.soil_depth} mm")
print(f"Conductivity: {soil.avke} mm/h")
print(f"Version: {soil.datver}")
Transform Soil Parameters
# Modify initial saturation
soil.modify_initial_sat(0.75)
# Adjust restrictive layer conductivity
soil.modify_kslast(0.5)
# Write modified soil
soil.write('/path/to/modified_soil.sol')
Migrate to Modern Format
# Upgrade legacy soil to version 7778
modern = soil.to7778(hostname='analysis.server.edu')
modern.write('/path/to/upgraded_soil.sol')
Access Pre-Built Soils
from wepppy.wepp.soils.soilsdb import load_db, get_soil
# Browse library
available_soils = load_db()
print(f"Library contains {len(available_soils)} soils")
# Load reference soil
forest_loam = WeppSoilUtil(get_soil('Forest/Forest loam.sol'))
Apply Wildfire Adjustments
from wepppy.wepp.soils.soilsdb import read_disturbed_wepp_soil_fire_pars
# Get high severity burn parameters for loam
fire_pars = read_disturbed_wepp_soil_fire_pars(
simple_texture='loam',
fire_severity='high'
)
# Access adjusted erodibility
print(f"Burned ki: {fire_pars['ki']}")
print(f"Burned kr: {fire_pars['kr']}")
WEPP Soil File Format Versions
WEPP soil files have evolved through multiple versions, each adding capabilities for improved hydrologic and erosion modeling.
Version Evolution Timeline
| Version | Year | Key Features | Use Case |
|---|---|---|---|
| 97.5 | 1997 | Basic texture, erodibility | Legacy compatibility |
| 2006.2 | 2006 | Restrictive layer parameters | Bedrock/hardpan modeling |
| 7777 | 2010 | Bulk density, field capacity, wilting point | Hydrologic refinement |
| 7778 | 2010 | Anisotropy for lateral flow | Hillslope hydrology |
| 9001 | 2014 | Exponential keff recovery | Post-fire infiltration recovery |
| 9002 | 2014 | Saxton & Rawls keff calculation | Improved conductivity estimates |
| 9003 | 2018 | Burn severity codes, lower keff limit | Wildfire erosion modeling |
| 9005 | 2022 | Revegetation, upper keff limit | Post-fire recovery trajectories |
Version 97.5 (Basic Soils)
Introduced: WEPP 97.5 (1997)
Horizon Parameters: solthk, sand, clay, orgmat, cec, rfg
Limitations:
- No hydraulic conductivity specification
- Missing bulk density, field capacity, wilting point
- WEPP internally estimates missing parameters
Use Case: Legacy model runs, educational demonstrations
Version 2006.2 (Restrictive Layer)
Introduced: WEPP 2006.2 (2006)
New Features:
- Restrictive layer parameters (bedrock depth, conductivity)
- Enables modeling shallow soils over bedrock or hardpan
Horizon Parameters: Same as 97.5
Restrictive Layer:
slflag- Presence flagui_bdrkth- Bedrock depth (mm)kslast- Restrictive layer conductivity (mm/h)
Use Case: Mountainous terrain, shallow soils, perched water tables
Version 7777 (Hydrologic Enhancement)
Introduced: WEPP 2010
New Features:
- Bulk density specification
- Field capacity (water retention at -33 kPa)
- Wilting point (water retention at -1500 kPa)
- Hydraulic conductivity per horizon
Horizon Parameters: solthk, bd, ksat, fc, wp, sand, clay, orgmat, cec, rfg
Improvements:
- More accurate water balance
- Better baseflow predictions
- Reduced reliance on internal parameter estimation
Use Case: Hydrologic studies, watershed modeling, calibration against stream gauges
Version 7778 (Anisotropy)
Introduced: WEPP 2010
New Features:
- Anisotropy ratio (lateral vs. vertical conductivity)
Horizon Parameters: solthk, bd, ksat, anisotropy, fc, wp, sand, clay, orgmat, cec, rfg
Anisotropy Ratio:
1.0- Isotropic (equal horizontal/vertical flow)> 1.0- Preferential lateral flow (common in forest soils)- Typical values: 1.0 (deep layers) to 10.0 (shallow organic layers)
Use Case: Hillslope hydrology, subsurface lateral flow, forested watersheds
Version 9001 (Disturbed Lands - Exponential Recovery)
Introduced: Disturbed WEPP (2014)
New OFE Parameters:
ksatadj- Enable keff adjustment flagluse- Disturbed land use class (forest, shrub, grass)stext- Simple texture classificationksatfac- Lower bound for keff (multiplier)ksatrec- Exponential recovery rate
Effective Conductivity (keff):
keff(t) = ksat * (ksatfac + (1 - ksatfac) * (1 - exp(-ksatrec * t)))
where t is cumulative precipitation since disturbance.
Use Case: Post-fire infiltration recovery, fire severity modeling, temporal hydrophobicity
Version 9002 (Saxton & Rawls)
Introduced: Disturbed WEPP (2014)
New Features:
- keff calculated from Saxton & Rawls (2006) pedotransfer functions
- van Genuchten parameters estimated from texture via Rosetta
OFE Parameters: ksatadj, luse, stext (ksatfac, ksatrec retained for compatibility but not used)
Improvements:
- Physically-based conductivity reduction
- Better alignment with soil physics literature
- Consistent with SSURGO parameter estimation
Use Case: Research applications requiring defensible parameter sources
Version 9003 (Burn Severity Codes)
Introduced: WEPPcloud (2018)
New OFE Parameters:
burn_code- Burn severity classification (unburned, low, moderate, high)texid_enum- Integer texture code (1-4)lkeff- Lower limit on keff (mm/h) to simulate hydrophobicity
Lower keff Limit:
- Prevents keff from falling below
lkeffeven as soil wets - Simulates persistent water repellency in burned soils
- Typical values: 1.0 (high severity) to 10.0 (low severity)
Use Case: Wildfire erosion prediction, BAER (Burned Area Emergency Response), burn severity mapping
Version 9005 (Revegetation)
Introduced: WEPPcloud (2022, Beta)
New OFE Parameters:
uksat- Upper limit on keff (mm/h) for revegetation recovery- Enhanced texture enum for finer classification
keff Bounds:
lkeff≤ keff ≤uksat- Enables modeling of vegetation-driven infiltration improvement
- Supports multi-year post-fire recovery trajectories
Use Case: Long-term post-fire monitoring, revegetation effectiveness, treatment evaluation
Module Documentation
WeppSoilUtil
Primary interface for parsing, transforming, and exporting WEPP soil files. Comprehensive documentation includes:
- Class methods and properties
- Version migration workflows
- Parameter replacement patterns
- Advanced transformation examples
- Integration with NoDb controllers
Highlights:
- Parse all WEPP versions (97.5 - 9005)
- Modify saturation, conductivity, erodibility
- Migrate between versions with automatic parameter estimation
- Export to WEPP, YAML, or BSON formats
Soil Library (soilsdb)
Pre-built WEPP soil files for standardized modeling. Comprehensive documentation includes:
- API reference (
load_db(),get_soil(),read_disturbed_wepp_soil_fire_pars()) - Library collections (Database, Forest, Forest2006)
- 32 forest/rangeland/disturbed soils by texture and land cover
- State-specific NRCS soil series
- Usage examples and integration patterns
Highlights:
- 50+ state directories with NRCS soil series
- Standardized forest, shrub, grass, skid trail, and burned soils
- Legacy 2006.2 format collection for backward compatibility
- Wildfire parameter lookup by texture and burn severity
Parameter descriptions
Soil
- datver: dataversion (e.g. 2006, 7777, 7778, 9001, 9002, 9003)
- solcom: User comment line - character*80
- ntemp: number of overland flow elements(OFE’s) or channels integer
- ksflag: flag to use internal hydraulic conductivity adjustments
- 0: do not use adjustments (conductivity will be held constant)
- 1: use internal adjustments
OFE
- slid: soil name for current OFE or channel
- texid: soil texture for current OFE or channel
- nsl: number of soil layers for current OFE or channel
- salb: albedo of the bare dry surface soil on the current OFE or channel
- sat: initial saturation level of the soil profile porosity (m/m)
- ki: baseline interrill erodibility parameter (kg*s/m^4)
- kr: baseline rill erodibility parameter (s/m)
- shcrit: baseline critical shear parameter (N/m2)
- avke: effective hydraulic conductivity of surface soil (mm/h) > 94.1 and < 2006.2
- luse: disturbed class (forest, shrub, grass, ...)
- stext: simple soil texture (clay, clay loam, silt, sand)
- ksatadj: flag to specify using soil saturation (
keff) adjustment for forests- 0: do not adjust
- 1: do internal adjustment
- ksatfac: specifies lower bound for
keffadjustment 9001 - ksatrec: exponential recovery parameter for
keffadjustment 9001
Horizon
- solthk: horizon depth (mm)
- bd: bulk density
- ksat: hydraulic conductivity < 94.1 or ≥ 7777
- anisotropy: ≥ 7778
- fc: field capacity ≥ 7778
- wp: wilting point ≥ 7778
- sand: percentage of sand content (%)
- clay: percentage of clay content (%)
- orgmat: percentage of organic matter (%)
- cec: cation exchange capacity in the layer (meq/100 g of soil)
- rfg: percentage of rock fragments by volume in the layer (%)
Restrictive Layer
- slflag: flag to specify restrictive layer
- 0: no restrictive layer
- 1: restritive layer present
- ui_bdrkth: bed rock depth (mm)
- kslast: hydraulic conductivity of restrictive layer