Forest growth modeling in Python
Part of the FIAtools Python Ecosystem
pyFIA ·
gridFIA ·
pyFVS ·
askFIA
A Python implementation of the Forest Vegetation Simulator (FVS) Southern variant. Simulate growth and yield for loblolly, shortleaf, longleaf, and slash pine from age 0 to 50 years.
| Code | Species | Scientific Name |
|---|---|---|
| LP | Loblolly Pine | Pinus taeda |
| SP | Shortleaf Pine | Pinus echinata |
| LL | Longleaf Pine | Pinus palustris |
| SA | Slash Pine | Pinus elliottii |
pip install pyfvsfrom pyfvs import Stand
# Initialize a planted stand
stand = Stand.initialize_planted(
species="LP",
trees_per_acre=500,
site_index=70
)
# Simulate 50 years of growth
stand.grow(years=50)
# Get results
metrics = stand.get_metrics()
print(f"Final volume: {metrics['volume']:.0f} ft³/acre")pyFVS implements individual tree growth models from FVS documentation:
height = 4.5 + p2 × exp(-p3 × DBH^p4)
ln(DDS) = β₁ + β₂×ln(DBH) + β₃×DBH² + β₄×ln(CR) + β₅×RH + β₆×SI + ...
height = c1 × SI^c2 × (1 - exp(c3 × age))^(c4 × SI^c5)
Tree Initial State
│
▼
DBH >= 3.0? ──No──► Small Tree Model
│ │
Yes ▼
│ Height Growth
▼ │
Large Tree Model ▼
│ Height-Diameter
▼ │
Predict ln(DDS) ▼
│ Update DBH
▼ │
Calculate DBH Growth │
│ │
└────────┬───────────┘
▼
Update Crown Ratio
│
▼
Crown Competition
│
▼
Updated Tree State
Species parameters are stored in YAML configuration files:
# cfg/species/lp_loblolly_pine.yaml
species_code: "LP"
common_name: "Loblolly Pine"
height_diameter:
p2: 243.860648
p3: 4.28460566
p4: -0.47130185
bark_ratio:
b1: -0.48140
b2: 0.91413pyFVS generates yield tables with standard forest metrics:
| Age | TPA | QMD | Height | BA | Volume |
|---|---|---|---|---|---|
| 0 | 500 | 0.5 | 1.0 | 0.7 | 0 |
| 10 | 485 | 4.2 | 28.5 | 47.2 | 892 |
| 20 | 420 | 7.8 | 52.1 | 139.8 | 3,241 |
| 30 | 310 | 10.4 | 68.3 | 182.5 | 5,128 |
| ... | ... | ... | ... | ... | ... |
from pyfia import FIA
from pyfvs import Stand
# Get current stand conditions from FIA
with FIA("database.duckdb") as db:
db.clip_by_state(37)
stand_data = db.get_stand_summary(plot_id="123")
# Initialize pyFVS with FIA data
stand = Stand.from_fia_data(stand_data)
stand.grow(years=30)pyFVS is part of the FIAtools Python ecosystem - a unified suite of open-source tools for forest inventory analysis:
| Tool | Purpose | Key Features |
|---|---|---|
| pyFIA | Survey & plot data | DuckDB backend, 10-100x faster than EVALIDator |
| gridFIA | Spatial raster analysis | 327 species at 30m resolution, Zarr storage |
| pyFVS | Growth simulation | Chapman-Richards curves, yield projections |
| askFIA | AI interface | Natural language queries for forest data |
Explore the full ecosystem at fiatools.org
- FVS Southern Variant Documentation
- Bechtold & Patterson (2005) "The Enhanced Forest Inventory and Analysis Program"
@software{pyfvs2025,
title = {pyFVS: Python Implementation of the Forest Vegetation Simulator},
author = {Mihiar, Christopher},
year = {2025},
url = {https://fiatools.org}
}Developed in collaboration with USDA Forest Service Research & Development. pyFVS is a Python implementation of the Forest Vegetation Simulator and is part of the FIA Python Ecosystem.
Built by Chris Mihiar · USDA Forest Service Southern Research Station