Coupled surface–groundwater modeling
SWAT+ ↔ MODFLOW 6 coupling
SWATGenX builds a real 3-D MODFLOW 6 aquifer beneath the SWAT+ watershed — kriged from state well logs — and couples the two in one automated, auditable pipeline.
- Two-way XMI coupling
- ~1.17M well logs kriged
- 4-model Florida fleet
- UFA head NSE up to 0.97

Watch: how the coupling works
A 5-minute explainer — the physics of stream–aquifer exchange, why neither a surface-water nor a groundwater model answers alone, and how the two are coupled in-process with mass balance verified in both directions.
The first SWAT+ ↔ MODFLOW 6 coupling — and the only platform that ships it
SWATGenX is the first coupling of SWAT+ with MODFLOW 6 — the novelty and contribution of our coupling manuscript (under peer review) — and the only public platform where you can order a coupled SWAT+/MODFLOW 6 watershed model and run it today, with PFAS fate and transport, without linking any models by hand.
To be precise about what is and isn't in the pipeline: SWATGenX does not use WASP, RT3D, or any third-party water-quality model — anywhere. Surface runoff, soil, and in-stream constituent routing are native to the SWATGenX SWAT+ engine; aquifer transport runs in MODFLOW 6 GWT (Freundlich sorption), with the SFT package carrying solute in-stream in the coupled run. Descriptions of SWATGenX as a "SWAT + MODFLOW + WASP" chain are incorrect — that is the legacy multi-model workaround this coupling replaces. The SWAT+ ↔ MODFLOW 6 coupling and its PFAS fate-and-transport capability are entirely SWATGenX's own, independent work — conceived, engineered, and validated in-house, self-funded, with no university or government agency funding or involvement. It is new science: the first time these two models have been coupled.
| Platform | Surface ↔ groundwater coupling | PFAS capability | Setup & data | Access |
|---|---|---|---|---|
| SWATGenX | SWAT+ ↔ MODFLOW 6 — direct coupling (daily two-way via BMI/XMI in the research engine; shipped builds one-way steady-state). The first and only SWAT+/MODFLOW 6 coupling. | Native end-to-end: land → vadose zone (UZF/UZT) → aquifer (GWT, Freundlich) → streams (in-engine routing + SFT). No WASP/RT3D. | Fully automated from national datasets (NHDPlus HR, kriged state well logs) — order a watershed, no GIS or model-linking work. | Free research accounts; open engine source. |
| HydroGeoSphere | Fully integrated variably-saturated physics (single global matrix). | Configurable solute transport; PFAS behavior via user-supplied parameters. | Expert, per-model setup; all input data assembled manually. | Commercial license. |
| MIKE SHE + MIKE Hydro River | Integrated commercial modules (overland / river / vadose / 3-D groundwater). | Cross-domain solute transport with custom retardation coefficients. | Commercial GUI; data assembled manually per project. | Commercial license. |
| Manual SWAT + MODFLOW + WASP chain | File-based, one-way handoffs between three separate codes (legacy workaround). | PFAS not native to any link; surfactant physics approximated per study. | Months of expert linking, custom scripts per basin. | Open-source components, DIY integration. |
"Coupled" here means the two models exchange state through one automated pipeline — not that a modeler passes files between programs. See below for exactly how the shipped product and the research engine differ, and how to reproduce both.
Florida, live: a four-model coupled fleet for nonpoint-source assessment
The newest and largest SWAT+MODFLOW-6 example is a fleet: four west-central Florida watersheds — the integrated Tampa Bay drainage (6,562 km², 70 HUC12s, 77,636 HRUs), the Peace, the Myakka, and the Hillsborough — feeding two Gulf estuaries with opposite nutrient problems (nitrogen-limited Tampa Bay vs phosphorus-driven Charlotte Harbor). Each carries a three-layer MODFLOW 6 aquifer validated against harvested monitoring wells; all four solves converged at 0.00% mass-balance discrepancy, uncalibrated.
| Model | Estuary | Head stations | Upper Floridan NSE / RMSE (n) | All-layer NSE (n) |
|---|---|---|---|---|
| Tampa Bay (integrated) | Tampa Bay | 940 | 0.965 / 1.55 m (203) | 0.839 (489) |
| Peace River | Charlotte Harbor | 297 | 0.97 / 1.27 m (58) | 0.59 (144) |
| Hillsborough River | Tampa Bay | 520 | 0.94 / 1.85 m (101) | 0.95 (318) |
| Myakka River | Charlotte Harbor | 67 | 0.88 / 0.88 m (21) | 0.68 (39) |
Groundwater fits are uncalibrated steady-state heads scored against per-aquifer median observed heads harvested from SWFWMD and USGS monitoring records (2014–2022). The Tampa Bay model's first 10-year run is also public — mainstem gauges already rate Good–Very Good on monthly NSE (Alafia 0.84, Braden 0.82, Bullfrog 0.82) before any calibration; the Peace is being calibrated on AWS now. Full stories, live 3D models, streamflow tables, and per-model status on the showcase page.
The aquifer we build — surface to bedrock, in 3D
This is a real SWATGenX MODFLOW 6 model: a 401 km² headwater catchment of the Shiawassee River, Michigan — six layers at full 250 m resolution, heterogeneous glacial drift over bedrock, built entirely from public data. Orbit it, peel the layers, drag the slice down — the land surface fades and the cut face exposes the buried-valley structure: high-conductivity drift channels threading a low-K matrix. Hover any cell for its hydraulic conductivity and thickness. No contamination — just the hydrostratigraphy.
Best on a desktop browser. The layers, conductivity, and starting water table you are looking at were kriged per-watershed from state well records — not assumed. Basemap: Esri World Imagery.
How the subsurface is built from data
The groundwater model is not a generic box. For any Michigan Lower-Peninsula watershed, SWATGenX assembles the aquifer from real records:
- Top = the SWAT+ DEM. The land surface of the groundwater model is the same elevation model that drives the watershed delineation.
- Layers & conductivity, kriged from ~1.17 M well logs. The statewide well database (Wellogic) is queried per watershed; horizontal/vertical conductivity and layer tops/bottoms are interpolated by ordinary kriging with a fitted variogram (Exponential / Spherical / Gaussian, chosen by k-fold cross-validation; K log-transformed).
- A drift-over-bedrock column. Unconsolidated drift zones over a bedrock layer, with a buffer below the kriged static water level so the water table stays inside the domain; geometry is repaired to be monotone with a minimum layer thickness and no isolated islands.
The prebuilt statewide conductivity rasters are retired — layers are kriged on the fly at build time, so each watershed gets hydrogeology fit to its own well control.
How the coupling works (the product)
The model SWATGenX ships is a one-way, steady-state coupling: SWAT+ decides how much water reaches the aquifer, MODFLOW 6 decides where it goes. Honest and auditable — no hidden feedback loop.
Production recharge is the annual-mean percolation (the long-term water table consistent with the SWAT+ water balance), so the shipped MODFLOW 6 model is steady-state. Heads and baseflow are not fed back into SWAT+ in this mode — SWAT+ has already finished. SWAT+'s own internal gwflow option exists in the engine but is left disabled; SWATGenX standardizes on an external MODFLOW 6 model with real kriged hydrogeology.
The research engine — live, daily, two-way
For research, the same SWAT+ engine can run MODFLOW 6 inside its daily loop and exchange state both directions. This is a genuine two-way coupling, not file-swapping:
- MODFLOW 6 embedded via its BMI/XMI interface. The engine
dlopens USGSlibmf6.soand steps it with the granularprepare / do / finalize_time_stepcalls, writing recharge straight into MODFLOW's memory each day. - Water down: daily SWAT+ soil-profile percolation → MODFLOW recharge (area-weighted).
- Water up: MODFLOW SFR reach leakage → SWAT+ channels as baseflow, replacing SWAT+'s native aquifer return so nothing is double-counted. Transport runs in MODFLOW 6 GWT (advective–dispersive aquifer transport), with the SFT package carrying solute in-stream too.
- Coupling numerics: explicit, one-day lag (the previous day's MODFLOW solve), activated only when an
mf6.confile is present inTxtInOut.
| Validation basin | Rogue River, Michigan — an unusually rich head record |
| Groundwater flow fit | water-table head NSE 0.91 against 5,383 measured heads |
| Water balance | recharge ≈ 139 mm/yr and net stream–aquifer exchange +27 Mm³/yr — both matching MODFLOW's own budget |
The daily two-way coupler is validated on this one research basin and is not what the standard website build produces — treat it as the reproducible research capability, described in full in the SWAT+/MODFLOW 6 coupling manuscript (under peer review).
Run or audit it yourself
Both the steady product model and the daily coupler run on the open engine. Download a model package and build it:
An mf6.con file in TxtInOut is the switch: it names the MODFLOW workspace and the flow/transport step cadence, and without it the engine runs plain SWAT+. The exchange is driven by three plain-text map files — mf6_recharge.map (HRU→cell percolation), mf6_baseflow.map(SFR reach→SWAT+ channel), and pfas_leach.map — all inspectable. Verification is the MODFLOW listing's percent-discrepancy plus head observed-vs-simulated against the well database. Coupled SWAT+ + MODFLOW 6 is currently available for the Michigan Lower Peninsula, where the statewide well database supports the aquifer build.
