Skip to content

Land-cover-derived priors for the degree-day melt factor (DDF) #22

Description

@awickert

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

  1. 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.
  2. 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.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriors-from-dataDeriving model parameters/priors from external data (terrain, soil, land cover, remote sensing)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions