SNOWPACK 20240415.bd1af1d
WaterTransport Class Reference

Detailed Description

This module contains water transport routines for the 1d snowpack model.

Version
10.02

#include <WaterTransport.h>

Public Member Functions

 WaterTransport (const SnowpackConfig &cfg)
 
virtual ~WaterTransport ()
 
void compTransportMass (const CurrentMeteo &Mdata, SnowStation &Xdata, SurfaceFluxes &Sdata, double &ql)
 The mass transport procedure is called from sn_Snowpack – AFTER calling the NEWSNOW (sn_SnowFall) or SNOWDRIFT (sn_SnowDrift) modules but BEFORE calling the TEMPERATURE (sn_SnowTemperature), PHASECHANGE (pc_PhaseChange) or CREEP (sn_SnowCreep) routines.
The mass transport routines were inserted at this location since they can set the NEWMESH variable which means the FEM data structures must be reallocated before solving the instationary heat equations(?)
These routines are responsible for MOVING MASS (water) in, out and through the snowpack. They are subsequently responsible for WATER TRANSPORT and SURFACE SUBLIMATION. Since surface sublimation does not change the FE data structure it is treated FIRST.
The phase change routines will increment the volumetric water content of the elements, then the WATER TRANSPORT routines will move the excess water from element "e" to element "e-1".
NOTES: More...
 

Protected Types

enum  watertransportmodels { UNDEFINED , BUCKET , NIED , RICHARDSEQUATION }
 

Protected Member Functions

void mergingElements (SnowStation &Xdata, SurfaceFluxes &Sdata)
 Merging snow elements
. More...
 
void adjustDensity (SnowStation &Xdata)
 Surface sublimation and melt artificially create surface elements that have a much too low density and this needs to be corrected.
TODO Check description! More...
 

Member Enumeration Documentation

◆ watertransportmodels

Enumerator
UNDEFINED 
BUCKET 
NIED 
RICHARDSEQUATION 

Constructor & Destructor Documentation

◆ WaterTransport()

WaterTransport::WaterTransport ( const SnowpackConfig cfg)

No surface hoar will form for rH above threshold (1)

  • Original calibration with the 98/99 data set: 0.9
  • r141: HOAR_THRESH_RH set to 0.9
  • r719: HOAR_THRESH_RH set to 0.97

No surface hoar will form at wind speeds above threshold (m s-1)

  • Original calibration with the 98/99 data set: 3.5
  • r141: HOAR_THRESH_VW set to 3.0
  • r242: HOAR_THRESH_VW set to 3.5

No surface hoar will form at air temperatures above threshold (m s-1)

  • Originaly, using THRESH_RAIN
  • r787: HOAR_THRESH_TA set to 1.2

◆ ~WaterTransport()

virtual WaterTransport::~WaterTransport ( )
inlinevirtual

Member Function Documentation

◆ adjustDensity()

void WaterTransport::adjustDensity ( SnowStation Xdata)
protected

Surface sublimation and melt artificially create surface elements that have a much too low density and this needs to be corrected.
TODO Check description!

Parameters
Xdata

◆ compTransportMass()

void WaterTransport::compTransportMass ( const CurrentMeteo Mdata,
SnowStation Xdata,
SurfaceFluxes Sdata,
double &  ql 
)

The mass transport procedure is called from sn_Snowpack – AFTER calling the NEWSNOW (sn_SnowFall) or SNOWDRIFT (sn_SnowDrift) modules but BEFORE calling the TEMPERATURE (sn_SnowTemperature), PHASECHANGE (pc_PhaseChange) or CREEP (sn_SnowCreep) routines.
The mass transport routines were inserted at this location since they can set the NEWMESH variable which means the FEM data structures must be reallocated before solving the instationary heat equations(?)
These routines are responsible for MOVING MASS (water) in, out and through the snowpack. They are subsequently responsible for WATER TRANSPORT and SURFACE SUBLIMATION. Since surface sublimation does not change the FE data structure it is treated FIRST.
The phase change routines will increment the volumetric water content of the elements, then the WATER TRANSPORT routines will move the excess water from element "e" to element "e-1".
NOTES:

  1. The water will only be moved if it is above the residual water content
  2. The water will only be moved if there is enough VOID SPACE in the element receiving the water
  3. Water in the last element will be DISCHARGED from the snowpack. This amount of water is termed the MELTWATER RUNOFF
  4. It would be very possible to make the RESIDUAL_WATER_CONTENT a function of the MICRO-properties of the snow. This is simply a few lines of code.
    This was done on 3 Dec 2006 -> ElementData::snowResidualWaterContent().
  5. IMPORTANT: the top surface element can be removed if the VOLUMETRIC ICE content is 0; that is, when the element contains only water and voids.
    The routines were changed dramatically by Perry on June 3rd 1998 after Perry and Michael worked the entirity of June 2nd together. We were running the model operationally in Davos and discovered that the code was bombing during heavy melt periods. Michael identified the problem that the elements were being REMOVED after the water was TRANSPORTED. Meaning that water contents greater than the 0.03 were being picked up and if the melting was strong enough, then negative volumetric AIR contents were predicted. The solution to the problem is simple enough: FIRST remove the elements, then caculate the WATER TRANSPORT.
    Parameters
    Xdata
    qlLatent heat flux (W m-2)
    Sdata
    Mdata

◆ mergingElements()

void WaterTransport::mergingElements ( SnowStation Xdata,
SurfaceFluxes Sdata 
)
protected

Merging snow elements
.

  • Starting from the surface, merge as many snow elements as you can;
    Merge too thin elements with their lower neighbour; keep buried SH and tagged layers longer on
    but enforce merging for uncovered but previously buried SH
    => Use SnowStation::mergeElements() to compute the properties of the lower element
  • NOTE
    • Only the top or last element on the ground will be effectively removed if needed
    • Water will be transported AFTER elements have been merged.
    • If WATER_LAYER is set with soil, make sure that you keep a potential wet water layer over soil or ice
    • Reset ground surface temperature if no snow is left and there is no soil
      Parameters
      *Xdata
      *Sdata

The documentation for this class was generated from the following files: