modules_snobalCRHM (09/29/10)

CRHM Borland

snobalCRHM

This module is defined in ClasssnobalCRHM.

snobal is an interactive point model using the energy balance to calculate snowmelt, and to predict runoff, from input data on snow properties, measurement heights & depths, and energy exchanges. Similar to the approach used by Anderson (1976), and Morris (1982), but designed to run on simpler, more generalizable inputs. The model was first presented by Marks (1988), described conceptually by Marks, et. al (1992) and Marks and Dozier (1992), and then described in great detail by Marks, et. al (1997).

The model approximates the snow cover as being composed of two layers, a surface fixed-thickness active layer and a lower layer, solving for the temperature (C) and specific mass (kg/m^2) or mass per unit area (from density * depth (kg/m^3 * m)) for each, and computing total snowcover temperature and specific mass from these.

Melt is computed in either layer when the accumulated energy exceeds the "cold content" or when the "cold content" is > 0.0. Cold content is the energy required to bring the snow cover temperature up to freezing (0 C). Runoff is estimated when the accumulated melt and liquid H2O content exceed a specified threshold.

Trouble with the routine "hle1" iterative solution not converging. After ITMAX iterations an attempt is made to solve using a simplified stability function.   This is tested by constraining the sensible heat to < 600 (W/m^2) and the latent heat to > -300. If either is outside the range,  both are set to zero.  The simple stability function can be selected instead of the iterative solution with the parameter "M_O_iter".

The simple stability function is Ustar2 ta/(kgza(ta-ts), where k = 0.41, g = 9.81 m/s2, za is the instrument height and ta and ts are the air and surface temperatures respectively.

If the snowfall is less than 1 (kg/m^2/s),  it is immediately melted.  This amount is accumulated and printed in the log screen as "melt_direct_cum".

To minimise the amount of snowfall immediately being melted because it was less then the 1 mm threshold, the parameter option "ppt_daily_distrib" was added to the module "obs" to dump all of the daily snowfall into the first interval of the day instead of distributing it evenly over the day.

Observations

  • Qsi (W/m^2) - incoming solar radiation
  • Qli (W/m^2) - incoming longwave (thermal) radiation.

Variables

  • layer_count () - number of layers in snowcover.
  • isothermal () - melting: 0/1
  • snowcover () - snow on ground at start of current timestep: 0/1
  • R_n (W/m^2) - net allwave radiation.
  • H (W/m^2) - sensible heat transfer.
  • L_v_E (W/m^2) - latent heat transfer.
  • G (W/m^2) - heat transfer by conduction & diffusion from soil to snowcover.
  • M (W/m^2) - advected heat from precip.
  • delta_Q (W/m^2) - change in snowcover's energy.
  • G_0 (W/m^2) - transfer by conduction & diffusion from soil or lower layer to active layer.
  • delta_Q_0 (W/m^2) - change in active layer's energy.
  • cc_s (J/m^2) - snowcover's cold content.
  • cc_s_0 (J/m^2) - active layer cold content.
  • cc_s_l (J/m^2) - lower layer cold content.
  • E_s_int (kg/m^2*int) - mass of evap into air & soil from snowcover.
  • E_int (kg/m^2*int) - mass flux by evap into air from active layer.
  • melt_int (kg/m^2*int) - specific melt (kg/m^2 or mm.
  • snowmelt_int (kg/m^2*int) - snow melt at bottom of pack.
  • snowmeltD 9mm/d) - daily snow melt at bottom of pack.
  • cumsnowmelt (mm) - cumulative snow melt at bottom of pack.
  • z_s (m) - total snowcover thickness.
  • z_s_0 (m) - active layer depth.
  • z_s_l (m) - lower layer depth.
  • rho (kg/m^3) - average snowcover density.
  • SWE (kg/m^2) - snowcover's specific mass.
  • m_s_0 (kg/m^2) - active layer specific mass.
  • m_s_l (kg/m^2) - lower layer specific mass.
  • T_s (°C) - average snowcover temp.
  • T_s_0 (°C) - active layer temp.
  • T_s _l (°C) - lower layer temp.
  • h2o_sat () -  % of liquid H2O saturation (relative water).
  • h2o_vol () - liquid h2o content as volume ratio: V_water/(V_snow - V_ice).
  • h2o_max (kg/m^2) - max liquid h2o content as specific mass.
  • z_snow (m) - depth of snow in precip.
  • h2o_sat_snow () - snowfall's % of liquid H2O saturation.
  • precip_now () - precipitation in current timestep - 0/1.
  • T_rain (°C) - temperature of rain.
  • T_rain (°C) - temperature of snowfall.

Parameters

  • relative_hts () -  measurements heights, z_T and z_u, are relative to snow - 0/1.
  • z_g (m) - depth of soil temperature measurement.
  • hru_T_g (°C) - assume constant temperature at depth z_g during melt.
  • z_u (m) - height of wind measurement.
  • z_T (m) - height of air temperature & vapour pressure measurements.
  • z_0 (m) - roughness length.
  • max_z_s_0 (m) -maximum active layer thickness.
  • max_h2o_vol () - max liquid h2o content as volume ratio: V_water/(V_snow - V_ice).
  • basin_area (km^2) - basin area.
  • hru area (km^2) - HRU area.
  • hru_elev (m) - altitude.
  • M_O_iter () - Monin-Obukhov stability fuction. 0/1 - simplified/ original iterated solution.
  • hru_rho_snow (kg/m^3) - density of snowfall.
  • rain_soil_snow () - 0 - handle only snow (infiltration routine handles rain), 1 - handle snow and rain (rain is added to the snowpack)..

Variable Inputs

  • albedo () - snow surface albedo.
  • hru_t (°C) - air temperature at height z_T.
  • hru_ea (kPa) - vapour pressure at height z_T.
  • hru_u (m/s) - wind speed at height z_u.
  • hru_T_pp(°C) - precipitation temperature - assumed to be the air temperature.
  • net_p (mm/int) - net precipitation below canopy.
  • net_rain (mm/int) - net rain below canopy.
  • net_snow (mm/int) - net snow below canopy.
  • hru_drift (mm/int) - specific mass of drifting snow.
  • hru_subl(mm/int) - specific mass of drifting snow.

Notes


NAME

g_soil - conduction heat flow between snow and soil

SYNOPSIS

double g_soil(
     double  rho,    /* snow layer's density (kg/m^3)             */
     double  tsno,   /* snow layer's temperature (K)              */
     double  tg,     /* soil temperature (K)                      */
     double  ds,     /* snow layer's thickness (m)                */
     double  dg,     /* dpeth of soil temperature measurement (m) */
     double  pa)     /* air pressure (Pa)                         */

 

DESCRIPTION

g_soil calculates the heat flow between a snow layer and the soil accounting for both conduction and vapor transport. See pages 45 - 47 in the reference below.

RETURN VALUE

heat transfer between soil and snow (J/m^2)

HISTORY

Aug 1984
written by D. Marks, CSL (GSFC), UCSB;
May 1995
Converted from QDIPS to IPW by J. Domingo, OSU

SEE ALSO

Anderson 1976


NAME

g_snow - conduction heat flow between two snow layers

SYNOPSIS

double g_snow(
     double  rho1,  /* upper snow layer's density (kg/m^3)  */
     double  rho2,  /* lower  "     "        "    (kg/m^3)  */
     double  ts1,   /* upper snow layer's temperature (K)   */
     double  ts2,   /* lower  "     "         "       (K)   */
     double  ds1,   /* upper snow layer's thickness (m)     */
     double  ds2,   /* lower  "     "         "     (m)     */
     double  pa)    /* air pressure (Pa)                    */

 

DESCRIPTION

g_snow calculates the heat flow between two snow layers for both conduction and vapor transport. See pages 46 and 47 of the reference below.

RETURN VALUE

heat transfer between snow layers (J/m^2)

HISTORY

Aug 1986
written by D. Marks, CSL, UCSB;
May 1995
Converted to IPW by J. Domingo, OSU

SEE ALSO

Anderson 1976


NAME

hle1 - sensible and latent heat from data at 1 height

SYNOPSIS

int hle1(
      double   press,   /* air pressure (Pa)   		        */
      double   ta,      /* air temperature (K) at height za     */
      double   ts,      /* surface temperature (K)   	        */
      double   za,      /* height of air temp measurement (m)   */
      double   ea,      /* vapor pressure (Pa) at height zq     */
      double   es,      /* vapor pressure (Pa) at surface       */
      double   zq,      /* height of spec hum measurement (m)   */
      double   u,       /* wind speed (m/s) at height zu        */
      double   zu,      /* height of wind speed measurement (m) */
      double   z0,      /* roughness length (m)   		*/
   /* output variables */
      double  *h,       /* sens heat flux (+ to surf) (W/m^2)   */
      double  *le,      /* latent heat flux (+ to surf) (W/m^2) */
      double  *e)       /* mass flux (+ to surf) (kg/m^2/s)     */

DESCRIPTION

hle1 computes sensible and latent heat flux and mass flux given measurements of temperature and specific humidity at surface and one height, wind speed at one height, and roughness length. The temperature, humidity, and wind speed measurements need not all be at the same height.

RETURN VALUE

     0      successful calculation
    -1      no convergence
    -2      bad input

HISTORY

Jun 1987
Written as a Qdips program by J. Dozier, CRSEO, UCSB;
Oct 1990
Translated into IPW by K. Longley, OSU, ERLC;

SEE ALSO

Brutsaert 1982

CRHM implementation.

    Trouble experienced with iterative solution not converging.   Added simplified non-iterative solution. Better,  but still blowing up.   Added check to return h = 0.0 and le = 0.0, if H > 600 or Le < -300.   This allows the model to complete the run.  Values of h, le,t, ts, u, ea and es are output to allow for further investigation.