Provide the engineering inputs needed to derive HEC-HMS parameters for the basin.
Read-only summary of the uploaded DEM. Upload a GeoTIFF (.tif) on the Upload Data tab to populate.
Two global soil rasters are clipped to Malaysia and shipped with the app — no upload required. These feed the Deficit & Constant loss method as fallback or primary inputs depending on what other data is available.
| What it is | USDA Hydrologic Soil Group (HSG) — A/B/C/D classification governing infiltration potential. Combines texture, drainage, depth-to-restrictive-layer per USDA NRCS NEH-630. |
|---|---|
| Source | Ross, C.W., Prihodko, L., Anchang, J., Kumar, S., Ji, W., & Hanan, N.P. (2018). Global Hydrologic Soil Groups (HYSOGs250m) for Curve Number-Based Runoff Modeling. ORNL DAAC, Oak Ridge, Tennessee, USA. |
| DOI |
10.3334/ORNLDAAC/1566
|
| Resolution | 250 m |
| Coverage in this app | Malaysia (clipped to national extent) |
| Native unit | Categorical (integer codes 1–4 for base groups, 11–14 for dual-class soils) |
| Distributor | NASA ORNL DAAC (free; NASA Earthdata Login required for global download) |
| Use in this app | Fallback Constant Rate (CR) estimate for D&C when texture data unavailable; SCS-Curve-Number input. Cross-check on texture-derived HSG when texture data IS available. |
| Code | HSG | Description |
|---|---|---|
| 1 | A | Low runoff potential (>90% sand and <10% clay) |
| 2 | B | Moderately low runoff potential (50–90% sand, 10–20% clay) |
| 3 | C | Moderately high runoff potential (<50% sand, 20–40% clay) |
| 4 | D | High runoff potential (<50% sand, >40% clay) |
| 11 | A/D | High runoff potential unless drained — texture A but shallow water table |
| 12 | B/D | High runoff potential unless drained — texture B but shallow water table |
| 13 | C/D | High runoff potential unless drained — texture C but shallow water table |
| 14 | D/D | High runoff potential always (deeply drained or not) |
Dual-class /D codes: treat as the base letter (A/B/C/D) when artificial drainage is in place; treat as D when undrained. HEC-HMS users typically pick one interpretation per project.
Used when no texture data is available. Per HEC TRM / Saleh et al. (2011) ranges (narrower, conservative) and Cahyono & Adidarma (2019) / Sahu et al. (2023) ranges (wider, sensitivity check).
| HSG | Soil description | CR (mm/hr) — HEC TRM | CR (mm/hr) — Cahyono & Adidarma |
|---|---|---|---|
| A | Deep, well-drained sands/gravels | 7.62–11.43 | >36.1 |
| B | Moderately deep, well-drained (Loam) | 3.81–7.62 | 14.5–36.1 |
| C | Layers impeding drainage (Clay Loam) | 1.27–3.81 | 1.5–14.5 |
| D | High clay, shallow, or high water table | 0–1.27 | <1.5 |
HSG decision tree note: Texture is the primary driver of HSG, but USDA NRCS also factors in (1) depth to impermeable layer / bedrock — if shallow (<50 cm), automatically D regardless of texture; and (2) depth to water table — if shallow, soil gets a /D dual class. Texture-only HSG approximations miss factors (1) and (2); HYSOGs250m runs the full decision tree.
| What it is | Soil depth from the surface to the R horizon (where soil ends and consolidated bedrock begins). In HEC-HMS Deficit & Constant, this is the active soil layer depth Z used in D_init = (θ_sat − θ_init) × Z and D_max = (θ_sat − θ_wp) × Z. |
|---|---|
| Source | Shangguan, W., Hengl, T., Mendes de Jesus, J., Yuan, H., & Dai, Y. (2017). Mapping the global depth to bedrock for land surface modeling. Journal of Advances in Modeling Earth Systems, 9(1), 65–88. |
| DOI |
10.1002/2016MS000686
|
| Resolution | 250 m |
| Coverage in this app | Malaysia (clipped to national extent) |
| Native unit | Centimetres (this app: pre-converted to millimetres before bundling — see app's `data/precomputed/bdricm/bdricm_mm_cog.tif`) |
| Range in this app | 540 mm to 2000 mm (Malaysia clip) |
| Cap interpretation | Pixels at 2000 mm mean ≥ 2 m of soil , not exactly 2 m. Shangguan et al. capped the raster at 200 cm = 2000 mm because prediction uncertainty grows beyond 2 m. For Malaysian lowland sub-basins, expect most cells at the cap. |
| Distributor | ISRIC legacy archive (1.4 GB global GeoTIFF; this app ships a 4.3 MB Malaysia-clipped COG) |
| Note on SoilGrids version | NOT part of SoilGrids v2.0 (Poggio et al. 2021). Lives in the legacy 2017 archive. Often cited as 'SoilGrids250m – Depth to bedrock' (e.g., Moumni et al. 2021); same data either way. |
| Use in this app | Per-sub-basin Z via zonal mean. Feeds D_init and D_max equations directly. Replaces the older convention of a single global Z (RASHMS guidance 300–600 mm) with spatially-varying Z. |
Why pre-bundled? Both rasters are global products that don't change between projects. Clipping once to Malaysia and shipping with the app means engineers can model any Malaysian basin without manually downloading from ORNL DAAC / ISRIC each time. Storage cost: ~5 MB total.
Derive the longest flowpath per sub-basin (fill → D8 pointer → D8 flow accumulation → rasterise basins → longest flowpath). Outputs length, upstream + downstream elevation, and average slope. Polylines render on the Basin Map; results feed Overall Characteristics.
If a flowpath line looks wrong (cuts a ridge, ends at the wrong outlet), select that sub-basin and re-run only it. The new line replaces the existing one.
Derives the centroidal flowpath (outlet → projection of basin centroid onto the longest flowpath) and the 10-85 flowpath (segment between the 10% and 85% length points measured upstream from the outlet). Lengths in km, slopes in m/m. Polylines render on the map as separate layers (green = centroidal, orange = 10-85). Re-running Longest Flowpath clears these results.
BASIN
— basin ID (matches the rasterised basin index)
LENGTH
— longest flow-path length (m)
UP_ELEV
— upstream channel elevation (m)
DN_ELEV
— downstream channel elevation (m)
AVG_SLOPE
— average slope along the flow path (%)
Slope conversion: m/m = % / 100.
Segment of the longest flowpath from the outlet to the point where the basin centroid projects onto it. Used by SCS lag-time and Snyder unit-hydrograph methods.
Segment of the longest flowpath between the 10% and 85% length points measured upstream from the outlet. Slope of this segment feeds USGS regression equations (e.g., Texas, Florida).
Derives the overland (sheet-flow) length and slope per sub-basin by walking each longest flowpath from the upstream end to where it first meets a defined stream channel. The stream channel is recognised wherever the DEM's flow accumulation exceeds the configured threshold. Outputs feed the Kerby and Kerby-Kirpich Tc methods downstream.
Compute area-weighted SCS Curve Number per sub-basin from the engineer's per-class lookup of CN values. Outputs: CN, CN Canonical (Malaysia), Upper CN (ARC III), Lower CN (ARC I).
HSG ADOPTED = engineer-uploaded soil polygons + per-class HSG lookup. HYSOGs250m = bundled Ross et al. (2018) global 250 m raster, clipped to Malaysia (no soil upload needed).
Codes 11=A/D, 12=B/D, 13=C/D, 14=D/D. Drained = base letter. Undrained = collapse all dual codes to D.
One row per unique uploaded LULC class. Pick a Type from the Landuse class dropdown — CN A / B / C / D / Canonical (Malaysia) auto-fill from the CN ADOPTED reference. You can also override any numeric cell directly. Green ✓ = mapped; yellow ⚠ = no mapping (pick a Type or fill the CN cells manually).
One row per unique uploaded soil class. Pick a Type from the Soil class dropdown — the HSG group letter (A/B/C/D) auto-fills from the HSG ADOPTED reference. You can also override the HSG group dropdown directly. Green ✓ = mapped; yellow ⚠ = no mapping.
Weight each landuse × HSG zone by its area within the sub-basin.
CN_j = Σ (CN_i · A_i) / Σ A_i
where i = each landuse × HSG zone inside sub-basin j
CN_i = TR-55 CN at that zone's HSG group
A_i = zone area (km²)
Reference: USDA-NRCS TR-55 (1986), Urban Hydrology for Small Watersheds
S = 25400 / CN − 254 [S in mm] S = 1000 / CN − 10 [S in inches] Initial abstraction: I_a = 0.2 · S (default; calibratable 0.05 S – 0.15 S)
Reference: SCS National Engineering Handbook (NEH), Part 630, Chapter 10.
Adjust the AMC-II (average) CN to dry (ARC I) and wet (ARC III) conditions. Used as the Lower CN / Upper CN sensitivity envelope in the Results table. Hawkins (1985) reciprocal form as adopted in NRCS NEH-630.
Lower CN = CN_I = 4.2 · CN_II / (10 − 0.058 · CN_II) (dry) Upper CN = CN_III = 23 · CN_II / (10 + 0.13 · CN_II) (wet) Check (CN_II = 80): CN_I = 62.7, CN_III = 90.2
USDA categorises soils by minimum infiltration rate:
A: > 0.30 in/hr — sand, loamy sand, sandy loam (low runoff) B: 0.15-0.30 in/hr — silt loam, loam (moderate) C: 0.05-0.15 in/hr — sandy clay loam (high) D: < 0.05 in/hr — clay loam, silty clay, clay (very high)
Reference: USDA-NRCS, National Engineering Handbook, Part 630, Chapter 7 (2007).
Ross, C.W., Prihodko, L., Anchang, J., Kumar, S., Ji, W.,
Hanan, N.P. (2018).
Global Hydrologic Soil Groups
(HYSOGs250m) for Curve Number-Based Runoff Modeling
.
ORNL DAAC, Oak Ridge, TN, USA. DOI:
10.3334/ORNLDAAC/1566
.
Pixel encoding — 1=A, 2=B, 3=C, 4=D, 11=A/D, 12=B/D, 13=C/D, 14=D/D.
33 land-use categories with single AMC-II CN values adopted for Malaysian conditions (HSG-independent). Source: DID Malaysia HP standards + practitioner consensus (From Ruzaimie).
USDA-SCS (1986) TR-55, Urban Hydrology for Small Watersheds, 2nd ed., Tables 2-2a (urban), 2-2b (cultivated agricultural), 2-2c (other agricultural), 2-2d (arid/semiarid rangelands).
Soil texture → HSG group mapping bundled with the app. Source for the auto-fill on the Soil per-class lookup and the 📖 reference modal in the Curve Number User-Defined panel.
Land-use class → CN per HSG (A/B/C/D) + Canonical (Malaysia) column. Source for the auto-fill on the LU per-class lookup and the 📖 reference modal in the Curve Number User-Defined panel.
Compute area-weighted Kerby retardance N per sub-basin. Used by Kerby + Kerby-Kirpich Tc methods on the Tc/Tp tab. Pick a canonical Kerby surface for each uploaded LULC class — N cascades from the bundled Kerby 1959 / Roussel 2005 table.
One row per unique uploaded LULC class. Pick a canonical surface from the dropdown (6 options); the N value cascades from the bundled table. Engineer can override the N cell directly (per Kerby 1959 — don't interpolate between rows, but deliberate override IS allowed). Green ✓ = mapped; yellow ⚠ = no mapping (pick a surface or set N manually).
Kerby 1959 / Roussel et al. 2005. Don't interpolate N — pick the row matching the surface. Override individual rows in the per-class table if needed.
| Surface | N | Source |
|---|---|---|
| Pavement | 0.02 | Kerby 1959 / Roussel 2005 |
| Smooth bare packed soil | 0.10 | Kerby 1959 |
| Poor grass, cultivated row crops, moderately rough packed surfaces | 0.20 | Kerby 1959 |
| Average grass / pasture | 0.40 | Kerby 1959 |
| Deciduous forest | 0.60 | Kerby 1959 |
| Dense grass, coniferous forest, or deciduous forest with deep litter | 0.80 | Kerby 1959 |
Weight each LULC zone by its area within the sub-basin.
N_j = Σ (N_i · A_i) / Σ A_i
where i = each LULC zone inside sub-basin j
N_i = Kerby N at that zone's canonical surface
A_i = zone area (km²)
Three different empirical methods, three different parameter conventions for surface retardance. Kerby N (this tab) uses 0.02-0.80; Manning's n (overland) uses 0.011-0.80 but lower for smooth surfaces; Izzard Cr uses 0.007-0.060. Not interchangeable. Never substitute one for another.
Compute area-weighted Rational Runoff Coefficient C per sub-basin. Used by FAA Tc method + Rational Q = C·i·A peak flow (HP 5 workflow). Pick a canonical HEC-22 cover type for each uploaded LULC class — C cascades from the midpoint of the HEC-22 Table 3-1 published range.
One row per unique uploaded LULC class. Pick a HEC-22 cover from the dropdown (19 options); the C value cascades from the midpoint of the published range. Engineer can override the C cell directly (e.g. to bias toward the higher end of the range for steeply sloped areas / longer return periods, per the HEC-22 footnote).
FHWA HEC-22 (3rd ed., 2009) Urban Drainage Design Manual, Chapter 3, Table 3-1. Verified against original publication. The C column is the midpoint of the published range, used as the dropdown cascade default; engineer can override per row.
HEC-22 footnote: "Higher values are usually appropriate for steeply sloped areas and longer return periods because infiltration and other losses have a proportionally smaller effect on runoff in these cases."
| Type of Drainage Area | C min | C max | C (midpoint) |
|---|---|---|---|
| Business — Downtown | 0.70 | 0.95 | 0.83 |
| Business — Neighborhood | 0.50 | 0.70 | 0.60 |
| Residential — Single-family | 0.30 | 0.50 | 0.40 |
| Residential — Multi-units, detached | 0.40 | 0.60 | 0.50 |
| Residential — Multi-units, attached | 0.60 | 0.75 | 0.68 |
| Residential — Suburban | 0.25 | 0.40 | 0.33 |
| Residential — Apartment dwelling | 0.50 | 0.70 | 0.60 |
| Industrial — Light | 0.50 | 0.80 | 0.65 |
| Industrial — Heavy | 0.60 | 0.90 | 0.75 |
| Parks, cemeteries | 0.10 | 0.25 | 0.18 |
| Playgrounds | 0.20 | 0.40 | 0.30 |
| Railroad yard | 0.20 | 0.40 | 0.30 |
| Unimproved areas | 0.10 | 0.30 | 0.20 |
| Lawns (avg, combined sandy/heavy soil, 2-7% slope) | 0.10 | 0.22 | 0.16 |
| Streets — Asphaltic | 0.70 | 0.95 | 0.83 |
| Streets — Concrete | 0.80 | 0.95 | 0.88 |
| Streets — Brick | 0.70 | 0.85 | 0.78 |
| Drives and walks | 0.75 | 0.85 | 0.80 |
| Roofs | 0.75 | 0.95 | 0.85 |
Lawns row collapses HEC-22's original 6 sub-rows (Sandy × {flat, avg, steep} + Heavy × {flat, avg, steep}) into a single "average slope" entry — soil texture × slope info isn't carried per-polygon in typical LULC shapefiles, so the finer breakdown adds no actionable granularity. Range shown is the average-slope band of Sandy + Heavy combined.
Weight each LULC zone by its area within the sub-basin (standard Rational compound-coefficient method).
C_j = Σ (C_i · A_i) / Σ A_i
where i = each LULC zone inside sub-basin j
C_i = HEC-22 Rational C at that zone's cover type
A_i = zone area (km²)
Rational C (this tab) is a dimensionless runoff fraction (0-1). Curve Number (CN tab) is the SCS retention parameter with a different physical basis. Kerby N (separate tab) is a surface retardance coefficient. Not interchangeable. Each feeds its own family of Tc / loss methods.
https://www.fhwa.dot.gov/engineering/hydraulics/pubs/10009/
Compute total impervious percentage per sub-basin. Tick the LULC class values from your uploaded shapefile that are impervious. The app sums their area within each sub-basin and divides by sub-basin area. Used by HEC-HMS as the "Percent Impervious" sub-basin input (every Loss Method treats impervious area as 100% runoff bypassing infiltration).
First load: auto-ticked by a regex heuristic (Pavement / Built / Commercial / Industrial / Water bodies). Review + adjust manually below. Map preview "Impervious preview" on the Basin Map highlights what's selected in red — toggle it on to sanity-check.
The HEC-HMS subbasin element editor has a "Percent Impervious" field — one value per sub-basin, range 0-100. This field is applied by EVERY Loss Method (SCS-CN, Deficit & Constant, Initial & Constant, Green & Ampt): the impervious fraction of the sub-basin generates 100% runoff bypassing the loss method's infiltration calculation. The remaining (pervious) fraction is routed through the loss method normally.
Reference: HEC-HMS Technical Reference Manual, Loss chapter; HEC-HMS User's Manual, Subbasin Elements section.
Impervious_j (%) = 100 · Σ(A_i · I_i) / Σ A_i
where i = each LULC zone inside sub-basin j
I_i = 1 if class is ticked, 0 otherwise
A_i = zone area (km²)
On first load (no engineer selection yet) the following case-insensitive regex patterns are pre-ticked against uploaded class names. Engineer reviews + adjusts.
pavement | paved | asphalt | concrete
street | road | highway | drive | walk
railway | rail-road | train | transport | airport | runway
roof | building.roof
built | urban | downtown | business | commercial
industrial | factory | warehouse
high-rise | apartment | condo | flat
infrastructure | utility
water | river | lake | pond | reservoir | sea | ocean | aquaculture | waterbody
— water surface = 100% runoff per Rational Method convention
Default behaviour can over-simplify mixed-use classes like "Residential" (which is genuinely ~35% paved in dense suburbs). Override per-row in the Results table if your basin has substantial mixed-use LULC.
Toggle the "Impervious preview" layer on the Basin Map to see the LULC polygons currently ticked as impervious — they render in red. Useful for catching obviously-wrong selections (e.g. a forest class wrongly auto-ticked because its name happens to contain "road").
Compute Time of Concentration per sub-basin. Tick any subset of the 10 methods, pick one as Primary (feeds Overall Characteristics), assign flowpaths per method as needed. Methods auto-pull L / Lc / S / A / CN / N / C from upstream Basin Characteristics tabs.
Best-for / avoid-when guidance for each method, sourced from 43 peer-reviewed references.
All three lines below describe the SAME slope. Worked example: rise = 10 m over run = 1000 m → 1% = 0.01 m/m = 10 m/km .
Each method's regression coefficient assumes a specific S unit. Pick the matching slope dropdown flavour in the equation card; the % vs m/m vs m/km mismatches produce 10×–1000× Tc errors silently.
Where the Tc you compute here plugs into the Transform tab.
R/(R+Tc)
≈ 0.5–0.7 typical.
Compute Lag Time per sub-basin. Tick any subset of 6 methods, pick one as Primary. Methods 1, 6, 7 (SCS Lag, Roussel, McCuen) consume Tc — by default the Primary Tc from the Tc tab; override per method via dropdown.
Best-for / avoid-when guidance for each Lag method, sourced from peer-reviewed literature.
Methods that output
lag directly
(HP 11, Carter, Eagleson, McCuen as L_H, Roussel as T_L)
must be entered as-is into HEC-HMS Lag fields. Applying
× 0.6
on top of an already-lag value
underestimates lag by 40%
— the single most common entry error.
Compute Thiessen-weighted areal rainfall for every sub-basin in the uploaded basin shapefile, then dedup identical series so each HEC-HMS sub-basin can reference a single gauge per unique rainfall input.
Thiessen (Voronoi) weighting of rainfall stations, clipped to the selected sub-basin. Hover a polygon to see that station's areal weight (%) inside this sub-basin.
Hourly areal rainfall per sub-basin. Pick sub-basin(s) + year range, click Plot.
Per-sub-basin-per-year % missing of the areal-rainfall series (whole-year hourly basis). Missing here means EVERY contributing station was NA at that hour.
Sub-basins whose Thiessen-weighted rainfall is bit-identical share a single canonical "Areal RF ID". Engineer imports only the M unique series into HEC-HMS, then assigns each sub-basin to its paired RF ID.
Sub-basins grouped by canonical Areal RF ID. Hover any row to highlight all sub-basins in that group on the basin map (gold fill). Move cursor off the row to clear the highlight.
End-to-end flow from raw gauge data to per-sub-basin areal rainfall:
Voronoi tessellation over the union of all rainfall
stations divides the plane into cells — every point
belongs to its nearest station. Each cell is then clipped
to the target sub-basin polygon
C
via spatial intersection. The static weight for station
i
within sub-basin
C
is:
Aᵢ
= planimetric area of station
i
's clipped Voronoi cell inside
C
(m²)
Σⱼ Aⱼ
= total catchment area (sum of all clipped cells
inside
C
)
C
have wᵢ = 0 (they don't contribute)
If a station
i
is missing at timestep
t
(no report), naïvely summing
Σᵢ wᵢ · Pᵢ(t)
collapses the result to NA. The pipeline avoids this by
renormalizing the weights at every timestep
over the subset of stations actually reporting:
valid(t) = { i : Pi(t) != NA }
if |valid(t)| = 0: P(t) = NA
else: w'_i(t) = w_i / sum_{j in valid(t)} w_j
P(t) = sum_{i in valid(t)} w'_i(t) * Pi(t)
t
, Σ w′ᵢ(t) over the valid set = 1.0
t
areal_ts
— wide hourly table:
DateTime
+ one column per sub-basin (mm/hr).
Stored as
subar_results()$areal_ts
.
Sub-basins entirely inside one Voronoi cell produce bit-identical time series. Importing duplicates into HMS is wasted work. This tab groups them:
<canonical_basin_id>_RF
where
canonical_basin_id
is the first sub-basin in
shapefile row order
within the group
Single-sub-basin groups appear normally (their series is unique). All-NA groups exist when every contributing station is NA across the record — surfaced like any other group.
Delineate the upstream catchment of every uploaded streamflow station and its longest flowpath, using the DEM already uploaded on the Uploaded Data tab (fill → D8 flow direction → flow accumulation → extract streams → snap stations → watershed → longest flowpath). After Run, click a station on the map to highlight its catchment + longest flowpath in cyan (click again to clear).
Sub-basins are assigned by the rule chosen in User Defined. Outlet / Centroid are incremental — each sub-basin goes to its nearest downstream gauge only (1:1). Cumulative lists every sub-basin draining to a gauge, so downstream gauges include all upstream sub-basins. Upload a sub-basin shapefile + set the Basin ID column to populate this.
Steps 1-4 are station-independent — computed once off the DEM and reused for every station.
Catchment Area (km²)
— planimetric area of the delineated upstream catchment.
Basin Slope (m/m)
— area-weighted mean of tan(slope) over the catchment
(terra::terrain, 8-neighbour Horn). Identical method to
Basin Slope under Overall Characteristics.
Longest Flowpath Length (km)
— longest channel path from catchment divide to the gauge.
Longest Flowpath Slope (m/m)
— average slope along that path.
Reference pipeline: Catchment Delineation App (Code 2.R).
Thiessen (Voronoi) weighting of rainfall stations, clipped to the selected catchment. Hover a polygon to see that station's areal weight (%).
Catchments come from Catchment & Stream Delineation; rainfall stations + series from the Uploaded Data → Rainfall tab.
Cumulative discharge volume (Q × 3600 s) vs cumulative areal rainfall volume (Thiessen depth × catchment area), accumulated over timestamps where both report. Dashed line = linear fit; its slope ≈ the long-run runoff coefficient. A straight curve = a stable rainfall-runoff relationship; a break in slope flags a catchment change (land use, rating-curve / gauge shift).
Rainfall volume (m³)
= areal rainfall (mm) × catchment area (km²) × 1000
(1 mm over 1 km² = 1000 m³).
Discharge volume (m³)
= discharge (m³/s) × 3600 s (hourly).
Slope
of the lm fit ≈ long-run runoff coefficient
(m³ runoff per m³ rainfall).
Interpretation — straight line: stable relationship; break in slope: land-use change / deforestation / dam / rating-curve or gauge shift; bowing up: wetter / saturation building; bowing down: drying / increasing abstraction.
Rainfall source is the Thiessen areal series (Areal Rainfall tab).
Click a row in the table to zoom the map to that Streamflow station. Override the Water Level station per row via the dropdown (already-picked WL stations are removed from other rows). Re-clicking "Pair" with a new radius clears manual overrides — you will be asked to confirm.
LOWESS
— local-polynomial smoother. Span =
f
in stats::lowess() (fraction of points used per fit).
Smoothing spline
— natural cubic spline. Span =
spar
in stats::smooth.spline() (0 = interpolating, 1 = very
smooth).
Years with fewer than 5 paired points show scatter only, no fit line.
Configure inputs, then click Run to compute Maximum Surface Storage per sub-basin via the Bennett (1998) / Fleming & Neary (2004) slope-based lookup, with a paved-class override from the uploaded LULC.
Vegetated values per 4 slope bands (B.3 locked table). Paved values are uniform scalars across all slopes (roughness-driven, engineer-editable via UI; defaults below).
| Slope class | Veg min (mm) | Veg central (mm) | Veg max (mm) | Source |
|---|---|---|---|---|
| Flat (0–1%) | 7.6 | 10.15 | 12.7 | Bennett 1998 flat micro-relief |
| Mild (1–5%) | 5.1 | 6.35 | 7.6 | Fleming & Neary 2004 mild slope |
| Moderate (5–10%) | 2.5 | 3.8 | 5.1 | Fleming & Neary 2004 |
| Steep (>10%) | 1 | 1.75 | 2.5 | Fleming & Neary 2004 steep |
| Min (mm) | Central (mm) | Max (mm) | Source |
|---|---|---|---|
| 3.2 | 4.8 | 6.4 | Ahbari et al. (2017) paved impervious depression storage |
| Parameter | Min | Max | Source |
|---|---|---|---|
| Max Surface Storage (mm) | 0.001 | 1500 | HEC-HMS Technical Reference Manual |
| Parameter | Min | Max | Min source | Max source |
|---|---|---|---|---|
| Max Surface Storage (mm) | 6.4 | 50 | Babu & Kumar (2024) | Sahu & Vidyarthi (2025) |
Implementation notes:
Studies using this approach
Citations
Configure per-class Kc and Max Canopy Storage values, then click Run to compute area-weighted Simple Canopy parameters per sub-basin (Allen 1998 FAO-56, Nistor 2018, Holberg 2014).
Seasonal Kc derived from Allen et al. (1998) FAO-56. For tropical evergreen catchments (Malaysia), use Kc_mid as a single year-round constant.
| CLC | Class | Kc_ini | Kc_mid | Kc_end | Kc_cold | Section |
|---|---|---|---|---|---|---|
| 111 | Continuous urban fabric | 0.2 | 0.4 | 0.25 | — | Urban / built-up |
| 112 | Discontinuous urban fabric | 0.1 | 0.3 | 0.2 | — | Urban / built-up |
| 121 | Industrial / commercial units | 0.2 | 0.4 | 0.3 | — | Urban / built-up |
| 122 | Road / rail networks | 0.15 | 0.35 | 0.25 | — | Urban / built-up |
| 123 | Port areas | 0.3 | 0.5 | 0.4 | — | Urban / built-up |
| 124 | Airports | 0.2 | 0.4 | 0.3 | — | Urban / built-up |
| 131 | Mineral extraction sites | 0.16 | 0.36 | 0.26 | — | Urban / built-up |
| 132 | Dump sites | 0.16 | 0.36 | 0.26 | — | Urban / built-up |
| 133 | Construction sites | 0.16 | 0.36 | 0.26 | — | Urban / built-up |
| 141 | Green urban areas | 0.12 | 0.32 | 0.22 | — | Urban / built-up |
| 142 | Sport and leisure facilities | 0.1 | 0.3 | 0.2 | — | Urban / built-up |
| 211 | Non-irrigated arable land | 1.1 | 1.35 | 1.25 | — | Agricultural / cropland |
| 212 | Permanently irrigated land | 1.2 | 1.45 | 1.35 | — | Agricultural / cropland |
| 213 | Rice fields | 1.05 | 1.2 | 0.6 | — | Agricultural / cropland |
| 221 | Vineyards | 0.3 | 0.7 | 0.45 | — | Agricultural / cropland |
| 222 | Fruit trees and berry plantations | 0.3 | 1.05 | 0.5 | — | Agricultural / cropland |
| 223 | Olive groves | 0.65 | 0.7 | 0.65 | 0.5 | Agricultural / cropland |
| 231 | Pastures | 0.4 | 0.9 | 0.8 | — | Agricultural / cropland |
| 241 | Annual + permanent crops | 0.5 | 0.8 | 0.7 | — | Agricultural / cropland |
| 242 | Complex cultivation patterns | 1.1 | 1.35 | 1.25 | — | Agricultural / cropland |
| 243 | Mixed agriculture / natural vegetation | 0.7 | 1.15 | 1 | — | Agricultural / cropland |
| 244 | Agro-forestry areas | 0.9 | 1.1 | 1.05 | 0.3 | Agricultural / cropland |
| 311 | Broad-leaved forest | 1.3 | 1.6 | 1.5 | 0.6 | Forest / semi-natural |
| 312 | Coniferous forest | 1 | 1 | 1 | 1 | Forest / semi-natural |
| 313 | Mixed forest | 1.2 | 1.5 | 1.3 | 0.8 | Forest / semi-natural |
| 321 | Natural grasslands | 0.3 | 1.15 | 1.1 | — | Forest / semi-natural |
| 322 | Moors and heathland | 0.8 | 1 | 0.95 | — | Forest / semi-natural |
| 323 | Sclerophyllous vegetation | 0.25 | 0.9 | 0.8 | — | Forest / semi-natural |
| 324 | Transitional woodland-shrub | 0.8 | 1 | 0.95 | — | Forest / semi-natural |
| 331 | Beaches, dunes, sands | 0.2 | 0.3 | 0.25 | — | Bare / disturbed |
| 332 | Bare rocks | 0.15 | 0.2 | 0.05 | — | Bare / disturbed |
| 333 | Sparsely vegetated areas | 0.4 | 0.6 | 0.5 | — | Bare / disturbed |
| 334 | Burnt area | 0.1 | 0.15 | 0.05 | — | Bare / disturbed |
| 335 | Glaciers and perpetual snow | 0.48 | 0.52 | 0.52 | 0.48 | Bare / disturbed |
| 411 | Inland marshes | 0.15 | 0.45 | 0.8 | — | Wetlands / water |
| 412 | Peat bogs | 0.1 | 0.4 | 0.75 | — | Wetlands / water |
| 421 | Salt marshes | 0.1 | 0.3 | 0.7 | — | Wetlands / water |
| 422 | Salines | 0.1 | 0.15 | 0.05 | — | Wetlands / water |
| 423 | Intertidal flats | 0.3 | 0.7 | 1.3 | — | Wetlands / water |
| 511 | Water courses | 0.25 | 0.65 | 1.25 | — | Wetlands / water |
| 512 | Water bodies | 0.25 | 0.65 | 1.25 | — | Wetlands / water |
| 521 | Coastal lagoons | 0.3 | 0.7 | 1.3 | — | Wetlands / water |
| 522 | Estuaries | 0.25 | 0.65 | 1.25 | — | Wetlands / water |
| 523 | Sea and ocean | 0.4 | 0.8 | 1.4 | — | Wetlands / water |
Range values: low = windy condition, high = still air.
| Vegetation | mm low | mm high | Source |
|---|---|---|---|
| General Vegetation (species unknown) | 1.27 | 1.27 | Holberg (2014) |
| Grasses and Deciduous Trees | 2.032 | 2.032 | Holberg (2014) |
| Trees and Coniferous Trees | 2.54 | 2.54 | Holberg (2014) |
| Argyrodendron peralatum (Rainforest) | 6.8 | 8.3 | Herwitz (1985) |
| Dysoxylum pettigrewianum (Rainforest) | 3.2 | 4.7 | Herwitz (1985) |
| Toona australis (Rainforest) | 3.4 | 4 | Herwitz (1985) |
| Castanospermum australe (Rainforest) | 2 | 2.8 | Herwitz (1985) |
| Picea sitchensis (Sitka Spruce) | 0.75 | 1.2 | Gash (1979) |
| Pinus sylvestris (Scots Pine) | 1.16 | 2.65 | Llorens & Gallart (2000) |
| Pseudotsuga menziesii (Douglas Fir) | 1.2 | 3.3 | Rutter et al. (1971); Link et al. (2004) |
| Robinia pseudoacacia growing (Black Locust) | 1.3 | 1.3 | Ma et al. (2020) |
| Robinia pseudoacacia leafless (Black Locust) | 0.2 | 0.2 | Ma et al. (2020) |
| Quercus suber (Oak Tree) | 2 | 2 | Xiao et al. (2000) |
| Ficus benjamina L. (Weeping Fig) | 1 | 2.03 | Véliz-Chávez et al. (2014) |
| Artemisia ordosica (Shrub) | 2.2 | 2.2 | Zhang et al. (2015) |
| Potentilla fruticosa (Shrub) | 1.13 | 1.13 | Zhang et al. (2018) |
| Pyrus calleryana (Pear Tree) | 1 | 1 | Xiao et al. (2000) |
| Caragana korshinskii (Shrub) | 0.63 | 0.73 | Hu et al. (2022) |
| Hippophae rhamnoides (Shrub) | 0.59 | 0.76 | Hu et al. (2022) |
| Scindapsus Aureus | 0.2 | 0.8 | Syahida & Azida (2018) |
| Forest type | mm low | mm high |
|---|---|---|
| Broadleaf forest | 1 | 2 |
| Coniferous forest | 2 | 5 |
| Mixed | 1.5 | 3.5 |
Three locked source-tables drive the min/max bracket columns on the Results sub-tab. Engineer picks one via the radio on the User Defined sub-tab. Central column is unchanged.
| LULC class | Kc min | Kc max | Source |
|---|---|---|---|
| Forest (broadleaf evergreen) | 1 | 1.6 | Nistor 2018 / FAO-56 evergreen forest |
| Mixed / secondary forest | 0.95 | 1.5 | Nistor 2018 / FAO-56 mixed forest |
| Oil palm | 0.95 | 1 | FAO-56 Table 12 Palm Trees |
| Rubber | 0.95 | 1 | FAO-56 Table 12 Rubber Trees |
| Coconut | 0.9 | 1 | FAO-56 Table 12 Palm Trees (shorter) |
| Paddy rice | 1.05 | 1.2 | FAO-56 Table 12 rice |
| Other crops | 0.3 | 1.15 | FAO-56 cereals (maize, wheat) |
| Grass / pasture | 0.4 | 0.95 | FAO-56 grazing / alfalfa hay |
| Shrubs / herbaceous | 0.5 | 1 | Nistor 2018 natural / semi-natural |
| Residential / urban / kampung | 0.2 | 0.5 | Nistor 2018 continuous urban fabric |
| Commercial / industrial | 0.1 | 0.3 | Nistor 2018 industrial / commercial |
| Paved / road / bridge | 0.05 | 0.2 | Nistor 2018 paved / impervious |
| Bare ground / sand / rock | 0.1 | 0.3 | FAO-56 dry surface / Nistor 2018 rock-sand |
| Open water / wetland | 1.05 | 1.2 | FAO-56 shallow water / Nistor 2018 reed |
| Mangrove / paya bakau | 1 | 1.3 | Krauss 2003 / FAO-56 reed swamp (salt-suppressed) |
| LULC class | mm min | mm max | Source |
|---|---|---|---|
| Forest (broadleaf evergreen) | 1.5 | 8 | Herwitz 1985 tropical rainforest (incl. bark storage) |
| Mixed / secondary forest | 1 | 4 | Ma 2020 deciduous plantation |
| Oil palm | 0.8 | 3.5 | Forested-model class (lower than dense natural forest) |
| Rubber | 0.8 | 3.5 | Forested-model class |
| Coconut | 0.8 | 3.5 | Forested-model class (palm) |
| Paddy rice | 0.3 | 2 | Ahbari 2017 small-grains average |
| Other crops | 0.3 | 2 | Ahbari 2017 small-grains average |
| Grass / pasture | 0.3 | 1.5 | Ahbari 2017 / Sahu 2025 grasses |
| Shrubs / herbaceous | 0.5 | 2.5 | Hu 2022 Loess Plateau shrubs / xerophytic |
| Residential / urban / kampung | 0.2 | 1 | Chavez 2014 isolated urban trees (mixed w/ impervious) |
| Commercial / industrial | 0 | 0.3 | Mostly impervious; residual veg only |
| Paved / road / bridge | 0 | 0.1 | Almost zero transpiration; pavement residual |
| Bare ground / sand / rock | 0 | 0.2 | Bare soil residual; no canopy |
| Open water / wetland | 0 | 0.5 | Open water + sparse reeds (Holberg 2014) |
| Mangrove / paya bakau | 1.5 | 8 | Herwitz 1985 mangrove-equiv broadleaf evergreen |
| Parameter | Min | Max | Source |
|---|---|---|---|
| Kc | 0.01 | 1.5 | HEC-HMS Technical Reference Manual |
| Max Canopy Storage (mm) | 0.001 | 1500 | HEC-HMS Technical Reference Manual |
| Parameter | Min | Max | Min source | Max source |
|---|---|---|---|---|
| Kc | 0.3 | 1 | HEC Tutorial (Single Water Year) | Sahu & Vidyarthi (2025) |
| Max Canopy Storage (mm) | 0.42571 | 25 | Madhushankha & Wijesekera (2021) | Herath & Wijesekera (2021) |
Studies using these references
Citations
Configure the four D&C loss parameters per sub-basin: Initial Deficit, Maximum Deficit, Constant Rate, and Directly Connected Impervious Area. Pick a mode + sources, edit the per-class mapping DTs, and click Run.
One row per unique value in the Soil Type column. Pick the
USDA texture class that best matches each local soil name.
Pre-filled by string-match heuristic; defaults to
Loam
when no match. Order = textural-triangle:
Sand → … → Clay.
RASHMS guidance: 300–600 mm. Z is the single largest source of uncertainty in physics-based D&C parameter estimates — calibration adjusts Z, not measurement.
CR ≈ K_sat × scale. Calibrate downward to 0.3–1.0 × K_sat to match observed runoff peaks.
Per-LULC-class connected impervious fraction (0–1). Pre-filled by string-match heuristic + paved classes from the Surface tab. Edit any cell directly, or use the 📖 button to pick a TR-55 + connectivity reference value.
Visual primer for the D&C loss method: how the 4 parameters relate, how the deficit evolves over time, and where the soil moisture references ( θsat , θfc , θwp , θr ) sit in the soil column.
Three-stage water budget: canopy interception → surface depression storage → soil infiltration / percolation. Each method tab parametrises one stage.
How D_init drains, how D_max caps the deficit, and when excess rainfall converts to runoff (deficit = 0).
Volumetric water-content fractions ( θsat , θfc , θwp , θr ) and the D_init / D_max formulations available in this tab. Maps directly onto the radio choices for Soil moisture data sources and D_max formula .
Soil moisture parameters from Rawls, Brakensiek & Saxton (1982); K_sat from Rawls, Brakensiek & Miller (1983) — Green-Ampt parameters. Always use Rawls 1983 for Constant Rate , not 1982 (1982 values are ~2× higher).
| Texture Class | θsat | θfc | θwp | θr | ne | K_sat 1982 (mm/hr) | K_sat 1983 (mm/hr) |
|---|---|---|---|---|---|---|---|
| Sand | 0.437 | 0.091 | 0.033 | 0.02 | 0.417 | 210.1 | 117.9 |
| Loamy Sand | 0.437 | 0.125 | 0.055 | 0.035 | 0.401 | 61.2 | 30 |
| Sandy Loam | 0.453 | 0.207 | 0.095 | 0.041 | 0.412 | 25.9 | 10.9 |
| Loam | 0.463 | 0.27 | 0.117 | 0.027 | 0.434 | 13.2 | 3.3 |
| Silt Loam | 0.501 | 0.33 | 0.133 | 0.015 | 0.486 | 6.9 | 6.6 |
| Sandy Clay Loam | 0.398 | 0.255 | 0.148 | 0.068 | 0.33 | 4.3 | 1.5 |
| Clay Loam | 0.464 | 0.318 | 0.197 | 0.075 | 0.39 | 2.3 | 1 |
| Silty Clay Loam | 0.471 | 0.366 | 0.208 | 0.04 | 0.432 | 1.5 | 1 |
| Sandy Clay | 0.43 | 0.339 | 0.239 | 0.109 | 0.321 | 1.3 | 0.5 |
| Silty Clay | 0.479 | 0.387 | 0.25 | 0.056 | 0.423 | 1 | 0.5 |
| Clay | 0.475 | 0.396 | 0.272 | 0.09 | 0.385 | 0.5 | 0.3 |
Note: Silt class is not in Rawls 1982 — when picked with this source, the app silently falls back to Silt Loam values.
Updated dataset + organic matter effect; better fit for organic-rich soils. Includes Silt class (12 classes total).
| Texture Class | θsat | θfc | θwp | K_sat (mm/hr) |
|---|---|---|---|---|
| Sand | 0.46 | 0.1 | 0.05 | 108.1 |
| Loamy Sand | 0.46 | 0.12 | 0.05 | 96.7 |
| Sandy Loam | 0.45 | 0.18 | 0.08 | 50.3 |
| Loam | 0.46 | 0.28 | 0.14 | 15.5 |
| Silt Loam | 0.48 | 0.31 | 0.11 | 16.1 |
| Silt | 0.48 | 0.3 | 0.06 | 22 |
| Sandy Clay Loam | 0.43 | 0.27 | 0.17 | 11.3 |
| Clay Loam | 0.48 | 0.36 | 0.22 | 4.3 |
| Silty Clay Loam | 0.51 | 0.38 | 0.22 | 5.7 |
| Sandy Clay | 0.44 | 0.36 | 0.25 | 1.4 |
| Silty Clay | 0.52 | 0.41 | 0.27 | 3.7 |
| Clay | 0.5 | 0.42 | 0.3 | 1.1 |
Different framework (van Genuchten model fitting). Provides θr directly. Use for sensitivity / Monte Carlo analysis. Note: does NOT publish θfc or θwp — picking this source for those is blocked.
| Texture Class | θsat | θr | K_sat (mm/hr) |
|---|---|---|---|
| Sand | 0.43 | 0.045 | 297 |
| Loamy Sand | 0.41 | 0.057 | 145.9 |
| Sandy Loam | 0.41 | 0.065 | 44.2 |
| Loam | 0.43 | 0.078 | 10.4 |
| Silt Loam | 0.45 | 0.067 | 4.5 |
| Silt | 0.46 | 0.034 | 2.5 |
| Sandy Clay Loam | 0.39 | 0.1 | 13.1 |
| Clay Loam | 0.41 | 0.095 | 2.6 |
| Silty Clay Loam | 0.43 | 0.089 | 0.7 |
| Sandy Clay | 0.38 | 0.1 | 1.2 |
| Silty Clay | 0.36 | 0.07 | 0.2 |
| Clay | 0.38 | 0.068 | 2 |
Used when texture data is unavailable. Two range sources: HEC TRM / Saleh et al. (2011) is narrower and conservative; Cahyono & Adidarma (2019) / Sahu et al. (2023) is wider for sensitivity check.
| HSG | Description | CR HEC TRM low | CR HEC TRM high | CR Cahyono low | CR Cahyono high |
|---|---|---|---|---|---|
| A | Deep, well-drained sands/gravels; low runoff potential | 7.62 | 11.43 | 36.1 | — |
| B | Moderately deep, well-drained; moderate infiltration | 3.81 | 7.62 | 14.5 | 36.1 |
| C | Layers impeding drainage; slow infiltration | 1.27 | 3.81 | 1.5 | 14.5 |
| D | High clay, shallow, or high water table; very slow | 0 | 1.27 | 0 | 1.5 |
Used as guidance when filling the per-LULC-class connected impervious fraction. Note: TR-55 % impervious is NOT the same as DCIA — multiply by a connectivity factor (0–1) to get the DCIA fraction.
| LULC class | % impervious |
|---|---|
| Open space / parks (good condition) | 0 |
| Residential 1 acre lots | 20 |
| Residential 1/2 acre lots | 25 |
| Residential 1/4 acre lots | 38 |
| Residential 1/8 acre lots (apartments) | 65 |
| Commercial / business | 85 |
| Industrial | 72 |
| Roads / streets / parking lots (paved) | 100 |
| Antecedent condition | θ_init | D_init result |
|---|---|---|
| During / just after saturating rain | θ_sat | 0 mm |
| ≥3 days after saturating rain | θ_fc | (θ_sat − θ_fc) × Z |
| End of dry season | θ_wp | (θ_sat − θ_wp) × Z = D_max (Option 1) |
| Extended drought | θ_r | (θ_sat − θ_r) × Z = D_max (Option 2) |
| Option | Formula | Source | Rationale |
|---|---|---|---|
| 1 (default) | (θ_sat − θ_wp) × Z | HEC-HMS tutorial; Sahu & Vidyarthi (2025) | Simple Canopy ET stops at θ_wp; nothing further dries the soil |
| 2 | (θ_sat − θ_r) × Z = n_e × Z | HEC TRM; RASHMS | Uses physical minimum (θ_r); more calibration headroom |
| 3 | θ_sat × Z | Ahbari et al. (2018) | Absolute upper bound; treats entire pore space as recoverable storage |
Always: Option 1 ≤ Option 2 ≤ Option 3 (because θ_r < θ_wp < θ_sat).
Three locked source-tables drive the min/max bracket columns on the Results sub-tab for Max Deficit (B.4) and Constant Rate (B.5). Engineer picks one via the radio on the User Defined sub-tab; the same radio drives Canopy and Surface tabs too. Initial Deficit and DCIA are not bracketed (D_init is a state variable, DCIA is GIS-derived).
( θsat − θwp ) × Z, Z ∈ [300, 1500] mm. θsat and θwp spread across Rawls 1982 + Saxton 2006.
| USDA texture | D_max min (mm) | D_max max (mm) | Source |
|---|---|---|---|
| Sand | 120 | 615 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Loamy Sand | 115 | 615 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Sandy Loam | 107 | 555 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Loam | 96 | 519 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Silt Loam | 111 | 555 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Silt | 126 | 630 | Saxton 2006 (Silt only); Z 300–1500 mm |
| Sandy Clay Loam | 75 | 390 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Clay Loam | 78 | 401 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Silty Clay Loam | 79 | 435 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Sandy Clay | 57 | 287 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Silty Clay | 69 | 375 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
| Clay | 60 | 305 | Rawls 1982 + Saxton 2006 spread, Z 300–1500 mm |
Max = Carsel & Parrish 1988 mean K_sat. Min = 0.3 × Rawls 1983 estimate (calibration reduction factor).
| USDA texture | CR min (mm/hr) | CR max (mm/hr) | Source |
|---|---|---|---|
| Sand | 32 | 297 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Loamy Sand | 9 | 146 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Sandy Loam | 3.3 | 50 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Loam | 1 | 16 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Silt Loam | 1.4 | 22 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Silt | 0.8 | 22 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Sandy Clay Loam | 0.5 | 13 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Clay Loam | 0.3 | 4.3 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Silty Clay Loam | 0.2 | 5.7 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Sandy Clay | 0.2 | 1.4 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Silty Clay | 0.1 | 3.7 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Clay | 0.1 | 2 | Max = Carsel & Parrish 1988 K_sat mean; Min = 0.3 × Rawls 1983 |
| Parameter | Min | Max | Source |
|---|---|---|---|
| Max Deficit (mm) | 0.001 | 1000 | HEC-HMS Technical Reference Manual |
| Constant Rate (mm/hr) | 0.001 | 300 | HEC-HMS Technical Reference Manual |
| Parameter | Min | Max | Min source | Max source |
|---|---|---|---|---|
| Max Deficit (mm) | 42.9 | 525.98 | Pudasaini et al. (2024) | Sahu & Vidyarthi (2025) |
| Constant Rate (mm/hr) | 0.01 | 6 | Kafle (2019) | Kherde et al. (2024) |
Compute the 12 monthly baseflow values per sub-basin via the
HP 11 (DID Malaysia 2018) regional power-law
Q_B = a · A^b
. Engineer picks the region; the
app pulls each sub-basin's area from the uploaded basin
shapefile and applies the matching coefficients. The same
Q_B is assigned to all 12 months (first-cut continuous
simulation per HP 11).
Q_B [m^3/s] = a · A^b for sub-basin area A in km^2. Coefficients were fit by DID Malaysia on hundreds of national gauges through 2017; three regional sets cover Peninsular Malaysia, Sabah, and Sarawak.
| Region | a | b | Equation |
|---|---|---|---|
| Peninsular Malaysia | 0.11 | 0.8589 | Q_B = 0.11 · A^0.8589 |
| Sabah | 0.0783 | 0.8653 | Q_B = 0.0783 · A^0.8653 |
| Sarawak | 0.0111 | 1.1682 | Q_B = 0.0111 · A^1.1682 |
Per HP 11, Q_B is the average pre-storm baseflow sampled across flood events with dry-to-moderately-wet antecedent conditions. It is an event-design baseline , not the calendar-year mean baseflow. Applying the same Q_B to all 12 months is a first-cut continuous-simulation approximation — a last-resort fallback — defensible only for IDF / dam-safety studies where baseflow < 1% of peak. For genuine continuous simulation, prefer gauge- derived 12-month separation (planned Mode 2).
sf::st_area
(reprojected to EPSG:6933 equal-area when needed).
Constant Monthly accepts absolute flow values only (m^3/s in SI, cfs in US Customary) — there is no Discharge per Area input. HMS auto-converts between unit systems if the Basin Model unit system is later changed.
When the basin has loaded streamflow gauges (Catchment & Stream Delineation completed), Mode 2 derives the 12 monthly Q_B per sub-basin from the actual gauge record instead of HP 11 alone. The pipeline runs per-station: for each loaded gauge, hourly Q → daily mean → baseflow separation → 12 monthly means at the gauge. Each sub-basin then borrows its donor gauge's monthly values, scaled by the Modified DAR equation.
Transfer equation:
Q_B,i,m = Q_B,donor,m · (A_i / A_donor)^φ
.
φ is the HP 11 regional exponent (engineer picks region once).
Per DID Malaysia HP 11, HP 11 is applied as the SCALING
exponent (preserving the gauge's seasonal climatology) rather
than as the direct magnitude (which would produce a flat 12-month value).
Each sub-basin gets a donor gauge based on the gauged-catchment membership table (from Catchment & Stream Delineation):
Engineer can override the donor per sub-basin in the Results DT's Donor column.
Per donor gauge, per month, the ratio of (Σ sub-basin Q_B / gauge Q_B) is reported. With the HP 11 exponent ≠ 1, this ratio is NOT 1 by design — small headwater sub-basins yield more per km² than the integrated gauge catchment. Per HEC-HMS Technical Reference, the Constant Monthly method does NOT enforce mass conservation; this report is informational only.
Configure Recession baseflow parameters per sub-basin:
Q₀
(initial discharge),
k
(recession constant), and
Threshold
. Model:
Q_t = Q₀ · kᵗ
.
Multi-sub-basin first-cut defaults: HP 11 power-law for Q₀,
k = 0.95 (humid-tropical GW), Ratio-to-Peak = 0.1.
Q_t = Q₀ · kᵗ
(linear exponential decay). HEC-HMS Recession is linear-only;
nonlinear storage-discharge (Aksoy & Wittenberg 2011) is a
separate 'Nonlinear Boussinesq' HMS method.
| Symbol | Meaning | Unit (SI) |
|---|---|---|
| Q0 | Initial discharge at start of recession | m³/s (or (m³/s)/km²) |
| k | Recession constant; Q₀/Q₁ ratio per day | dimensionless, 0 < k < 1 |
| Threshold | Flow at which the recession turns on | Ratio-to-Peak (0–1) OR Discharge (m³/s) |
Used to derive Q₀ per sub-basin. Same equation set as the Constant Monthly tab's HP 11 reference; here it fits the event-design baseflow Q₀ role more cleanly than the Constant Monthly use case (HP 11 — event-design baseline).
| Region | a | b | Equation (Q₀ in m³/s, A in km²) |
|---|---|---|---|
| Peninsular Malaysia | 0.11 | 0.8589 | Q₀ = 0.11 · A^0.8589 |
| Sabah | 0.0783 | 0.8653 | Q₀ = 0.0783 · A^0.8653 |
| Sarawak | 0.0111 | 1.1682 | Q₀ = 0.0111 · A^1.1682 |
| Flow component | k (daily) | Notes |
|---|---|---|
| Groundwater | 0.93 – 0.995 | Slow decay; humid tropical typically 0.95+ |
| Interflow | 0.70 – 0.94 | Shallow subsurface, intermediate decay |
| Surface runoff | 0.30 – 0.80 | Rapid decay; rarely modelled with Recession |
| Study | Catchment | Q₀ | k | Threshold (type) |
|---|---|---|---|---|
| Hong et al. (2020) | Sg Melaka, Malaysia | 1.62 m³/s | 0.97 | 0.1 (Ratio) |
| Azli & Abdullah (2025) | Bandar Segamat, Malaysia | 0.5 m³/s | 0.5 | 50 m³/s (Discharge) |
| Gunathilake et al. (2020) | Seethawaka River, Sri Lanka | 12–30 m³/s | 0.60 | 0.01 (Ratio) |
| Nandalal & Ratnayake (2010) | Ellegawa, Sri Lanka | 65.0 m³/s | 0.90 | 0.05 (Ratio) |
| USACE Tutorial | Mahoning Creek, USA | 1.0 cfs/mi² | 0.6 | 0.4 (Ratio) |
Configure Linear Reservoir baseflow per sub-basin. Each layer = an independent linear reservoir in PARALLEL; loss-method infiltration splits via Fraction. K is the storage time constant.
K_GWn = multiplier x R
;
R = ratio * Tc / (1 - ratio)
Seeds Min/Max columns in the Results table for all GW layers. Per-row overrides in the Results DT persist until a global changes here (nuclear reset).
dS/dt = I - O
;
S = K * O
=> outflow = storage / K => mass conserved (HEC Tech Ref).
Layers are in PARALLEL (Fractions split infiltration) ; Steps within a layer are in SERIES (cascade of reservoirs).
| Symbol | Meaning | Unit (SI) |
|---|---|---|
| K | Storage coefficient per layer | hours |
| Fraction | Share of loss-method infiltration to layer | dimensionless [0,1] |
| Steps | Linear reservoirs in series within a layer | integer >= 1 |
| Initial | Initial discharge in layer at t = 0 | m^3/s or (m^3/s)/km^2 |
| R | Clark Storage Coefficient (transform method) | hours |
| Tc | Time of concentration | hours (from Tc tab / 60) |
R = ratio * Tc / (1 - ratio)
;
K_GWn = mult_n * R
| Ratio R/(Tc+R) | Catchment type |
|---|---|
| 0.65 | HEC canonical default (natural rural) |
| 0.7 | Flat and marshy |
| 0.2-0.35 | Natural basin with significant slope |
| 0.1 | Urbanised / steep |
Effect of storage coefficient K on the baseflow recession.
Effect of the GW2 storage coefficient on the baseflow shape.
| Layer | Models | Response | Typical K (hr) - Holberg 2015 Indiana proxy |
|---|---|---|---|
| GW1 | Interflow / shallow subsurface | Fastest | ~48-72 (range 34-85) |
| GW2 | Baseflow / shallow groundwater | Medium | ~250-500 (range 324-547) |
| GW3 | Deep groundwater | Slowest | > 1000 (extrapolated) |
| Region | a | b | Equation (Q0 m^3/s, A km^2) |
|---|---|---|---|
| Peninsular Malaysia | 0.11 | 0.8589 | Q0 = 0.11 * A^0.8589 |
| Sabah | 0.0783 | 0.8653 | Q0 = 0.0783 * A^0.8653 |
| Sarawak | 0.0111 | 1.1682 | Q0 = 0.0111 * A^1.1682 |
Effect of Initial Discharge on the hydrograph rising limb / pre-event baseflow.
Effect of Fraction on the partitioned baseflow volume.
Effect of Steps (number of reservoirs in series within a layer) on the hydrograph timing/shape.
| n_layers | GW1 | GW2 | GW3 | Sum | Implication |
|---|---|---|---|---|---|
| 1 | 0.8 | - | - | 0.8 | 0.2 deep recharge |
| 2 | 0.5 | 0.5 | - | 1.0 | No deep recharge (humid-tropical canonical) |
| 3 | 0.4 | 0.4 | 0.2 | 1.0 | No deep recharge |
| Param | GW1 (interflow) | GW2 (baseflow) | GW3 (deep, optional) | Basis |
|---|---|---|---|---|
| Initial Discharge | 0 | Q0,i / A_i (HP 11 Sabah per-area) | 0 (only if GW3 used) | HEC canonical |
| Fraction | 0.5 | 0.5 | 0 (or 0.2 if 3-layer) | HEC canonical humid-tropical |
| K (hours) | ~48-72 (3*R) | ~250-500 (10*R) | > 1000 (20*R extrapolation) | HEC Clark-multiplier rule |
| Steps | 1 | 1 | 1 | HEC functional minimum |
SCS dimensionless unit hydrograph. Pick Peak Rate Factor (Graph Type) and Lag source; per-row overrides are editable in the Results tab.
Clark unit hydrograph. Tc + R (Storage Coefficient). Method + Time-Area locked to Standard / Default per project scope.
Snyder synthetic unit hydrograph. Standard Lag (tp) + peaking coefficient Cp. HP 11 regional defaults pre-loaded.
Reach polylines have a digitized direction (first vertex -> last vertex). Downstream tabs assume upstream -> downstream. The app auto-detects via DEM elevation at the two endpoints; toggle any row that looks wrong on the map, then click Update Directions to commit + clear cross section results so they can be re-run with the corrected orientation.
Channel Manning's n method + per-reach Shape assignment. Pick Canonical Lookup for category-based ranges or Schneider Additive to build n from bed material + irregularity + obstructions + vegetation + meander. Default = Canonical Lookup, Natural main channel, Clean straight no pools.
Transect placement + 8-point extraction. Default station = reach midpoint, default length = 200 m, default sample count = 100 along the transect. Engineer can drag the station point on the Reach Map (unlock first), then click Run to regenerate only the moved transects.
Pair each reach with a surveyed cross section. Run becomes active once a reach shapefile, DEM, and at least one surveyed XS are loaded. Edits made here do NOT change the original data under the Surveyed Cross Section tab.
Left and Right overbank Manning's n per reach. Default = Canonical Lookup, Floodplain / overbank, Dense grass / turf. Pick Schneider Additive to build n from component tables. Left and Right are picked independently - cover often differs side-to-side.
Mapping of Reach ID -> Cross Section ID + Left/Right Manning's n + Invert. Cross Section column is editable via dropdown; engineer can reuse one cross-section for multiple reaches when geometry is similar.
Per-reach Diameter (m) + Invert (m). Visible whenever any reach is assigned the Circle shape on the User Defined tab.
Per-reach Width (m) + Invert (m). Visible whenever any reach is assigned the Rectangular shape on the User Defined tab.
Per-reach Bottom Width (m) + Side Slope + Invert (m). Visible whenever any reach is assigned the Trapezoidal shape on the User Defined tab.
Combined per-reach result table - pulls Channel Manning's n from User Defined, Shape from User Defined, Cross Section ID from Eight Point Summary, Length and Slope from reach geometry. Initial Type = Discharge = Inflow, Space-Time = Auto DX Auto DT, Index Celerity defaults to 1.5 m/s (engineer can edit).
Source: Chow (1959), Barnes (1967), Arcement & Schneider (1989), EM 1110-2-1417. Use Barnes plates or Schneider Additive build-up to pin a defended single value within a range.
| Category | Description | n min | n max | Source |
|---|---|---|---|---|
| Natural main channel | Clean, straight, no pools | 0.025 | 0.033 | Chow 1959; Barnes 1967 |
| Natural main channel | Winding, some pools, clean | 0.033 | 0.045 | Chow 1959; Barnes 1967 |
| Natural main channel | Weedy, deep pools, some brush | 0.05 | 0.08 | Chow 1959; Arcement & Schneider 1989 |
| Natural main channel | Very weedy, heavy brush/timber | 0.075 | 0.15 | Chow 1959; Arcement & Schneider 1989 |
| Constructed / lined | Finished concrete | 0.011 | 0.015 | Chow 1959 |
| Constructed / lined | Unfinished concrete | 0.014 | 0.02 | Chow 1959 |
| Constructed / lined | Gravel / clean earth | 0.022 | 0.03 | Chow 1959 |
| Constructed / lined | Asphalt | 0.013 | 0.016 | Chow 1959; EM 1110-2-1417 |
Pick Left and Right overbank independently. Floodplain n is typically an order of magnitude above channel n; vegetation (n4) dominates.
| Category | Description | n min | n max | Source |
|---|---|---|---|---|
| Floodplain / overbank | Pasture, short grass | 0.03 | 0.05 | Chow 1959; Arcement & Schneider 1989 |
| Floodplain / overbank | Dense grass / turf | 0.1 | 0.48 | EM 1110-2-1417 (Tbl 7-1) |
| Floodplain / overbank | Scattered brush, dense shrubs | 0.05 | 0.15 | Arcement & Schneider 1989 |
| Floodplain / overbank | Heavy timber, dense underbrush | 0.1 | 0.2 | Arcement & Schneider 1989 |
Channel formula: n = (nb + n1 + n2 + n3 + n4) × m. Overbank formula drops n2 (no XS variation) and m (no sinuosity overland): n = nb + n1 + n3 + n4. Source: Arcement & Schneider (1989) USGS WSP 2339, Cowan (1956).
| Category | Description | Value |
|---|---|---|
| Soil (firm) | Firm soil bed | 0.02 |
| Rock cut | Bedrock cut channel | 0.025 |
| Gravel (soft/fine) | Fine gravel substrate | 0.024 |
| Gravel (rough/coarse) | Coarse / cobble gravel substrate | 0.028 |
| Category | Description | Value |
|---|---|---|
| Smooth | No bank surface irregularity | 0 |
| Minor | Slight bank irregularity | 0.005 |
| Moderate | Moderate bank irregularity (eroded, sloughed) | 0.01 |
| Severe | Severe bank irregularity (badly sloughed, jagged) | 0.02 |
| Category | Description | Value |
|---|---|---|
| Gradual | Cross-section size gradual | 0 |
| Occasional | Occasional XS shape change | 0.005 |
| Frequent (alternating) | Frequent alternating XS shape (vault range 0.010-0.015, midpoint used) | 0.0125 |
| Category | Description | Value |
|---|---|---|
| Negligible | No notable obstructions | 0 |
| Minor | Minor (some debris, occasional boulders) | 0.0125 |
| Appreciable | Appreciable (notable debris jam, boulders, piers) | 0.025 |
| Severe | Severe (heavy jam, buildings, large boulders) | 0.05 |
| Category | Description | Value |
|---|---|---|
| Low | Sparse vegetation (low) | 0.0075 |
| Medium | Moderate weeds / scattered brush | 0.0175 |
| High | Heavy grass / dense brush | 0.0375 |
| Very high | Dense brush + small trees / submerged willows | 0.075 |
| Category | Description | Value |
|---|---|---|
| Minor sinuosity (1.0-1.2) | Sinuosity ratio between 1.0 and 1.2 | 1 |
| Appreciable sinuosity (1.2-1.5) | Sinuosity ratio between 1.2 and 1.5 | 1.15 |
| Severe sinuosity (>1.5) | Sinuosity ratio greater than 1.5 | 1.3 |
Citations
Upload one or more Excel workbooks. Each sheet is treated as a single chainage cross section. Sheets named Sheet1 and empty sheets are skipped. Pick the EPSG of the surveyed Easting/Northing. Click any row below to plot that chainage's surveyed cross section overlaid with the DEM cross section extracted at the same Easting/Northing points.
Use the polyline tool on the Reach Map (left panel) to draw any line. The app samples the uploaded DEM along that line and renders an elevation profile here. Hover the plot to see the linked point on the map. Clear button wipes the drawn line.