SNOWPACK  SNOWPACK-3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SmetIO.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 SMET_IO_H
22 #define SMET_IO_H
23 
24 #include <meteoio/MeteoIO.h>
25 #include <snowpack/Constants.h>
27 #include <snowpack/Hazard.h>
28 
29 #include <string>
30 
31 class SmetIO : public SnowpackIOInterface {
32 
33  public:
34  SmetIO(const SnowpackConfig& i_cfg, const RunInfo& run_info);
35  SmetIO(const SmetIO&);
36 
37  ~SmetIO();
38 
39  SmetIO& operator=(const SmetIO&);
40 
41  virtual bool snowCoverExists(const std::string& i_snowfile, const std::string& stationID) const;
42 
43  virtual void readSnowCover(const std::string& i_snowfile, const std::string& stationID,
44  SN_SNOWSOIL_DATA& SSdata, ZwischenData& Zdata);
45 
46  virtual void writeSnowCover(const mio::Date& date, const SnowStation& Xdata,
47  const ZwischenData& Zdata, const bool& forbackup=false);
48 
49  virtual void writeTimeSeries(const SnowStation& Xdata, const SurfaceFluxes& Sdata, const CurrentMeteo& Mdata,
50  const ProcessDat& Hdata, const double wind_trans24);
51 
52  virtual void writeProfile(const mio::Date& date, const SnowStation& Xdata);
53 
54  virtual bool writeHazardData(const std::string& stationID, const std::vector<ProcessDat>& Hdata,
55  const std::vector<ProcessInd>& Hdata_ind, const size_t& num);
56 
57  mio::Date read_hazsmet(const std::string& hazfilename, ZwischenData& Zdata);
58  static void writeHazFile(const std::string& hazfilename, const mio::Date& date,
59  const SnowStation& Xdata, const ZwischenData& Zdata);
60 
61  private:
62  std::string getFilenamePrefix(const std::string& fnam, const std::string& path, const bool addexp=true) const;
63  static void setBasicHeader(const SnowStation& Xdata, const std::string& fields, smet::SMETWriter& smet_writer);
64  static void setSnoSmetHeader(const SnowStation& Xdata, const mio::Date& date, smet::SMETWriter& smet_writer);
65  static void setFormatting(const size_t& nr_solutes,
66  std::vector<int>& vec_width, std::vector<int>& vec_precision);
67  void writeSnoFile(const std::string& snofilename, const mio::Date& date, const SnowStation& Xdata,
68  const ZwischenData& Zdata) const;
69  bool keyExists(const smet::SMETReader& reader, const std::string& key) const;
70  double get_doubleval(const smet::SMETReader& reader, const std::string& keyname) const;
71  int get_intval(const smet::SMETReader& reader, const std::string& keyname) const;
72  mio::Date read_snosmet(const std::string& snofilename, const std::string& stationID, SN_SNOWSOIL_DATA& SSdata);
73  mio::Date read_snosmet_header(const smet::SMETReader& sno_reader, const std::string& stationID,
74  SN_SNOWSOIL_DATA& SSdata);
75  double compPerpPosition(const double& z_vert, const double& hs_ref,
76  const double& ground, const double& cos_sl);
77  std::string getFieldsHeader();
78  void writeTimeSeriesHeader(const SnowStation& Xdata, smet::SMETWriter& smet_writer);
79  void writeTimeSeriesData(const SnowStation& Xdata, const SurfaceFluxes& Sdata, const CurrentMeteo& Mdata, const ProcessDat& Hdata, const double &wind_trans24, smet::SMETWriter& smet_writer);
80 
81  private:
82  std::vector<double> fixedPositions;
83  std::string outpath, o_snowpath, snowpath, experiment, inpath, i_snowpath, sw_mode;
84  const RunInfo info;
85  std::map<std::string, smet::SMETWriter*> tsWriters;
86  double in_dflt_TZ;
87  double calculation_step_length, ts_days_between;
88  double min_depth_subsurf;
89  bool avgsum_time_series, useCanopyModel, useSoilLayers, research_mode, perp_to_slope;
90  bool out_heat, out_lw, out_sw, out_meteo, out_haz, out_mass, out_t, out_load, out_stab, out_canopy, out_soileb;
91 };
92 
93 #endif
SmetIO(const SnowpackConfig &i_cfg, const RunInfo &run_info)
Definition: SmetIO.cc:140
SmetIO & operator=(const SmetIO &)
Assignement operator, required because of pointer member.
Definition: SmetIO.cc:192
ZwischenData contains "memory" information mainly for operational use It is used to prepare some para...
Definition: DataClasses.h:63
SN_SNOWSOIL_DATA includes all important station parameters as well as LayerData This data structure ...
Definition: DataClasses.h:212
Definition: SnowpackConfig.h:28
class to collect the information about the current simulation (version, date)
Definition: DataClasses.h:690
virtual void readSnowCover(const std::string &i_snowfile, const std::string &stationID, SN_SNOWSOIL_DATA &SSdata, ZwischenData &Zdata)
This routine reads the status of the snow cover at program start.
Definition: SmetIO.cc:254
Definition: SnowpackIOInterface.h:27
Definition: DataClasses.h:580
virtual void writeProfile(const mio::Date &date, const SnowStation &Xdata)
Definition: SmetIO.cc:1102
CurrentMeteo is the class of interpolated meteo data for the current calculation time step It contai...
Definition: DataClasses.h:81
virtual bool writeHazardData(const std::string &stationID, const std::vector< ProcessDat > &Hdata, const std::vector< ProcessInd > &Hdata_ind, const size_t &num)
Definition: SmetIO.cc:1107
Definition: SmetIO.h:31
mio::Date read_hazsmet(const std::string &hazfilename, ZwischenData &Zdata)
Definition: SmetIO.cc:278
~SmetIO()
Definition: SmetIO.cc:182
static void writeHazFile(const std::string &hazfilename, const mio::Date &date, const SnowStation &Xdata, const ZwischenData &Zdata)
Definition: SmetIO.cc:566
Structure of double values for output to SDB.
Definition: DataClasses.h:707
virtual void writeSnowCover(const mio::Date &date, const SnowStation &Xdata, const ZwischenData &Zdata, const bool &forbackup=false)
This routine writes the status of the snow cover at program termination and at specified backup times...
Definition: SmetIO.cc:544
Station data including all information on snowpack layers (elements and nodes) and on canopy This is...
Definition: DataClasses.h:463
virtual void writeTimeSeries(const SnowStation &Xdata, const SurfaceFluxes &Sdata, const CurrentMeteo &Mdata, const ProcessDat &Hdata, const double wind_trans24)
Definition: SmetIO.cc:1078
virtual bool snowCoverExists(const std::string &i_snowfile, const std::string &stationID) const
This routine checks if the specified snow cover data exists.
Definition: SmetIO.cc:235