A modified version (v2) of the Hysteretic Depressional Storage (HDS) model to simulate prairie fill and spill mechanism.
The original HDS (v1) was based on the equations listed in Ahmed et al. (2023). This version of HDS (v2) is revised based on the equations presented by Clark and Shook (2022), which is cleaner and more robust than the one proposed in HDS (v1).
HDS should be implemented as a module just before the routing module in the model (i.e., after all runoff fluxes have been calculated). By doing so, the modeller ensures that the runoff that is being routed (reaches the river network) is the net runoff (after subtracting the stored water in the depressions).
HDS mainly needs the following information:
- input fluxes/forcing: runoff, precipitation, ET (for pond/depression evaporation) in mm/timestep.
- Subbasin/grid properties: depressions area (m2), depressions volume (m3), and total catchment area (m2)
- Parameters (currently hard coded):
p
(shape of the slope profile [-]),b
(shape of the fractional contributing area curve [-]),tau
(time constant linear reservoir to simulate seepage losses from depressions [days-1]),rCoef
(runoff coefficient [-]).
All these information are required at the sub-basin or grid scale. Please note that the two parameters (tau
and rCoef
) are conceptual, and it is better if not used when coupling HDS with a hydrological model. These parameters were used for comparison purposes against a synthetic test case from Clark and Shook (2022). So, it is better to set their values to zero so that they do not affect the results. If the model has a way to handle seepage losses from water bodies, then that can be passed into the model as input flux, but it would require some modifications in the function input argument.
For the rest of the parameters (p
and b
), please leave their value unchanged as these are the typical values for the Smith Creek Basin.
Please be aware that the following variables are state variables within the code, and it is crucial to ensure their proper maintenance from one time step to another for proper bookkeeping:
variable | description |
---|---|
vMin |
! minimum pond volume below which contributing area is zero [m3] |
pondVol |
! pond volume [m3] |
Changes are sorted from newest to oldest:
- add
depCatchAreaFrac
to the code and calculate the integratedbasinConAreaFrac
- Add a condition to prevent updating vMin if the pond is completely full.
- add other conditions to limit pondVol to depVol (when completely filled) and assign any excess input as outflow.
- Calculate adjusted ET and infiltation for mass balance closure when pond is dry (losses > pondVol)
- add constrains to avoid
pondVol
being greater thandepVol
under extremely wet conditions
- add if statements to prevent negative pondVol values under extremely dry conditions
- produce the outflow as an output timeseries.
- simplify code to combine
runDepression
andrunOnestep
into one subroutinerunDepression
and removerunOnestep
. - Produce the pond area as an output timeseries.
- Remove extra internal variables that are not needed.
- Modify the makefile to activate
release
anddebug
targets. The previous version only usedrelease
by default as the target anddebug
was not activated. - Fix indentation (space -> tab) in
ascii_util.f90
andtype_HDS.f90
.