Alpine3D  Alpine3D-3.1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
SnowpackInterfaceWorker.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2009-2015 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of Alpine3D.
5  Alpine3D is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  Alpine3D is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with Alpine3D. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef SNOWPACKINTERFACEWORKER_H
19 #define SNOWPACKINTERFACEWORKER_H
20 
21 #include <iostream>
22 #include <meteoio/MeteoIO.h>
23 #include <snowpack/libsnowpack.h>
24 
25 class SnGrids {
26  public:
30  RH,
31  VW,
32  ISWR,
35  ILWR,
36  HS,
37  PSUM,
39  TSG,
40  TSS,
41  TS0,
43  SWE,
44  RSNO,
47  SP,
48  RB,
49  RG,
50  N3,
58 
59 
60  static const size_t nrOfParameters;
61  static const std::string& getParameterName(const size_t& parindex);
62  static size_t getParameterIndex(const std::string& parname);
63 
64  private:
65  static std::vector<std::string> paramname;
66  static const bool __init;
67  static bool initStaticData();
68 };
69 
73 #include <alpine3d/runoff/Runoff.h>
74 
76 {
77  public:
78  SnowpackInterfaceWorker(const mio::Config& io_cfg,
79  const mio::DEMObject& dem_in,
80  const mio::Grid2DObject& landuse_in,
81  const std::vector< std::pair<size_t,size_t> >& pts_in,
82  const std::vector<SnowStation*>& snow_stations,
83  const size_t offset_in);
84 
86 
87  void setUseDrift(const bool useDrift_in) {useDrift = useDrift_in;}
88  void setUseEBalance(const bool useEBalance_in) {useEBalance = useEBalance_in;}
89 
90  void getOutputSNO(std::vector<SnowStation*>& snow_station) const;
91  void getOutputSpecialPoints(std::vector<SnowStation*>& ptr_snow_pixel, std::vector<CurrentMeteo*>& ptr_meteo_pixel,
92  std::vector<SurfaceFluxes*>& ptr_surface_flux);
94 
95  void getGrid(const SnGrids::Parameters& param, mio::Grid2DObject& o_grid2D) const;
96  double& getGridPoint(const SnGrids::Parameters& param, const size_t& ii, const size_t& jj);
97 
98  void runModel(const mio::Date& julian,
99  const mio::Grid2DObject &psum,
100  const mio::Grid2DObject &psum_ph,
101  const mio::Grid2DObject &rh,
102  const mio::Grid2DObject &ta,
103  const mio::Grid2DObject &vw,
104  const mio::Grid2DObject &mns,
105  const mio::Grid2DObject &shortwave,
106  const mio::Grid2DObject &diffuse,
107  const mio::Grid2DObject &longwave,
108  const double solarElevation);
109 
110  static int round_landuse(const double& landuse_dbl);
111  static bool skipThisCell(const double& landuse_val, const double& dem_val);
112  static bool is_special(const std::vector< std::pair<size_t,size_t> >& pts_in, const size_t& ix, const size_t& iy);
113 
114  private:
115  void initGrids(std::vector<std::string>& params);
116  void gatherSpecialPoints(const CurrentMeteo& meteoPixel, const SnowStation& snowPixel, const SurfaceFluxes& surfaceFlux);
117  void fillGrids(const size_t& ii, const size_t& jj, const CurrentMeteo& meteoPixel, const SnowStation& snowPixel, const SurfaceFluxes& surfaceFlux);
118 
119  private:
120  SnowpackConfig sn_cfg; // created on element
121  Snowpack sn;
122  Meteo meteo;
123  Stability stability;
124 
125  const mio::DEMObject dem;
126  const size_t dimx, dimy, offset;
127  std::vector<SnowStation*> SnowStations; // Save different Pixel values
128  std::vector<bool> isSpecialPoint;
129 
130  const mio::Grid2DObject landuse;
131  mio::Grid2DObject store;
132  std::map< SnGrids::Parameters, mio::Grid2DObject > grids;
133 
134  // cache special point data for output on master process:
135  std::vector<SnowStation> snow_pixel;
136  std::vector<CurrentMeteo> meteo_pixel;
137  std::vector<SurfaceFluxes> surface_flux;
138 
139  double calculation_step_length;
140  double height_of_wind_value;
141  double soil_temp_depth;
142  bool useDrift, useEBalance, useCanopy;
143 };
144 
145 #endif
internal usage (precipitation events that are delayed because they are too small) ...
Definition: SnowpackInterfaceWorker.h:54
Albedo of the surface (ie below canopy)
Definition: SnowpackInterfaceWorker.h:46
runoff on the surface of the soil (vitual lysimeter)
Definition: SnowpackInterfaceWorker.h:51
Relative humidity.
Definition: SnowpackInterfaceWorker.h:30
Incoming long wave radiation.
Definition: SnowpackInterfaceWorker.h:35
void setUseEBalance(const bool useEBalance_in)
Definition: SnowpackInterfaceWorker.h:88
static size_t getParameterIndex(const std::string &parname)
Definition: SnowpackInterfaceWorker.cc:77
void clearSpecialPointsData()
Definition: SnowpackInterfaceWorker.cc:254
void runModel(const mio::Date &julian, const mio::Grid2DObject &psum, const mio::Grid2DObject &psum_ph, const mio::Grid2DObject &rh, const mio::Grid2DObject &ta, const mio::Grid2DObject &vw, const mio::Grid2DObject &mns, const mio::Grid2DObject &shortwave, const mio::Grid2DObject &diffuse, const mio::Grid2DObject &longwave, const double solarElevation)
method which prepares all data for simulation and then access correctly the Snowpack model interfaces...
Definition: SnowpackInterfaceWorker.cc:418
void getOutputSpecialPoints(std::vector< SnowStation * > &ptr_snow_pixel, std::vector< CurrentMeteo * > &ptr_meteo_pixel, std::vector< SurfaceFluxes * > &ptr_surface_flux)
Definition: SnowpackInterfaceWorker.cc:243
Incoming short wave, direct.
Definition: SnowpackInterfaceWorker.h:34
Definition: SnowpackInterfaceWorker.h:28
void getGrid(const SnGrids::Parameters &param, mio::Grid2DObject &o_grid2D) const
Method that the Master can search the neded data (in grids) from Worker (Pull from client) ...
Definition: SnowpackInterfaceWorker.cc:288
Temperature snow surface.
Definition: SnowpackInterfaceWorker.h:40
Snow mean density.
Definition: SnowpackInterfaceWorker.h:44
Definition: SnowpackInterfaceWorker.h:75
Snow Water Equivalent.
Definition: SnowpackInterfaceWorker.h:43
static bool is_special(const std::vector< std::pair< size_t, size_t > > &pts_in, const size_t &ix, const size_t &iy)
Definition: SnowpackInterfaceWorker.cc:646
Albedo from the top (ie above canopy)
Definition: SnowpackInterfaceWorker.h:45
sphericity
Definition: SnowpackInterfaceWorker.h:47
~SnowpackInterfaceWorker()
Definition: SnowpackInterfaceWorker.cc:212
mask showing the glaciated pixels
Definition: SnowpackInterfaceWorker.h:55
grain Coordination number
Definition: SnowpackInterfaceWorker.h:50
Parameters
Definition: SnowpackInterfaceWorker.h:28
static const std::string & getParameterName(const size_t &parindex)
Definition: SnowpackInterfaceWorker.cc:69
double & getGridPoint(const SnGrids::Parameters &param, const size_t &ii, const size_t &jj)
Retrieve one point (ii,jj) from the specified grid.
Definition: SnowpackInterfaceWorker.cc:305
void getOutputSNO(std::vector< SnowStation * > &snow_station) const
method that returns SnowCover files for specific date.
Definition: SnowpackInterfaceWorker.cc:265
Temperature ground surface.
Definition: SnowpackInterfaceWorker.h:39
Incoming short wave radiation.
Definition: SnowpackInterfaceWorker.h:32
static bool skipThisCell(const double &landuse_val, const double &dem_val)
check if a cell should be simulated or skipped
Definition: SnowpackInterfaceWorker.cc:631
bond radius
Definition: SnowpackInterfaceWorker.h:48
Height of snow.
Definition: SnowpackInterfaceWorker.h:36
Air temperature.
Definition: SnowpackInterfaceWorker.h:29
Incoming short wave, diffuse.
Definition: SnowpackInterfaceWorker.h:33
Definition: SnowpackInterfaceWorker.h:25
The mass loss or gain of the top element due to snow (ice) sublimating.
Definition: SnowpackInterfaceWorker.h:53
mask showing the exposed glaciated pixels (ie not snow covered)
Definition: SnowpackInterfaceWorker.h:56
grain radius
Definition: SnowpackInterfaceWorker.h:49
SnowpackInterfaceWorker(const mio::Config &io_cfg, const mio::DEMObject &dem_in, const mio::Grid2DObject &landuse_in, const std::vector< std::pair< size_t, size_t > > &pts_in, const std::vector< SnowStation * > &snow_stations, const size_t offset_in)
Constructs and initialise Snowpack Interface Worker. Create one worker and init values for slice whic...
Definition: SnowpackInterfaceWorker.cc:165
static int round_landuse(const double &landuse_dbl)
optimised way to round landuse
Definition: SnowpackInterfaceWorker.cc:621
Water equivalent of precipitations, either solid or liquid.
Definition: SnowpackInterfaceWorker.h:37
static const size_t nrOfParameters
holds the number of meteo parameters stored in MeteoData
Definition: SnowpackInterfaceWorker.h:60
Precipitation phase, between 0 (fully solid) and 1 (fully liquid)
Definition: SnowpackInterfaceWorker.h:38
void setUseDrift(const bool useDrift_in)
Definition: SnowpackInterfaceWorker.h:87
runoff at the bottom of the snow/soil column
Definition: SnowpackInterfaceWorker.h:52
Wind velocity.
Definition: SnowpackInterfaceWorker.h:31
Temperature within the soil, at a given depth.
Definition: SnowpackInterfaceWorker.h:42
Definition: SnowpackInterfaceWorker.h:57
Temperature soil surface.
Definition: SnowpackInterfaceWorker.h:41