snobal
This module is defined in Classsnobal.
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
- none
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.
- 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.
Variable Inputs
- hru_S_n (W/m^2) - net solar radiation.
- hru_I_lw (W/m^2) - incoming longwave (thermal) radiation.
- 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_g(°C) - soil temp at depth z_g.
- hru_T_pp(°C) - temperature of precipitation.
- 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.
- hru_rho_snow (kg/m^3) - density of snowfall.
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.