SNOWPACK  SNOWPACK-3.6.0
Laws_sn.h
Go to the documentation of this file.
1 /*
2  * SNOWPACK stand-alone
3  *
4  * Copyright WSL Institute for Snow and Avalanche Research SLF, DAVOS, SWITZERLAND
5 */
6 /* This file is part of Snowpack.
7  Snowpack is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  Snowpack is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with Snowpack. If not, see <http://www.gnu.org/licenses/>.
19 */
25 #ifndef LAWS_SN_H
26 #define LAWS_SN_H
27 
28 #include <string>
29 #include <meteoio/MeteoIO.h>
30 
31 #include <snowpack/DataClasses.h>
32 
33 
34 class SnLaws {
35 
36  public:
38  enum EventType {
42  };
47  t_term_837=977,
49  };
52  visc_dflt=111,
53  visc_cal=333,
54  visc_ant=335,
55  visc_897=555,
56  visc_837=977,
57  visc_stk=999
58  };
60 
61  static double conductivity_ice(const double& Temperature);
62  static double conductivity_water(const double& Temperature);
63  static double conductivity_air(void);
64 
65 
66  static double compWindPumpingDisplacement(const SnowStation& Xdata);
67  static double compWindPumpingVelocity(const CurrentMeteo& Mdata, const double& d_pump);
68  static double compWindGradientSnow(const ElementData& Edata, double& v_pump);
69 
70  static double compSensibleHeatCoefficient(const CurrentMeteo& Mdata, const SnowStation& Xdata,
71  const double& height_of_meteo_values);
72  static double compLatentHeat_Rh(const std::string soil_evaporation, const CurrentMeteo& Mdata,
73  SnowStation& Xdata, const double& height_of_meteo_values);
74  static double compLatentHeat(const std::string soil_evaporation, const CurrentMeteo& Mdata,
75  SnowStation& Xdata, const double& height_of_meteo_values);
76 
77  static double compSoilThermalConductivity(const ElementData& Edata, const double& dvdz, const std::string& soil_thermal_conductivity);
78  static double compSnowThermalConductivity(const ElementData& Edata, const double& dvdz, const bool& show_warnings=true);
79 
80  static double compEnhanceWaterVaporTransportSnow(const SnowStation& Xdata, const size_t& i_e);
81 
82  static double compLWRadCoefficient(const double& t_snow, const double& t_atm, const double& e_atm);
83 
84  static double parameterizedSnowAlbedo(const std::string& i_albedo, const std::string& i_albedo_parameterization, const std::string& i_albAverageSchmucki,
85  const double& i_hn_albedo_fixedValue, const ElementData& Edata, const double& Tss, const CurrentMeteo& Mdata, const bool& ageAlbedo=true);
86  static void compShortWaveAbsorption(const std::string& i_sw_absorption_scheme, SnowStation& Xdata, const double& I0);
87  static void compAdvectiveHeat(SnowStation& Xdata, const double& advective_heat,
88  const double& depth_begin, const double& depth_end);
89 
90  static double compNewSnowDensity(const std::string& i_hn_density, const std::string& i_hn_density_parameterization, const double& i_hn_density_fixedValue,
91  const CurrentMeteo& Mdata, const SnowStation& Xdata, const double& tss,
92  const std::string& variant);
93 
94  static double NewSnowViscosityLehning(const ElementData& Edata);
95  static double SnowViscosityMSU(const ElementData& Edata);
96 
97  static double snowViscosityTemperatureTerm(const double& Te);
98  static double compLoadingRateStress(const std::string& variant, ElementData& Edata,
99  const mio::Date& date);
100  static double loadingRateStressDEFAULT(ElementData& Edata, const mio::Date& date);
101  static double loadingRateStressCALIBRATION(ElementData& Edata, const mio::Date& date);
102  static double snowViscosityFudgeDEFAULT(const ElementData& Edata);
103  static double snowViscosityFudgeCALIBRATION(const ElementData& Edata, const mio::Date& date);
104  static double compSnowViscosity(const std::string& variant, const std::string& i_viscosity_model, const std::string& i_watertransport_model,
105  ElementData& Edata, const mio::Date& date);
106  static double snowViscosityDEFAULT(ElementData& Edata);
107  static double snowViscosityKOJIMA(const ElementData& Edata);
108  static double snowViscosityCALIBRATION(ElementData& Edata, const mio::Date& date);
109  // minimum observed air emissivity: default=0.55 (from 1993 data at Weissfluhjoch) - Antarctica=0.31 (from 2006/2007 data of Dome C)
110  static double AirEmissivity(mio::MeteoData& md, const std::string& variant);
111  static double AirEmissivity(const double& ilwr, const double& ta, const std::string& variant);
112  static double ArrheniusLaw(const double ActEnergy, const double T, const double T_ref);
113 
117 
118  private:
119  typedef enum SOIL_EVAP_MODEL {
120  EVAP_RESISTANCE,
121  EVAP_RELATIVE_HUMIDITY,
122  EVAP_NONE
123  } soil_evap_model;
124 
125  static bool setStaticData(const std::string& variant, const std::string& watertransportmodel);
126 
127  static double newSnowDensityPara(const std::string& i_hn_model,
128  double TA, double TSS, double RH, double VW, double HH);
129  static double newSnowDensityEvent(const std::string& variant, const SnLaws::EventType& i_event,
130  const CurrentMeteo& Mdata);
131  static double newSnowDensityHendrikx(const double ta, const double tss, const double rh, const double vw);
132  static double event_wind_highlim;
133  static EventType event;
134 
135  static double sn_dt; //Calculation time step in seconds as derived from CALCULATION_STEP_LENGTH
136  static const bool __init;
137  static std::string current_variant;
138  static TempDependence t_term;
139  static ViscosityVersion visc;
140  static double visc_ice_fudge, visc_sp_fudge, visc_water_fudge;
141  static bool setfix;
142  static size_t swa_nBands;
143  static std::vector<double> swa_k, swa_pc, swa_fb;
144  static const soil_evap_model soil_evaporation;
145  static const double rsoilmin, relsatmin, alpha_por_tor_soil, pore_length_soil;
146  static const double montana_c_fudge, montana_vapor_fudge, montana_v_water_fudge;
147  static const double wind_ext_coef, displacement_coef, alpha_por_tor;
148 };
149 
150 #endif
static double compWindGradientSnow(const ElementData &Edata, double &v_pump)
Computes the wind gradient near the snow-cover surface.
Definition: Laws_sn.cc:551
static double AirEmissivity(mio::MeteoData &md, const std::string &variant)
Compute the air emissivity It relies on mio::ILWR_parametrized to get a parametrized ILWR if no measu...
Definition: Laws_sn.cc:1461
static double max_hn_density
Definition: Laws_sn.h:114
static const bool wind_pump
Switch on or off wind pumping in snow.
Definition: Laws_sn.h:116
static double loadingRateStressCALIBRATION(ElementData &Edata, const mio::Date &date)
Definition: Laws_sn.cc:1146
static double compSnowViscosity(const std::string &variant, const std::string &i_viscosity_model, const std::string &i_watertransport_model, ElementData &Edata, const mio::Date &date)
Definition: Laws_sn.cc:1319
as of revision 837 (deprecated)
Definition: Laws_sn.h:56
static void compShortWaveAbsorption(const std::string &i_sw_absorption_scheme, SnowStation &Xdata, const double &I0)
Helen LeVesconte&#39;s Solution to short wave absorption by the snowpack NOTE on fudge_bohren (fb): Large...
Definition: Laws_sn.cc:438
static double event_wind_lowlim
Definition: Laws_sn.h:114
static double compLoadingRateStress(const std::string &variant, ElementData &Edata, const mio::Date &date)
Computes the additional stress due to loading rate.
Definition: Laws_sn.cc:1128
static double snowViscosityFudgeCALIBRATION(const ElementData &Edata, const mio::Date &date)
To calibrate the fudge factor for viscosity.
Definition: Laws_sn.cc:1222
static double conductivity_water(const double &Temperature)
Definition: Laws_sn.cc:266
Definition: Laws_sn.h:40
calibration 2009 by Walter Steinkogler (MSc thesis)
Definition: Laws_sn.h:48
static double compNewSnowDensity(const std::string &i_hn_density, const std::string &i_hn_density_parameterization, const double &i_hn_density_fixedValue, const CurrentMeteo &Mdata, const SnowStation &Xdata, const double &tss, const std::string &variant)
Definition: Laws_sn.cc:1035
static double SnowViscosityMSU(const ElementData &Edata)
MONTANA snow viscosity (non-dendritic snow, i.e. if dd=0.); From bb_lw_VS_Montana() (Laws...
Definition: Laws_sn.cc:1519
static double parameterizedSnowAlbedo(const std::string &i_albedo, const std::string &i_albedo_parameterization, const std::string &i_albAverageSchmucki, const double &i_hn_albedo_fixedValue, const ElementData &Edata, const double &Tss, const CurrentMeteo &Mdata, const bool &ageAlbedo=true)
Definition: Laws_sn.cc:296
static double snowViscosityCALIBRATION(ElementData &Edata, const mio::Date &date)
Calibrate snow viscosity NOTE This is the test or playground version for calibrating settling...
Definition: Laws_sn.cc:1391
ELEMENT DATA used as a pointer in the SnowStation structure NOTE on M below: this is the mass of an e...
Definition: DataClasses.h:251
Definition: Laws_sn.h:34
static double compWindPumpingVelocity(const CurrentMeteo &Mdata, const double &d_pump)
Computes the wind pumping velocity at the surface.
Definition: Laws_sn.cc:539
static void compAdvectiveHeat(SnowStation &Xdata, const double &advective_heat, const double &depth_begin, const double &depth_end)
Advective Heat Flux injection (mimicking heat advection by infiltrating water?)
Definition: Laws_sn.cc:490
ViscosityVersion
Defines which snow viscosity version to use.
Definition: Laws_sn.h:51
version under test
Definition: Laws_sn.h:53
static const double smallest_viscosity
Defines the smallest allowable viscosity (Pa s) that a viscosity law will return Value is DAMM SMALL...
Definition: Laws_sn.h:115
actual version: revision 961, June 2011 by Fierz
Definition: Laws_sn.h:52
as of revision 837 (from r243)
Definition: Laws_sn.h:47
static const double field_capacity_soil
Field capacity of the soil (1). Above this levels, water begins to drain.
Definition: Laws_sn.h:115
static double ArrheniusLaw(const double ActEnergy, const double T, const double T_ref)
Computes an Arrhenius-type temperature dependency.
Definition: Laws_sn.cc:1442
static double compLWRadCoefficient(const double &t_snow, const double &t_atm, const double &e_atm)
LONGWAVE RADIATION COEFFICIENT This routine might look a bit unusual: Radiation is treated as a CONVE...
Definition: Laws_sn.cc:888
static const bool wind_pump_soil
Switch on or off wind pumping in soil.
Definition: Laws_sn.h:116
CurrentMeteo is the class of interpolated meteo data for the current calculation time step It contai...
Definition: DataClasses.h:81
static double compLatentHeat_Rh(const std::string soil_evaporation, const CurrentMeteo &Mdata, SnowStation &Xdata, const double &height_of_meteo_values)
Latent heat flux including consideration of soil (one active element) This method uses the Relative H...
Definition: Laws_sn.cc:780
calibration 2009 by Walter Steinkogler (MSc thesis)
Definition: Laws_sn.h:57
static double compSensibleHeatCoefficient(const CurrentMeteo &Mdata, const SnowStation &Xdata, const double &height_of_meteo_values)
SENSIBLE HEAT EXCHANGE COEFFICIENT (Surface Energy Exchange)
Definition: Laws_sn.cc:752
Arrhenius type multiplied by critical function near melting point.
Definition: Laws_sn.h:45
pure Arrhenius type w/ excitation energy of ice
Definition: Laws_sn.h:46
calibration fall 2010 by Fierz
Definition: Laws_sn.h:55
static double snowViscosityTemperatureTerm(const double &Te)
Computes the temperature term of viscosity.
Definition: Laws_sn.cc:1097
EventType
Types of events for computing new snow density.
Definition: Laws_sn.h:39
static double snowViscosityKOJIMA(const ElementData &Edata)
SNOW VISCOSITY according to formulation by Kojima.
Definition: Laws_sn.cc:1378
static double snowViscosityFudgeDEFAULT(const ElementData &Edata)
Determines the fudge factor for viscosity This fudge factor takes into account bond-ice imperfection...
Definition: Laws_sn.cc:1194
Wind driven deposition of snow (Antarctica)
Definition: Laws_sn.h:41
static double min_hn_density
Definition: Laws_sn.h:114
static double compEnhanceWaterVaporTransportSnow(const SnowStation &Xdata, const size_t &i_e)
Computes the enhancement factor for water vapor transport in wet snow.
Definition: Laws_sn.cc:616
if Antarctica needs adaptation of _new
Definition: Laws_sn.h:54
static double compSnowThermalConductivity(const ElementData &Edata, const double &dvdz, const bool &show_warnings=true)
Heat conduction in snow Actual version: k = C1*[C2 + C3 + C4 + C5] Adams/Sato model. The following piece of code was programmed by Perry on a warm June afternoon in Birmensdorf. H.U. Gubler was viciously attacking Ammann, saying nasty things about our beloved chef, (even if his hair is a bit funny), in the DAVOSER ZEITUNG. Perry was dreaming about San Diego and .... and Michael was dreamy about rock climbing in Italy with funky, spunky Italian girls, Borolo Bob was busy with his wife on his way to Mallorca – to watch sexy TOPLESS bikini-slip clad GERMAN secretaries on the BEACH. As usual, if this code does not work it is his FAULT .... (Hey, Bob, when are we going to meet ED ADAMS? And remember PLEDGE 7 of Metamorphism.c. The theory behind this piece of code can be found in Bob&#39;s ROUGH DRAFT on MICROSTRUCTURE.
Definition: Laws_sn.cc:661
Station data including all information on snowpack layers (elements and nodes) and on canopy This is...
Definition: DataClasses.h:468
static double conductivity_air(void)
static double compSoilThermalConductivity(const ElementData &Edata, const double &dvdz, const std::string &soil_thermal_conductivity)
Heat conduction in soil. The formulation is based on curve fitting, the frozen soil data from Kersten...
Definition: Laws_sn.cc:571
static double compLatentHeat(const std::string soil_evaporation, const CurrentMeteo &Mdata, SnowStation &Xdata, const double &height_of_meteo_values)
LATENT HEAT EXCHANGE (Surface Energy Exchange) David Gustafsson (davidg@kth.se) has introduced a resi...
Definition: Laws_sn.cc:854
static double conductivity_ice(const double &Temperature)
Definition: Laws_sn.cc:253
static double loadingRateStressDEFAULT(ElementData &Edata, const mio::Date &date)
Definition: Laws_sn.cc:1136
TempDependence
Defines temperature dependence of snow viscosity.
Definition: Laws_sn.h:44
static const bool jordy_new_snow
To use J. Hendrikx&#39;s parameterization for wind speeds > 2.9 m s-1.
Definition: Laws_sn.h:116
static double snowViscosityDEFAULT(ElementData &Edata)
SNOW VISCOSITY (all types of snow)
Definition: Laws_sn.cc:1343
static double compWindPumpingDisplacement(const SnowStation &Xdata)
Computes the displacement depth in case of ventilation.
Definition: Laws_sn.cc:515
static double NewSnowViscosityLehning(const ElementData &Edata)
NEW SNOW VISCOSITY (dendritic snow, i.e., dd > 0.) Actual version : ml_lw_VS_Lehning from r7...
Definition: Laws_sn.cc:1077