Skip to main content

Hydrologic Model

The hydrologic component of HydroPol2D governs the partitioning of atmospheric input into interception, throughfall, infiltration, evapotranspiration, snow accumulation and melt, vadose-zone storage, groundwater recharge, and groundwater feedback to the land surface.

At the cell scale, the hydrologic model determines how much water:

  • is temporarily stored by the canopy,
  • reaches the ground surface,
  • infiltrates into the soil,
  • remains stored in the vadose zone,
  • recharges groundwater,
  • returns to the surface through exfiltration,
  • or is removed by evaporation and transpiration.

These processes are evaluated sequentially within each time step and provide the hydrologic forcing for the hydrodynamic model.


1. Conceptual Hydrologic Balance

At the conceptual level, the hydrologic balance of a grid cell may be written as

dt=Peff+Msnow+qexfiEsurfTr+qsrcqsink\frac{\partial d}{\partial t} = P_{\mathrm{eff}} + M_{\mathrm{snow}} + q_{\mathrm{exf}} - i - E_{\mathrm{surf}} - T_{\mathrm{r}} + q_{\mathrm{src}} - q_{\mathrm{sink}}

where:

  • dd is surface water depth [L][\mathrm{L}]
  • PeffP_{\mathrm{eff}} is effective rainfall reaching the ground [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • MsnowM_{\mathrm{snow}} is snowmelt contribution [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • qexfq_{\mathrm{exf}} is groundwater exfiltration to the surface [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • ii is infiltration rate [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • EsurfE_{\mathrm{surf}} is evaporation rate from surface storage [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • TrT_{\mathrm{r}} is transpiration rate [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • qsrcq_{\mathrm{src}} and qsinkq_{\mathrm{sink}} are additional imposed source and sink terms [LT1][\mathrm{L}\,\mathrm{T}^{-1}]

Not all terms are active simultaneously. Their activation depends on the selected forcing configuration and model flags. Nevertheless, this balance provides the conceptual framework used to organize all vertical fluxes acting on a grid cell.


2. Canopy Interception, Throughfall, and Stemflow

HydroPol2D represents canopy interception using a storage-based interception model in which gross precipitation is partitioned into:

  • canopy storage,
  • throughfall,
  • canopy evaporation,
  • and stemflow.

The interception routine receives:

  • gross precipitation PgrossP_{\mathrm{gross}},
  • potential evaporation EpE_{\mathrm{p}},
  • leaf area index LAI\mathrm{LAI},
  • previous canopy storage Scan,prevS_{\mathrm{can,prev}},
  • canopy storage coefficient CcanC_{\mathrm{can}},

and returns updated canopy storage ScanS_{\mathrm{can}}, throughfall TfT_{\mathrm{f}}, evaporation from intercepted water EcanE_{\mathrm{can}}, and stemflow FstemF_{\mathrm{stem}}.

This interception step controls how much of the atmospheric water input is temporarily retained by vegetation and how much is transferred to the ground surface during the current time step.

2.1 Maximum canopy storage

The maximum interception storage is computed as

Scan,max=CcanLAIS_{\mathrm{can,max}} = C_{\mathrm{can}} \,\mathrm{LAI}

where:

  • Scan,maxS_{\mathrm{can,max}} is maximum canopy water storage [L][\mathrm{L}]
  • CcanC_{\mathrm{can}} is canopy storage coefficient [L][\mathrm{L}]
  • LAI\mathrm{LAI} is leaf area index [][-]

This relation implies that vegetation with larger leaf area can store more intercepted water.

2.2 Stemflow

The code includes a stemflow routine based on a delay function. The intermediate expressions are

τstem=T0exp ⁣(αstemPgross)\tau_{\mathrm{stem}} = T_0 \exp\!\left(-\alpha_{\mathrm{stem}} P_{\mathrm{gross}}\right)

and

Fstem=fstemScan,prevτstem/60F_{\mathrm{stem}} = f_{\mathrm{stem}} \, \frac{S_{\mathrm{can,prev}}}{\tau_{\mathrm{stem}}/60}

where:

  • τstem\tau_{\mathrm{stem}} is stemflow delay [T][\mathrm{T}]
  • T0T_0 is the maximum delay parameter [T][\mathrm{T}]
  • αstem\alpha_{\mathrm{stem}} is the stemflow decay coefficient [][-]
  • fstemf_{\mathrm{stem}} is the stemflow fraction [][-]
  • FstemF_{\mathrm{stem}} is stemflow [L][\mathrm{L}]

In the current HydroPol2D implementation, stemflow is deactivated by explicitly imposing

Fstem=0F_{\mathrm{stem}} = 0

Therefore, stemflow does not currently contribute to the surface-water balance, although the structure of the routine is retained in the code.

2.3 Evaporation from interception storage

The fraction of canopy storage exposed to evaporation is defined as

β=Scan,prevScan,max\beta = \frac{S_{\mathrm{can,prev}}}{S_{\mathrm{can,max}}}

and the canopy evaporation is then computed as

Ecan=βEpE_{\mathrm{can}} = \beta \, E_{\mathrm{p}}

subject to the constraint

EcanPgross+Scan,prevE_{\mathrm{can}} \le P_{\mathrm{gross}} + S_{\mathrm{can,prev}}

where:

  • β\beta is the fraction of canopy storage filled at the beginning of the time step [][-]
  • EcanE_{\mathrm{can}} is evaporation from interception storage [L][\mathrm{L}]
  • EpE_{\mathrm{p}} is potential evaporation over the time step [L][\mathrm{L}]

This formulation assumes that canopy evaporation is proportional to the fraction of storage occupied at the beginning of the time step, while also enforcing that evaporation cannot exceed the water actually available in precipitation plus stored interception water.

2.4 Interception storage update

The canopy storage increment is computed as

ΔScan=PgrossFstemEcan\Delta S_{\mathrm{can}} = P_{\mathrm{gross}} - F_{\mathrm{stem}} - E_{\mathrm{can}}

and the provisional storage becomes

Scan=Scan,prev+ΔScanS_{\mathrm{can}}^{\ast} = S_{\mathrm{can,prev}} + \Delta S_{\mathrm{can}}

Throughfall is then computed as the excess above the canopy storage capacity:

Tf=max(ScanScan,max,0)T_{\mathrm{f}} = \max\left(S_{\mathrm{can}}^{\ast} - S_{\mathrm{can,max}},\,0\right)

Finally, the canopy storage is truncated at its maximum admissible value:

Scan=min(Scan,Scan,max)S_{\mathrm{can}} = \min\left(S_{\mathrm{can}}^{\ast},\,S_{\mathrm{can,max}}\right)

where:

  • ΔScan\Delta S_{\mathrm{can}} is the canopy storage increment over the time step [L][\mathrm{L}]
  • ScanS_{\mathrm{can}}^{\ast} is provisional canopy storage before truncation [L][\mathrm{L}]
  • TfT_{\mathrm{f}} is throughfall [L][\mathrm{L}]
  • ScanS_{\mathrm{can}} is final canopy storage [L][\mathrm{L}]

This sequence reflects the physical assumption that precipitation first fills canopy storage. Once the canopy reaches its storage capacity, the excess water is released as throughfall.

2.5 Effective rainfall passed to the surface

The rainfall available to the land surface is defined as

Peff=Tf+FstemP_{\mathrm{eff}} = T_{\mathrm{f}} + F_{\mathrm{stem}}

where:

  • PeffP_{\mathrm{eff}} is effective rainfall reaching the ground [L][\mathrm{L}]
  • TfT_{\mathrm{f}} is direct throughfall [L][\mathrm{L}]
  • FstemF_{\mathrm{stem}} is stemflow [L][\mathrm{L}]

Under the current implementation, since stemflow is deactivated, effective rainfall is equal to throughfall. In practical terms, PeffP_{\mathrm{eff}} represents the amount of liquid water transferred from the atmosphere–canopy system to the land surface during the time step, prior to hydrodynamic routing.

If the interception routine is disabled, then no canopy storage is resolved and precipitation reaches the surface directly, so that

Peff=PgrossP_{\mathrm{eff}} = P_{\mathrm{gross}}

2.6 Subgrid rainfall correction for interception

When subgrid and overbank options are active, the precipitation entering the interception module is scaled by the effective wet area:

Pint=ΔPaggΔx2CaP_{\mathrm{int}} = \Delta P_{\mathrm{agg}} \, \frac{\Delta x^2}{C_a}

where:

  • PintP_{\mathrm{int}} is precipitation used by the interception module [L][\mathrm{L}]
  • ΔPagg\Delta P_{\mathrm{agg}} is aggregated rainfall depth [L][\mathrm{L}]
  • Δx\Delta x is grid resolution [L][\mathrm{L}]
  • CaC_a is effective wetted cell area [L2][\mathrm{L}^2]

Otherwise,

Pint=ΔPaggP_{\mathrm{int}} = \Delta P_{\mathrm{agg}}

This correction ensures that interception remains consistent with the hydrologically active portion of the cell area under subgrid inundation or partial wetting conditions.


3. Potential Evapotranspiration and Evaporation

HydroPol2D computes spatially distributed reference evapotranspiration using a Penman–Monteith formulation. Meteorological station data are first interpolated over the grid using inverse distance weighting, and the interpolated fields are then used to compute both reference evapotranspiration ETP\mathrm{ETP} and an evaporation-like term EpE_{\mathrm{p}}.

The quantity ETP\mathrm{ETP} is used as the standard reference evapotranspiration, while EpE_{\mathrm{p}} is used in the interception routine to estimate evaporation from intercepted canopy water.

3.1 Spatial interpolation of meteorological forcing

At each time step, the following fields are interpolated from available stations:

  • TmaxT_{\mathrm{max}} maximum air temperature [Θ][\Theta]
  • TminT_{\mathrm{min}} minimum air temperature [Θ][\Theta]
  • TairT_{\mathrm{air}} mean air temperature [Θ][\Theta]
  • U2U_2 wind speed at 2m2\,\mathrm{m} [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • UR\mathrm{UR} relative humidity [][-]
  • GsoilG_{\mathrm{soil}} soil heat flux [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]

For a generic variable ϕ\phi, the interpolated field at location x\mathbf{x} is written conceptually as

ϕ(x)=i=1Nwi(x)ϕii=1Nwi(x)\phi(\mathbf{x}) = \frac{ \sum_{i=1}^{N} w_i(\mathbf{x})\,\phi_i }{ \sum_{i=1}^{N} w_i(\mathbf{x}) }

with

wi(x)1di(x)pw_i(\mathbf{x}) \propto \frac{1}{d_i(\mathbf{x})^p}

where:

  • ϕi\phi_i is the value observed at station ii
  • di(x)d_i(\mathbf{x}) is the distance from station ii to location x\mathbf{x} [L][\mathrm{L}]
  • pp is the inverse-distance weighting power parameter [][-]

Only stations with complete data at the current time step are retained in the interpolation. This procedure yields spatially distributed forcing fields that are then used in the evapotranspiration calculations.

3.2 Penman–Monteith equation

The reference evapotranspiration is computed as

ETP=0.408Δ(RnGsoil)+γ(900U2(esea)Tair+273)Δ+γ(1+0.34U2)\mathrm{ETP} = \frac{ 0.408\,\Delta\,(R_n - G_{\mathrm{soil}}) + \gamma \left( \frac{900\,U_2\,(e_s - e_a)}{T_{\mathrm{air}} + 273} \right) }{ \Delta + \gamma\left(1 + 0.34\,U_2\right) }

and the evaporation-like term is

Ep=0.408Δ(RnGsoil)+γ(900U2(esea)Tair+273)Δ+γE_{\mathrm{p}} = \frac{ 0.408\,\Delta\,(R_n - G_{\mathrm{soil}}) + \gamma \left( \frac{900\,U_2\,(e_s - e_a)}{T_{\mathrm{air}} + 273} \right) }{ \Delta + \gamma }

where:

  • ETP\mathrm{ETP} is reference evapotranspiration [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • EpE_{\mathrm{p}} is potential evaporation without aerodynamic surface resistance in the denominator [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • Δ\Delta is the slope of the saturation vapor pressure curve [PΘ1][\mathrm{P}\,\Theta^{-1}]
  • RnR_n is net radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • GsoilG_{\mathrm{soil}} is soil heat flux [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • γ\gamma is the psychrometric constant [PΘ1][\mathrm{P}\,\Theta^{-1}]
  • U2U_2 is wind speed at 2m2\,\mathrm{m} [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • ese_s is saturation vapor pressure [P][\mathrm{P}]
  • eae_a is actual vapor pressure [P][\mathrm{P}]
  • TairT_{\mathrm{air}} is mean air temperature [Θ][\Theta]

These are the algebraic forms implemented in the current code. The difference between ETP\mathrm{ETP} and EpE_{\mathrm{p}} lies in the denominator, which makes EpE_{\mathrm{p}} an evaporation-like term more directly suited to canopy interception losses.

3.3 Supporting radiation and atmospheric terms

HydroPol2D computes the auxiliary Penman–Monteith terms using astronomical and thermodynamic relationships.

Solar declination is computed as

δsol=0.409sin ⁣(2π365J1.39)\delta_{\mathrm{sol}} = 0.409 \sin\!\left( \frac{2\pi}{365}J - 1.39 \right)

Relative Earth–Sun distance is

dr=1+0.033cos ⁣(2π365J)d_r = 1 + 0.033\cos\!\left(\frac{2\pi}{365}J\right)

Extraterrestrial radiation is then computed as

Ra=118.08πdr[ωssinϕsinδsol+cosϕcosδsolsinωs]R_a = \frac{118.08}{\pi} d_r \left[ \omega_s \sin\phi \sin\delta_{\mathrm{sol}} + \cos\phi \cos\delta_{\mathrm{sol}} \sin\omega_s \right]

Incoming solar radiation is estimated as

Rs=KrsRaTmaxTminR_s = K_{\mathrm{rs}} R_a \sqrt{T_{\mathrm{max}} - T_{\mathrm{min}}}

Clear-sky radiation is

Rso=(0.75+2×105z)RaR_{\mathrm{so}} = \left( 0.75 + 2\times10^{-5} z \right) R_a

Net shortwave radiation is

Rns=(1αland)RsR_{\mathrm{ns}} = (1-\alpha_{\mathrm{land}})\,R_s

Net longwave radiation is

Rnl=σ((Tmax+273.16)4+(Tmin+273.16)42)(0.340.14ea)(1.35RsRso0.35)R_{\mathrm{nl}} = \sigma \left( \frac{ (T_{\mathrm{max}}+273.16)^4 + (T_{\mathrm{min}}+273.16)^4 }{2} \right) \left( 0.34 - 0.14\sqrt{e_a} \right) \left( 1.35\frac{R_s}{R_{\mathrm{so}}} - 0.35 \right)

Net radiation is then

Rn=RnsRnlR_n = R_{\mathrm{ns}} - R_{\mathrm{nl}}

The slope of the saturation vapor pressure curve is computed as

Δ=4098[0.6108exp ⁣(17.27TairTair+237.3)](Tair+237.3)2\Delta = \frac{ 4098 \left[ 0.6108\exp\!\left( \frac{17.27\,T_{\mathrm{air}}}{T_{\mathrm{air}}+237.3} \right) \right] }{ (T_{\mathrm{air}}+237.3)^2 }

Atmospheric pressure is estimated as

Patm=101.3(2930.0065z293)5.26P_{\mathrm{atm}} = 101.3 \left( \frac{293 - 0.0065 z}{293} \right)^{5.26}

and the psychrometric constant is

γ=0.665×103Patm\gamma = 0.665 \times 10^{-3} P_{\mathrm{atm}}

where:

  • JJ is day of year [][-]
  • δsol\delta_{\mathrm{sol}} is solar declination [rad][\mathrm{rad}]
  • drd_r is relative Earth–Sun distance [][-]
  • RaR_a is extraterrestrial radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • ωs\omega_s is sunrise hour angle [rad][\mathrm{rad}]
  • ϕ\phi is latitude [rad][\mathrm{rad}]
  • RsR_s is incoming solar radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • KrsK_{\mathrm{rs}} is the empirical radiation coefficient in the Hargreaves-type incoming radiation estimate [][-]
  • RsoR_{\mathrm{so}} is clear-sky solar radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • zz is the terrain elevation [L][\mathrm{L}]
  • RnsR_{\mathrm{ns}} is net shortwave radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • αland\alpha_{\mathrm{land}} is land-surface albedo [][-]
  • RnlR_{\mathrm{nl}} is net longwave radiation [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}]
  • σ\sigma is the Stefan–Boltzmann constant
  • PatmP_{\mathrm{atm}} is atmospheric pressure [P][\mathrm{P}]

These expressions are explicitly implemented in the evapotranspiration routine and evaluated in matrix form over the computational domain.

3.4 Direct evaporation and transpiration forcing

HydroPol2D can also use externally supplied raster fields of evaporation and transpiration. In that configuration, the model bypasses the internal Penman–Monteith calculation and applies prescribed EsurfE_{\mathrm{surf}} and TrT_{\mathrm{r}} fields directly in the hydrologic mass balance.


4. Infiltration

The infiltration module computes the transfer of water from the surface to the vadose zone using a Darcy-based formulation coupled with van Genuchten–Mualem constitutive relationships. The formulation is designed to approximate Richards-type unsaturated flow behavior while maintaining compatibility with the storage-based structure of HydroPol2D.

At each time step, infiltration is controlled by three simultaneous constraints:

  1. the availability of water at the surface,
  2. the hydraulic capacity of the soil,
  3. the remaining storage capacity of the vadose zone.

The final infiltration rate is determined as the minimum among these competing limits.


4.1 Water-table-controlled unsaturated storage

The vertical structure of the soil column is dynamically linked to the groundwater table. The saturated thickness above the base of the soil profile is computed as

zgw=hgw(zsurfDsoil)z_{\mathrm{gw}} = h_{\mathrm{gw}} - \left( z_{\mathrm{surf}} - D_{\mathrm{soil}} \right)

and the depth to the water table below the land surface is

zwt=Dsoilzgwz_{\mathrm{wt}} = D_{\mathrm{soil}} - z_{\mathrm{gw}}

where:

  • hgwh_{\mathrm{gw}} is groundwater head [L][\mathrm{L}]
  • zsurfz_{\mathrm{surf}} is land surface elevation [L][\mathrm{L}]
  • DsoilD_{\mathrm{soil}} is soil depth [L][\mathrm{L}]
  • zwtz_{\mathrm{wt}} is water-table depth below the surface [L][\mathrm{L}]

The maximum storage available in the vadose zone is then defined as

Suz,max=zwt(θsatθi)S_{\mathrm{uz,max}} = z_{\mathrm{wt}} \left( \theta_{\mathrm{sat}} - \theta_{\mathrm{i}} \right)

and the remaining storage capacity is

Suz,rem=max(Suz,maxSuz,0)S_{\mathrm{uz,rem}} = \max\left( S_{\mathrm{uz,max}} - S_{\mathrm{uz}},\,0 \right)

where:

  • Suz,maxS_{\mathrm{uz,max}} is maximum vadose storage [L][\mathrm{L}]
  • SuzS_{\mathrm{uz}} is current vadose storage [L][\mathrm{L}]
  • θi\theta_{\mathrm{i}} is initial/reference water content [][-]
  • θsat\theta_{\mathrm{sat}} is saturated water content [][-]

This formulation ensures that the available storage dynamically responds to groundwater fluctuations. As the water table rises, zwtz_{\mathrm{wt}} decreases and the vadose storage capacity shrinks accordingly.


4.2 Representative water content and effective saturation

The representative volumetric water content in the vadose zone is approximated as

θ=θr+Suzzwt\theta = \theta_{\mathrm{r}} + \frac{S_{\mathrm{uz}}}{z_{\mathrm{wt}}}

subject to

θrθθsat\theta_{\mathrm{r}} \le \theta \le \theta_{\mathrm{sat}}

The effective saturation is then defined as

Se=θθrθsatθrS_{\mathrm{e}} = \frac{ \theta - \theta_{\mathrm{r}} }{ \theta_{\mathrm{sat}} - \theta_{\mathrm{r}} }

where:

  • θ\theta is volumetric water content [][-]
  • θr\theta_{\mathrm{r}} is residual water content [][-]
  • SeS_{\mathrm{e}} is effective saturation [][-]

This effective saturation is used to evaluate both matric suction and hydraulic conductivity.


4.3 Matric pressure head

The matric pressure head is computed using the van Genuchten retention curve:

ψm=1αvg(Se1/m1)1/n\psi_{\mathrm{m}} = -\frac{1}{\alpha_{\mathrm{vg}}} \left( S_{\mathrm{e}}^{-1/m} - 1 \right)^{1/n}

with

m=11nm = 1 - \frac{1}{n}

where:

  • ψm\psi_{\mathrm{m}} is matric pressure head [L][\mathrm{L}]
  • αvg\alpha_{\mathrm{vg}} is inverse air-entry parameter [L1][\mathrm{L}^{-1}]
  • nn is van Genuchten shape parameter [][-]

At near-saturated conditions, the model imposes

ψm=0\psi_{\mathrm{m}} = 0

to prevent numerical instability.


4.4 Unsaturated hydraulic conductivity

The unsaturated hydraulic conductivity is computed as

K(θ)=KsatKrK(\theta) = K_{\mathrm{sat}} K_r

with

Kr=Se[1(1Se1/m)m]2K_r = S_{\mathrm{e}}^{\ell} \left[ 1 - \left(1 - S_{\mathrm{e}}^{1/m}\right)^m \right]^2

where:

  • K(θ)K(\theta) is unsaturated hydraulic conductivity [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • KsatK_{\mathrm{sat}} is saturated hydraulic conductivity [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • \ell is pore-connectivity parameter [][-]

If \ell is not provided, a default value of =0.5\ell = 0.5 is used.


4.5 Darcy-based infiltration capacity

The infiltration capacity represents the maximum flux that can be transmitted into the soil given the current hydraulic state. It is computed as

Icap=K(θ)[min ⁣(hpondψm,Δhmax)Ltop+1]I_{\mathrm{cap}} = K(\theta) \left[ \frac{ \min\!\left( h_{\mathrm{pond}} - \psi_{\mathrm{m}},\, \Delta h_{\mathrm{max}} \right) }{ L_{\mathrm{top}} } + 1 \right]

where:

  • IcapI_{\mathrm{cap}} is infiltration capacity [LT1][\mathrm{L}\,\mathrm{T}^{-1}]
  • hpondh_{\mathrm{pond}} is surface ponding head [L][\mathrm{L}]
  • LtopL_{\mathrm{top}} is near-surface resistance length (default 0.05m\approx 0.05\,\mathrm{m})
  • Δhmax\Delta h_{\mathrm{max}} is maximum driving head difference (typically 1m1\,\mathrm{m})

This formulation accounts for both gravity-driven and capillary-driven infiltration.


4.6 Supply-limited and storage-limited infiltration

The water available for infiltration is determined from the effective surface water depth. When interception is inactive:

deff=dd_{\mathrm{eff}} = d

The corresponding supply-limited infiltration rate is

isup=deffΔthi_{\mathrm{sup}} = \frac{d_{\mathrm{eff}}}{\Delta t_{\mathrm{h}}}

where:

  • deffd_{\mathrm{eff}} is effective ponded water depth [L][\mathrm{L}]
  • Δth\Delta t_{\mathrm{h}} is time step in hours [T][\mathrm{T}]

The storage-limited infiltration rate is

istore=Suz,remΔthi_{\mathrm{store}} = \frac{S_{\mathrm{uz,rem}}}{\Delta t_{\mathrm{h}}}

The actual infiltration rate is then

i=min ⁣(isup,Icap,istore)i = \min\!\left(i_{\mathrm{sup}},\,I_{\mathrm{cap}},\,i_{\mathrm{store}}\right)

Additional constraints are applied:

  • i=0i = 0 over impervious cells
  • i=0i = 0 when zwt0z_{\mathrm{wt}} \le 0

Thus, infiltration is simultaneously supply-limited, capacity-limited, and storage-limited.


4.7 Vadose storage update

The infiltrated depth over the time step is

ΔI=iΔth\Delta I = i\,\Delta t_{\mathrm{h}}

and the vadose storage is updated as

Suznew=Suz+ΔIS_{\mathrm{uz}}^{\,\mathrm{new}} = S_{\mathrm{uz}} + \Delta I

subject to

0SuznewSuz,max0 \le S_{\mathrm{uz}}^{\,\mathrm{new}} \le S_{\mathrm{uz,max}}

where:

  • Suz,maxnewS_{\mathrm{uz,max}}^{\,\mathrm{new}} is the updated maximum vadose-zone storage capacity [L][\mathrm{L}], recomputed at the current time step based on the updated water-table position.

5. Snow Accumulation, Melt, and Sublimation

When snow modeling is active, precipitation is partitioned into rainfall and snowfall, and snowpack evolution is explicitly tracked through snow water equivalent (SWE), density, and depth.


5.1 Rain–snow partitioning

Precipitation is partitioned based on air temperature:

Psnow=PgrossfsnowP_{\mathrm{snow}} = P_{\mathrm{gross}} f_{\mathrm{snow}} Prain=PgrossPsnowP_{\mathrm{rain}} = P_{\mathrm{gross}} - P_{\mathrm{snow}}

where fsnowf_{\mathrm{snow}} is a temperature-dependent snow fraction [][-].


5.2 Snow water equivalent

The evolution of snow water equivalent is

SWEt=SWEt1+PsnowMsnowEs\mathrm{SWE}_t = \mathrm{SWE}_{t-1} + P_{\mathrm{snow}} - M_{\mathrm{snow}} - E_{\mathrm{s}}

where:

  • SWE\mathrm{SWE} is snow water equivalent [L][\mathrm{L}]
  • EsE_{\mathrm{s}} is sublimation [L][\mathrm{L}]

5.3 Snowmelt

Snowmelt is computed as

Msnow=max(DDFTair+(1αsnow)Qnet334,0)M_{\mathrm{snow}} = \max \left( \mathrm{DDF}\,T_{\mathrm{air}} + \frac{(1-\alpha_{\mathrm{snow}})\,Q_{\mathrm{net}}}{334}, 0 \right)

subject to

MsnowSWEtM_{\mathrm{snow}} \le \mathrm{SWE}_t

where:

  • DDF\mathrm{DDF} is degree-day factor [LΘ1T1][\mathrm{L}\,\Theta^{-1}\,\mathrm{T}^{-1}]
  • αsnow\alpha_{\mathrm{snow}} is snow albedo [][-] that can be either assumed as constant or entered as spatial input in the General_Data.xlsx.
  • QnetQ_{\mathrm{net}} is net energy flux available for snowmelt [EL2T1][\mathrm{E}\,\mathrm{L}^{-2}\,\mathrm{T}^{-1}], representing the combined radiative and turbulent energy exchanges at the snow surface.

The current snow parameters must be edited in the function HydroPol2D_Preprocessing.m.


5.4 Snow density and depth

Snow density evolves as

ρsnownew=ρsnowold+ktTair+ksweSWE+kDHsnow\rho_{\mathrm{snow}}^{\,\mathrm{new}} = \rho_{\mathrm{snow}}^{\,\mathrm{old}} + k_t T_{\mathrm{air}} + k_{\mathrm{swe}} \mathrm{SWE} + k_D H_{\mathrm{snow}}

subject to

ρsnowρmax\rho_{\mathrm{snow}} \le \rho_{\mathrm{max}}

Snow depth is

Hsnow=SWEρsnowH_{\mathrm{snow}} = \frac{\mathrm{SWE}}{\rho_{\mathrm{snow}}}

5.5 Sublimation

Es=Ceu(qsqa)SWEE_{\mathrm{s}} = C_e\,u\,(q_s - q_a)\,\mathrm{SWE}

where:

  • CeC_e is sublimation coefficient [][-]
  • uu is wind speed [LT1][\mathrm{L}\,\mathrm{T}^{-1}], taken as the wind speed at 2m2\,\mathrm{m} height.
  • qsq_s is saturation specific humidity at the snow surface [][-]
  • qaq_a is ambient air specific humidity [][-]

5.6 Surface-water update under snow conditions

dt=dp+Msnow+Praind_t = d_p + M_{\mathrm{snow}} + P_{\mathrm{rain}}

otherwise

dt=dp+Peffd_t = d_p + P_{\mathrm{eff}}

where:

  • dtd_t is surface water depth at the current time step [L][\mathrm{L}]
  • dpd_p is surface water depth at the previous time step [L][\mathrm{L}]

6. Vadose Storage, Recharge, and Groundwater Feedback

6.1 Recharge

Recharge is computed dynamically using Darcy's law assuming a representative flow width to reach the aquifer free surface

Rgw=K(θ)(1+ψmLgw)R_{\mathrm{gw}} = K(\theta) \left( 1 + \frac{\psi_{\mathrm{m}}}{L_{\mathrm{gw}}} \right)

with

Lgw=0.5zwtL_{\mathrm{gw}} = 0.5\,z_{\mathrm{wt}}

Therefore, the current version considers half of the depth to the aquifer distance as the representative distance to compute the recharge.


6.2 Storage evolution

By simply computing a reservoir mass balance with a forward explicit Euler numerical scheme, one can obtain:

Suz,t+1=Suz,t+Δt(iRgw)S_{\mathrm{uz},t+1} = S_{\mathrm{uz},t} + \Delta t \left( i - R_{\mathrm{gw}} \right)

where Δt\Delta t is in seconds.


6.3 Mass-consistent recharge

Rgw=iSuz,t+1Suz,tΔtR_{\mathrm{gw}} = i - \frac{ S_{\mathrm{uz},t+1} - S_{\mathrm{uz},t} }{\Delta t}

6.4 Saturation excess

Sexcess=max(SuzSuz,maxnew,0)S_{\mathrm{excess}} = \max \left( S_{\mathrm{uz}} - S_{\mathrm{uz,max}}^{\,\mathrm{new}}, 0 \right)

6.5 Groundwater exfiltration

qexf=max(0,hgwzsurf)SyΔtq_{\mathrm{exf}} = \max \left( 0,\, h_{\mathrm{gw}} - z_{\mathrm{surf}} \right) \frac{S_y}{\Delta t}

where:

  • SyS_y is specific yield [][-]

7. Summary

The hydrologic model in HydroPol2D integrates:

  • canopy interception,
  • Penman–Monteith evapotranspiration,
  • Darcy-based infiltration,
  • snow accumulation and melt,
  • vadose storage and groundwater coupling,

into a unified, mass-consistent framework that resolves vertical water fluxes at the grid-cell scale and provides the hydrologic forcing for the hydrodynamic model.