modules_QuintonDrift (05/02/16)

CRHM Borland

Qdrift

This module defined in Classqdrift calculates the amount of runoff that originates from melting of deep snow drifts on hummock-covered hillslopes in the Arctic tundra. CRHM compatible. Basic module uses the observation p. Variation #1 uses the variable hru_p from the module obs.

Observations

  • p (mm/int) - precipitation. Assumed to be rainfall. Basic module.

Variables

  • SWE (mm) - mean water equivalent of snowcover.
  • driftmelt (m3/int) - volume of snowmelt released by the drift in the time step.
  • driftmeltD (m3) - daily snow melt from drift.
  • cumdriftmelt (m3) - cumulative snow melt from drift.

Parameters

  • Type () - HRU land type, 0=NOTUSED/1=DRIFT/2=HUMMOCK. Not used in Variation#1.
  • length (m) - length of HRU.
  • DrainTo () - the Hummock HRU drained to, 0=NOWHERE or HRU# (1 to MAXHRU).
  • InitSWE (mm) - initial mean snow water equivalent.  Assumes drift has a triangular distribution in depth (x-section) oriented normal to creek. All exposed area occurs on the down slope edge.
  • meltLag (hours) - lag inserted into driftmelt.
  • meltstorage (days) - storage inserted into driftmelt.
  • catchadjust () - precipitation calibration.

Variable Inputs

  • Qm (MJ/m2/int) - snowmelt from module Qmelt.
  • hru_p (mm/int) - precipitation. Variation#1.

Notes

    The snow is assumed to be distributed over the length of the HRU as a triangular distribution.  The altitude of the triangle is twice the initial average snow water equivalent and the base the length of the HRU.  As the snow melts, the triangle keeps the same proportions with all the melt occurring normal to the valley bottom,  i.e. as the SWE depth decreases the snow covered base decreases in proportion.

    To avoid round off errors the change in SWE is handled as follows:   Note that the dimension of length (l) of the drift HRU is in the units.

float lastcumdriftmelt = cumdriftmelt[hh]; // following avoids round off error

cumdriftmelt[hh] = length[hh]*InitSWE[hh]*(1.0 - sqr(SWE[hh]/InitSWE[hh])); // (m3*1E3)

driftmelt[hh] = (cumdriftmelt[hh] - lastcumdriftmelt)/1E3; // (m3/Interval)