SNOWPACK 20260217.97ebebde
Physically based, energy balance snow cover model
Loading...
Searching...
No Matches
Canopy.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*/
20
21#ifndef CANOPY_H
22#define CANOPY_H
23
25
26#include <string>
27#include <fstream>
28
79class Canopy {
80
81 public:
82 Canopy(const SnowpackConfig& i_cfg);
83
84 static void DumpCanopyHeader(std::ofstream &fout);
85 static void DumpCanopyUnits(std::ofstream &fout);
86 static void DumpCanopyData(std::ofstream &fout, const CanopyData *Cdata,
87 const SurfaceFluxes *Sdata, const double cos_sl);
88 bool runCanopyModel(CurrentMeteo &Mdata, SnowStation &Xdata,
89 const double& roughness_length, const double& height_of_wind_val,
90 const bool& adjust_VW_height=true);
91 static void writeTimeSeriesAdd2LCanopy(std::ofstream &fout, const CanopyData *Cdata);
92 //static const double can_alb_dry, can_alb_wet, can_alb_snow, krnt_lai; //public constants
93
94 private:
95 static double get_f1(const double& ris);
96
97 static double RootFraction(const double& zupper, const double& zlower, const double rootdepth);
98
99 void SoilWaterUptake(const size_t& SoilNode, const double& transpiration,
100 ElementData* EMS, const double wp_fraction,
101 const double rootdepth, const double h_wilt) const;
102
103 static double get_f4(const double& tempC);
104
105 static double get_f2f4(const size_t& SoilNode, ElementData* EMS,
106 const double wp_fraction,const double rootdepth);
107
108 static double get_f3(const double& vpd, const double f3_gd);
109
110 double IntCapacity(const CurrentMeteo& Mdata, const SnowStation& Xdata,
111 const bool& force_rain=false) const;
112
113 static double IntUnload(const double& capacity, const double& storage);
114
115 static double IntRate(const double& capacity, const double& storage, const double& prec,
116 const double& direct, const double interception_timecoef);
117
118 static double CanopyAlbedo(const double& tair, const double& wetfrac, const SnowStation& Xdata);
119
120 static double TotalAlbedo(double CanAlb, double sigf, double SurfAlb, double DirectThroughfall,
121 double CanopyClosureDirect, double RadFracDirect, double sigfdirect);
122
123 static double CanopyShadeSoilCover(const double& HEIGHT, const double& COVER, const double& ELEV, const double& can_diameter);
124
125 static double CanopyWetFraction(const double& capacity, const double& storage);
126
127 static double CanopyTransmissivity(const double& lai, const double& elev, const double krnt_lai);
128
129 void LineariseNetRadiation(const CurrentMeteo& Mdata,const CanopyData& Cdata, const SnowStation& Xdata,
130 double& iswrac, double& rsnet, double& ilwrac, double& r0,double& r1,
131 const double& canopyalb, double& CanopyClosureDirect, double& RadFracDirect,
132 const double& sigfdirect, double& r1p) const;
133
134 void LineariseNetRadiation2L(const CurrentMeteo& Mdata, const CanopyData& Cdata, const SnowStation& Xdata,
135 double& iswrac, double& rsnet, double& ilwrac, double& r0,double& r1, double& r2,
136 double& rt0, double& rt1, double& rt2, const double& canopyalb, double& CanopyClosureDirect, double& RadFracDirect,
137 const double& sigfdirect, const double& sigftrunkdirect, double& r1p, double& r2p) const;
138
139 static void LineariseSensibleHeatFlux(const double& ch_canopy, const double& tair, double& h0, double& h1, double scalingfactor);
140
141 static double DSaturationPressureDT(const double& L, const double& T);
142
143 static void LineariseLatentHeatFlux(const double& ce_canopy, const double& tc_old, const double& vpair,
144 double& le0, double& le1, double scalingfactor);
145
146 static void CalculateHeatMass(const double& height, const double& BasalArea, double& lai ,double& HMLeaves,
147 double& HMTrunks, const double biomass_density, const double biomass_heat_capacity);
148
149 void LineariseConductiveHeatFlux(const double& tc_old, const double& HM, double& HM0, double& HM1, const double& DT, const double& scalingfactor) const;
150
151 static void CanopyEnergyBalance(const double& h0, const double& h1, const double& le0,
152 const double& le1, const double& HM0, const double& HM1,
153 const double& ce_canopy,
154 const double& ce_condensation,
155 double& r0, double& r1, double& TCANOPY, double& RNCANOPY,
156 double& HCANOPY, double& LECANOPY);
157
158 static void CanopyEnergyBalance2L(double& h0, double& h1, double& le0,
159 double& le1, double& HM0, double& HM1, double& TT0, double& TT1,
160 const double& ce_canopy,
161 const double& ce_condensation,
162 double& r0, double& r1, double& r2, double& TCANOPY, double& Ttrunk, double& RNCANOPY,
163 double& HCANOPY, double& LECANOPY);
164
165 static void CanopyEvaporationComponents(const double& ce_canopy,
166 const double& ce_transpiration, double& LECANOPY,
167 const double& ta, const double& I, const double DT,
168 double& CanopyEvaporation,
169 double& INTEVAP, double& TRANSPIRATION,
170 double& RNCANOPY, double& HCANOPY,double& TCANOPY,
171 const double& r0, const double& r1, const double& h0, const double& h1,
172 double& LECANOPYCORR,
173 const double& wetfraction, const double& HM0, const double& HM1);
174
175 static void CanopyEvaporationComponents2L(const double& ce_canopy,
176 const double& ce_transpiration, double& LECANOPY,
177 const double& ta, const double& I, const double DT,
178 double& CanopyEvaporation,
179 double& INTEVAP, double& TRANSPIRATION,
180 double& RNCANOPY, double& HCANOPY,double& TCANOPY, double& Ttrunk,
181 const double& TT0, const double& TT1,
182 const double& r0, const double& r1, const double& r2, const double& h0, const double& h1,
183 double& LECANOPYCORR,
184 const double& wetfraction,
185 const double& HM0, const double& HM1);
186
187 static double get_psim(const double& xi);
188
189 static double get_psih(const double& xi);
190
191 static double RichardsonToAeta(double za, double TempAir, double DiffTemp, double Windspeed, double zom, double zoh, int maxitt);
192
193 void CanopyTurbulentExchange(const CurrentMeteo& Mdata, const double& refheight, const double& zomg,
194 const double& wetfraction, SnowStation& Xdata, double& ch_canopy,
195 double& ce_canopy, double& ce_transpiration,
196 double& ce_interception, double& ce_condensation) const;
197
198 void CanopyRadiationOutput(SnowStation& Xdata, const CurrentMeteo& Mdata, double ac,
199 double &iswrac, double &rswrac,
200 double &iswrbc, double &rswrbc, double &ilwrac,
201 double &rlwrac, double &ilwrbc, double &rlwrbc,
202 double CanopyClosureDirect, double RadFracDirect, double sigfdirect, double sigftrunkdirect) const;
203
204 std::string hn_density, hn_density_parameterization, variant, watertransportmodel_soil;
205 double hn_density_fixedValue, calculation_step_length;
206 bool useSoilLayers;
207 // variables for canopy heat mass and 2-layer canopy
208 bool CanopyHeatMass;
209 bool Twolayercanopy, Twolayercanopy_user;
210 bool canopytransmission;
211 bool forestfloor_alb;
212};
213
214#endif
Canopy data used as a pointer in the SnowStation structure.
Definition DataClasses.h:442
Computes interception of precipitation and radiation, and reduction of windspeed in a canopy layer ab...
Definition Canopy.h:79
static void DumpCanopyHeader(std::ofstream &fout)
Write header for 28 canopy parameters to Outfile, columns 65-92.
Definition Canopy.cc:40
bool runCanopyModel(CurrentMeteo &Mdata, SnowStation &Xdata, const double &roughness_length, const double &height_of_wind_val, const bool &adjust_VW_height=true)
MAIN CANOPY FUNCTION CALLED BY Meteo.c This routine computes interception of precipitation and radiat...
Definition Canopy.cc:1575
static void DumpCanopyData(std::ofstream &fout, const CanopyData *Cdata, const SurfaceFluxes *Sdata, const double cos_sl)
Dump 28 canopy parameters to Outfile, columns 65-92.
Definition Canopy.cc:122
static void DumpCanopyUnits(std::ofstream &fout)
Write units for 28 canopy parameters to Outfile, columns 65-92.
Definition Canopy.cc:90
static void writeTimeSeriesAdd2LCanopy(std::ofstream &fout, const CanopyData *Cdata)
Definition Canopy.cc:165
CurrentMeteo is the class of interpolated meteo data for the current calculation time step.
Definition DataClasses.h:86
The physical properties of an individual element used in snow layers (one or multiple elements are co...
Definition DataClasses.h:288
Station data including all information on snowpack layers (elements and nodes) and on canopy.
Definition DataClasses.h:609
Definition SnowpackConfig.h:28
The surface fluxes data as computed by Snowpack.
Definition DataClasses.h:743