Motivation
DDF (PDD_melt_factor) is weakly identifiable from discharge alone. Profiling it on a Crow Wing frozen-ground / two-layer-land model, the multi-decade objective is essentially flat across DDF ≈ 1.5–3.5 mm/°C/day (varies < 0.012 in mean KGE_logKGE over 8 decades); the calibrator's reported value (3.34) wasn't even the 1-D optimum — holding the other parameters, ~2.0 scored marginally better. So the hydrograph doesn't pin the melt factor; the optimizer just drifts in a flat direction.
But DDF is physically governed by land cover, chiefly canopy: forested surfaces have markedly lower degree-day factors (canopy intercepts shortwave and suppresses melt) than open / alpine ones. Typical literature ranges (verify against e.g. Hock 2003, J. Hydrol., temperature-index melt review): forest ~2–4, open / clearing ~4–6, snow on alpine / glacier ~5–8 mm/°C/day. Crow Wing is heavily forested north-woods, and the data's preference for a low DDF (~2) is consistent with that — i.e. the value the hydrograph can't pin is exactly the one land cover can inform.
This is squarely MNiShed's parsimony aim (maximum use of basic field data, minimum free parameters): constrain DDF from a measurable surface property instead of fitting it from a flat objective. It is the same "data-derived prior factory" theme as the GRASS-fluvial-profiler recession-from-geometry / contributing-area priors — land cover (NDVI / canopy fraction / LAI from remote sensing, NLCD, etc.) is another ancillary input that constrains a parameter the discharge cannot.
Proposed machinery
ddf_from_landcover() helper — map a land-cover descriptor to a DDF prior (central value + uncertainty, or [lower, upper]). Accept either:
- a class-fraction breakdown (forest / open / water / …), area-weighted to a basin or sub-catchment DDF via a per-class lookup; or
- a continuous canopy proxy (canopy fraction / LAI / NDVI) through a published DDF-vs-canopy relationship.
- Per-sub-catchment DDF. MNiShed already gives each land sub-catchment its own
Snowpack but shares a single global melt_factor. Allowing a per-sub-catchment DDF would let a land-cover prior act zone-by-zone (e.g. forested headwaters lower, more-open lower basin higher) — more physical, and it uses infrastructure that already exists.
- Feed into calibration, lightest touch first:
- tighten bounds / set an informative initial around the land-cover value;
- optionally fix DDF where canopy is well-characterized;
- optionally a Gaussian-prior penalty on the objective (deviation from the land-cover DDF) for a soft constraint.
Scope
The enabling pieces (the helper + a per-zone DDF hook) can land now; ingestion of specific land-cover products (NDVI / NLCD / canopy rasters) can follow when the data is available. Acceptance: given a land-cover breakdown, produce a DDF prior that, applied as bounds or penalty, reproduces literature DDF ranges and tightens the otherwise-flat DDF dimension. This could live alongside the GFP terrain-prior factory as a shared "priors from ancillary data" module.
🤖 Generated with Claude Code
Motivation
DDF (
PDD_melt_factor) is weakly identifiable from discharge alone. Profiling it on a Crow Wing frozen-ground / two-layer-land model, the multi-decade objective is essentially flat across DDF ≈ 1.5–3.5 mm/°C/day (varies < 0.012 in mean KGE_logKGE over 8 decades); the calibrator's reported value (3.34) wasn't even the 1-D optimum — holding the other parameters, ~2.0 scored marginally better. So the hydrograph doesn't pin the melt factor; the optimizer just drifts in a flat direction.But DDF is physically governed by land cover, chiefly canopy: forested surfaces have markedly lower degree-day factors (canopy intercepts shortwave and suppresses melt) than open / alpine ones. Typical literature ranges (verify against e.g. Hock 2003, J. Hydrol., temperature-index melt review): forest ~2–4, open / clearing ~4–6, snow on alpine / glacier ~5–8 mm/°C/day. Crow Wing is heavily forested north-woods, and the data's preference for a low DDF (~2) is consistent with that — i.e. the value the hydrograph can't pin is exactly the one land cover can inform.
This is squarely MNiShed's parsimony aim (maximum use of basic field data, minimum free parameters): constrain DDF from a measurable surface property instead of fitting it from a flat objective. It is the same "data-derived prior factory" theme as the GRASS-fluvial-profiler recession-from-geometry / contributing-area priors — land cover (NDVI / canopy fraction / LAI from remote sensing, NLCD, etc.) is another ancillary input that constrains a parameter the discharge cannot.
Proposed machinery
ddf_from_landcover()helper — map a land-cover descriptor to a DDF prior (central value + uncertainty, or[lower, upper]). Accept either:Snowpackbut shares a single globalmelt_factor. Allowing a per-sub-catchment DDF would let a land-cover prior act zone-by-zone (e.g. forested headwaters lower, more-open lower basin higher) — more physical, and it uses infrastructure that already exists.Scope
The enabling pieces (the helper + a per-zone DDF hook) can land now; ingestion of specific land-cover products (NDVI / NLCD / canopy rasters) can follow when the data is available. Acceptance: given a land-cover breakdown, produce a DDF prior that, applied as bounds or penalty, reproduces literature DDF ranges and tightens the otherwise-flat DDF dimension. This could live alongside the GFP terrain-prior factory as a shared "priors from ancillary data" module.
🤖 Generated with Claude Code