Groundwater Model
1. Overview
The groundwater component of HydroPol2D represents the coupled dynamics of:
- vadose-zone storage,
- recharge from infiltration,
- lateral saturated groundwater flow,
- groundwater exfiltration to the surface,
- and groundwater interaction with river cells.
The current implementation combines two complementary components:
-
a recharge module, which computes the flux from the vadose zone to groundwater using a reduced Richards-consistent Darcy closure based on the van Genuchten–Mualem constitutive relations, and
-
a two-dimensional Boussinesq groundwater flow solver, which routes saturated flow laterally across the domain and returns exfiltration to the land surface when the groundwater table rises above the local surface elevation.
This structure allows HydroPol2D to represent dynamic coupling between:
- surface water,
- vadose storage,
- groundwater recharge,
- saturated groundwater flow,
- and saturation-excess return flow.

Figure 1. Conceptual representation of the aquifer component in HydroPol2D.
2. General Conceptual Structure
The groundwater model is solved after infiltration and vadose-zone update. Its logic is:
- compute the water table position from the current groundwater head,
- determine the maximum unsaturated storage permitted by the current water table depth,
- compute recharge from the vadose zone to groundwater,
- solve lateral groundwater flow using a 2D Boussinesq equation,
- compute groundwater exfiltration to the surface,
- correct vadose storage if the rising water table reduces the available unsaturated storage,
- update surface water depth accordingly.
The principal variables are:
- = groundwater hydraulic head
- = aquifer base elevation or bedrock elevation
- = saturated thickness
- = recharge rate to groundwater
- = exfiltration flux from groundwater to the surface
- = specific yield
- = saturated hydraulic conductivity
3. Water Table Position and Unsaturated-Zone Capacity
HydroPol2D determines the position of the water table relative to the land surface using the current groundwater head.
Let:
- = land-surface elevation
- = soil depth
- = groundwater hydraulic head
The saturated thickness above the bedrock is computed as
The depth from the land surface to the water table is then
with the constraint
where:
- = saturated thickness measured upward from the aquifer base
- = depth to water table below the ground surface
This variable is central to the coupling between vadose storage and groundwater.
3.1 Maximum unsaturated storage
The maximum water that can be stored in the unsaturated zone is defined as
where:
- = maximum unsaturated storage
- = saturated volumetric water content
- = initial or reference volumetric water content
Thus, as the water table rises, the vadose zone shrinks and the storage capacity available for infiltration decreases.
4. Recharge from the Vadose Zone
Recharge is computed using the function simulate_groundwater_recharge, which receives infiltration from the infiltration module and updates vadose-zone storage consistently.
4.1 Input infiltration
The infiltration module provides the infiltration flux:
internally stored in HydroPol2D as Hydro_States.f in . This is converted to groundwater-model units:
where:
- = infiltration input to the recharge model
4.2 Vadose storage state
Let:
- = current vadose-zone storage
The code converts the bucket storage from to and uses this as the state variable for recharge.
4.3 Representative volumetric water content
The representative water content in the unsaturated zone is approximated as
bounded as
The effective saturation is then computed as
where:
- = representative volumetric water content
- = residual water content
- = effective saturation
5. van Genuchten–Mualem Recharge Closure
The recharge model uses the same constitutive functions employed in the infiltration module.
5.1 Pressure head relation
The matric pressure head is computed as
where:
- = representative matric pressure head
- = van Genuchten inverse air-entry parameter
- = van Genuchten shape parameter
At near saturation, HydroPol2D sets
to avoid numerical singularities.
5.2 Unsaturated hydraulic conductivity
The relative conductivity is
and the unsaturated conductivity becomes
where:
- = unsaturated hydraulic conductivity
- = saturated hydraulic conductivity
- = pore-connectivity parameter
If is not explicitly provided, HydroPol2D uses .
5.3 Recharge law
Recharge is then computed with a Darcy-like closure:
where the effective drainage length is defined as
and:
- = recharge rate
- = effective drainage length from the representative bucket state to the water table
The hydraulic gradient term is bounded in the code to avoid unrealistically large drainage or upward capillary-rise fluxes.
5.4 Vadose storage update
The vadose storage is updated as
subject to the constraints
Recharge is then recomputed from exact mass conservation:
This guarantees that recharge is always fully consistent with the actual change in vadose storage.
6. Two-Dimensional Boussinesq Groundwater Flow Model
Once recharge has been computed, HydroPol2D routes groundwater laterally using the function Boussinesq_2D_explicit.
This solver represents the saturated groundwater system through a depth-integrated unconfined flow approximation.
6.1 Governing equation
The groundwater routing follows the 2D Boussinesq equation in conservative form:
where:
- = specific yield
- = groundwater hydraulic head
- = groundwater flux vector
- = recharge rate
HydroPol2D evaluates this equation numerically by computing fluxes at cell interfaces and then updating the groundwater head explicitly.
6.2 Saturated thickness
The active saturated thickness is defined as
where:
- = saturated thickness
- = aquifer base elevation or bedrock elevation
This enforces the physical condition that no saturated storage exists below the aquifer base.
6.3 Interface fluxes
HydroPol2D computes groundwater fluxes at cell interfaces using Darcy’s law with saturated thickness weighting.
For the direction:
and for the direction:
where:
- = fluxes per unit width
- = hydraulic conductivity at cell interfaces
- = interface saturated thicknesses
In the implementation, the interface hydraulic conductivity is taken as the arithmetic average of the conductivities in adjacent cells:
and the interface saturated thickness is likewise averaged:
6.4 Conservative flux limiting
To avoid numerical instability and nonphysical depletion of groundwater storage, HydroPol2D applies a flux limiter so that no cell can lose more water than it contains during a substep.
For example, in the direction, the maximum allowed flux is
and the final interface flux is limited as
A similar expression is used in the direction.
This is an important feature of the HydroPol2D groundwater solver because it guarantees local mass admissibility during explicit integration.
6.5 Divergence of groundwater fluxes
The divergence of the flux field is then computed from the interface fluxes as
using conservative finite differences on the raster grid.
6.6 Explicit predictor–corrector update
The Boussinesq solver uses an explicit predictor–corrector strategy.
Predictor step
A first estimate of head is computed using the current fluxes:
Corrector step
Fluxes are recomputed from the predictor state, averaged, and used in the final update:
where:
- = predictor hydraulic head
- = final hydraulic head after the time step
- = average of predictor and corrector interface fluxes
This predictor–corrector procedure improves stability and reduces numerical diffusion relative to a simple explicit Euler update.
7. Adaptive Time Stepping
The groundwater solver uses adaptive time stepping based on a Courant-type stability condition.
First, Darcy velocities are computed as
where:
- = groundwater velocities
The stable time step is then estimated as
where:
- = stability factor
- = grid spacing
HydroPol2D then uses the minimum between the requested time step and the newly computed stable step. This ensures that the explicit Boussinesq solver remains stable even under rapidly changing groundwater gradients.
8. Boundary Conditions
The groundwater solver supports:
- Dirichlet boundary conditions,
- no-flow boundary conditions,
- domain masking.
8.1 Dirichlet boundaries
If a Dirichlet mask is provided, the head is prescribed directly:
on the selected boundary cells, where:
- = prescribed boundary head
8.2 No-flow boundaries
No-flow boundaries are enforced by zero-gradient conditions at the domain perimeter. In practice, HydroPol2D copies the head from the nearest valid interior neighbor to the perimeter cell, thereby enforcing a discrete Neumann condition.
8.3 Catchment mask
All groundwater calculations are restricted to the valid computational domain. Cells outside the catchment mask are set to NaN.
9. Groundwater Exfiltration to the Surface
After updating the groundwater head, HydroPol2D computes exfiltration where the groundwater table rises above the effective land surface.
The surface elevation used for exfiltration is
where:
- = effective land-surface elevation for groundwater emergence
Exfiltration is then computed as
where:
- = exfiltration flux
This expression means that if groundwater head exceeds the land surface, the excess saturated storage is expelled upward and transferred to the surface water system.
The groundwater head is then clipped so that
which prevents groundwater from remaining above the land surface after exfiltration has been accounted for.
10. River–Aquifer Exchange
The current solver interface includes:
- a river mask,
- a river conductance term,
- river stage,
- river bed elevation,
which are designed to support river–aquifer exchange. In the current explicit implementation, the placeholder variable
is initialized and carried through the coupling interface as the river-exchange term. This provides the structural basis for river–groundwater interaction within the HydroPol2D framework, even when the present version primarily emphasizes recharge, lateral groundwater flow, and exfiltration.
11. Saturation-Excess Correction After Water Table Rise
After the Boussinesq update, HydroPol2D recomputes the water-table depth and therefore the new maximum unsaturated storage:
If the updated vadose storage exceeds this new capacity, the excess is returned to the surface as saturation-excess water:
The correction is then:
and surface water depth is increased by
This is a very important part of HydroPol2D because it guarantees mass consistency between the vadose and saturated zones when the water table rises during a time step.
12. Coupling Back to Surface Water
The groundwater model feeds back to the surface water system in two ways:
- exfiltration, through ,
- saturation excess, through .
The surface water depth is updated as
with the appropriate unit conversion in the code from to .
This means that HydroPol2D allows groundwater to actively influence flood generation and near-surface wetness, rather than treating it as a disconnected lower boundary process.
13. Mass Balance
The groundwater solver performs an explicit mass-balance check during each update.
The recharge input volume is
The exfiltration loss volume is
The groundwater storage change is
The mass-balance residual is then
where:
- = groundwater mass-balance error
This quantity is stored as a groundwater diagnostic error in HydroPol2D.
14. Summary
The HydroPol2D groundwater model combines:
- a vadose-zone recharge module based on a Darcy–van Genuchten–Mualem closure,
- a 2D Boussinesq groundwater flow model for lateral saturated flow,
- adaptive explicit time stepping,
- surface exfiltration when groundwater rises above the ground surface,
- and a saturation-excess correction that preserves mass when the water table reduces vadose storage capacity.
This structure allows HydroPol2D to represent a dynamically coupled subsurface system in which:
- infiltration does not simply disappear into a static bucket,
- recharge affects groundwater head,
- groundwater flow redistributes water laterally,
- and groundwater can return to the land surface and influence overland flow generation.
The result is a groundwater model that is physically interpretable, mass conservative, and fully integrated with the hydrologic and hydrodynamic architecture of HydroPol2D.