Empirical reservoir eutrophication modelling in R.
okBATHTUB implements steady-state water quality predictions for
reservoirs using the Walker BATHTUB Model 1 (second-order
available-phosphorus sedimentation) as the default retention model,
with the simpler Vollenweider (1976) / Larsen-Mercier (1976) form
available as an alternative. The package predicts in-lake total
phosphorus, total nitrogen, chlorophyll-a, and Secchi depth from
tributary nutrient and hydraulic loading inputs, and computes
Carlson (1977) Trophic State Indices.
Optional Oklahoma-specific chlorophyll-a and Secchi regression coefficients are bundled, calibrated from publicly available state lake monitoring data, but the package is fully usable for reservoirs anywhere.
okBATHTUB is designed to complement watershed loading models such as
SWAT and HAWQS in a two-model nutrient management workflow.
# install.packages("remotes")
remotes::install_github("0011235813/Oklahoma-BATHTUB", subdir = "okBATHTUB")
Documentation site: https://0011235813.github.io/Oklahoma-BATHTUB/
library(okBATHTUB)
result <- ok_load(
inflow_m3yr = 45e6, # tributary inflow
tp_inflow_ugl = 120, # flow-weighted mean TP
tn_inflow_ugl = 1800 # flow-weighted mean TN
) |>
ok_hydraulics(
surface_area_ha = 890, # normal pool surface area
mean_depth_m = 4.2 # mean depth at normal pool
) |>
ok_retention() |> # Walker BATHTUB Model 1
ok_inlake() |> # Mass balance + Chl-a + Secchi
ok_tsi() # Carlson Trophic State Index
summary(result)
| Set | Retention | Chl-a / Secchi |
|---|---|---|
"walker" (default) |
Walker BATHTUB Model 1 | Walker (1985) national |
"vollenweider" |
Vollenweider/Larsen-Mercier (= BATHTUB Model 5) | Walker (1985) national |
"oklahoma" |
Walker BATHTUB Model 1 | Oklahoma ecoregion-specific |
The default is Walker Model 1 because it is the canonical default of the BATHTUB program and is calibrated to U.S. Army Corps of Engineers reservoir data, which matches the management context for most U.S. reservoirs. Vollenweider / Larsen-Mercier is provided for users who want a parsimonious single-parameter retention model when ortho-P / total-P partitioning is unknown.
| Function | Purpose |
|---|---|
ok_load() |
Assemble tributary load inputs |
ok_load_multi() |
Aggregate multiple tributaries automatically |
ok_hydraulics() |
Add reservoir morphometry; compute residence time |
ok_retention() |
TP / TN retention coefficients |
ok_inlake() |
Mass balance, chlorophyll-a, Secchi depth |
ok_tsi() |
Carlson Trophic State Indices |
ok_segment() / |
Multi-segment reservoir modelling |
ok_segment_chain() |
|
ok_scenario() / |
Load reduction scenario analysis |
ok_scenario_sweep() |
|
ok_reservoir() / |
Look up Oklahoma reservoir morphometry |
ok_reservoirs |
Bundled dataset (40 reservoirs, 7 ecoregions) |
ok_lake_ecoregion() / |
Look up an Oklahoma lake’s EPA L3 ecoregion |
ok_lake_ecoregions |
Bundled dataset (214 lakes, ecoregion + monitoring) |
ok_plot_response() / |
Visualizations (require ggplot2) |
ok_plot_scenario() / |
|
ok_plot_segments() / |
|
ok_plot_tsi() |
vignette("getting-started", package = "okBATHTUB")vignette("oklahoma-workflow", package = "okBATHTUB")vignette("hawqs-linkage", package = "okBATHTUB")ok_reservoirs dataset is a compilation of public-domain
morphometric data; for decision-relevant applications, verify against
the most current authoritative source for the specific reservoir.okBATHTUB was developed independently by Jordon Henderson on personal
time and personal equipment. It is released under the MIT license as
personal-capacity open-source research software. It is not a product
of, sponsored by, or affiliated with any employer or government agency,
and does not represent or imply endorsement by any agency. All data
used to calibrate the bundled Oklahoma coefficients are publicly
available state monitoring data.
MIT © 2026 Jordon Henderson.