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.
Supported Species
| Code | Species | Scientific Name |
|---|---|---|
| LP | Loblolly Pine | Pinus taeda |
| SP | Shortleaf Pine | Pinus echinata |
| LL | Longleaf Pine | Pinus palustris |
| SA | Slash Pine | Pinus elliottii |
Quick Start
pip install pyfvs
from 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")
Growth Models
pyFVS implements individual tree growth models from FVS documentation:
Height-Diameter (Curtis-Arney)
height = 4.5 + p2 × exp(-p3 × DBH^p4)
Large Tree Diameter Growth
ln(DDS) = β₁ + β₂×ln(DBH) + β₃×DBH² + β₄×ln(CR) + β₅×RH + β₆×SI + ...
Small Tree Height Growth (Chapman-Richards)
height = c1 × SI^c2 × (1 - exp(c3 × age))^(c4 × SI^c5)
Architecture
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
Configuration
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.91413
Output
pyFVS 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 |
| ... | ... | ... | ... | ... | ... |
Integration with pyFIA
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)
The FIAtools Ecosystem
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
References
- FVS Southern Variant Documentation
- Bechtold & Patterson (2005) "The Enhanced Forest Inventory and Analysis Program"
Citation
@software{pyfvs2025,
title = {pyFVS: Python Implementation of the Forest Vegetation Simulator},
author = {Mihiar, Christopher},
year = {2025},
url = {https://fiatools.org}
}
Built by Chris Mihiar · USDA Forest Service Southern Research Station
Metadata
Release files for pyfvs-fia 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyfvs_fia-0.2.3.tar.gz | 250.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyfvs_fia-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 588.7 kB
Release files / pyfvs_fia-0.2.3.tar.gz
| Download URL | pyfvs_fia-0.2.3.tar.gz |
|---|---|
| Size | 250.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
491da351d21ee75ea1be8fc26f3e9b57f644d7aa8ba70d44f68785dab02968dd
|
|
BLAKE2b-256 checksum How to use checksums |
e3ea9833592be7e054d07b3f92c3218ab3377eae22b1dfb8f26b2dc59d39616d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / pyfvs_fia-0.2.3-py3-none-any.whl
| Download URL | pyfvs_fia-0.2.3-py3-none-any.whl |
|---|---|
| Size | 338.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22dc66b50a73972ea48bb0ff90b1943cc11807b13e632fecae52419f5b27e88b
|
|
BLAKE2b-256 checksum How to use checksums |
7c048aa2ad66d0da6cbea396b82443ab0d6d4cf9064609b526dd315d05d71732
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|