SNOWPACK  SNOWPACK-3.6.0
AsciiIO.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 ASCIIIO_H
22 #define ASCIIIO_H
23 
24 #include <meteoio/MeteoIO.h>
26 
27 class AsciiIO : public SnowpackIOInterface {
28 
29  public:
30  AsciiIO(const SnowpackConfig& i_cfg, const RunInfo& run_info);
31  AsciiIO& operator=(const AsciiIO&);
32 
33  virtual bool snowCoverExists(const std::string& i_snowfile, const std::string& stationID) const;
34 
35  virtual void readSnowCover(const std::string& i_snowfile, const std::string& stationID,
36  SN_SNOWSOIL_DATA& SSdata, ZwischenData& Zdata, const bool& read_salinity);
37 
38  virtual void writeSnowCover(const mio::Date& date, const SnowStation& Xdata,
39  const ZwischenData& Zdata, const bool& forbackup=false);
40 
41  virtual void writeTimeSeries(const SnowStation& Xdata, const SurfaceFluxes& Sdata, const CurrentMeteo& Mdata,
42  const ProcessDat& Hdata, const double wind_trans24);
43 
44  virtual void writeProfile(const mio::Date& date, const SnowStation& Xdata);
45 
46  virtual bool writeHazardData(const std::string& stationID, const std::vector<ProcessDat>& Hdata,
47  const std::vector<ProcessInd>& Hdata_ind, const size_t& num);
48 
49  private:
50  typedef enum {
51  PRO,
52  FULL,
53  AGGR
54  } PRF_TYPE;
55 
56  bool appendFile(const std::string& filename, const mio::Date& startdate, const std::string& ftype);
57  bool parseMetFile(const char& eoln, const mio::Date& start_date, std::istream& fin, std::ostream& ftmp);
58  bool parseProFile(const char& eoln, const mio::Date& start_date, std::istream& fin, std::ostream& ftmp);
59  bool parsePrfFile(const char& eoln, const mio::Date& start_date, std::istream& fin, std::ostream& ftmp);
60 
61  std::string getFilenamePrefix(const std::string& fnam, const std::string& path, const bool addexp=true) const;
62 
63  void writeMETHeader(const SnowStation& Xdata, std::ofstream &fout) const;
64  void writeProHeader(const SnowStation& Xdata, std::ofstream &fout) const;
65  void writePrfHeader(const SnowStation& Xdata, std::ofstream &fout) const;
66  bool checkHeader(const SnowStation& Xdata, const std::string& filename, const std::string& ext, const std::string& signature) const;
67 
68  void writeProfilePro(const mio::Date& date, const SnowStation& Xdata, const bool& aggregate);
69  void writeProfileProAddDefault(const SnowStation& Xdata, std::ofstream &fout);
70  void writeProfileProAddCalibration(const SnowStation& Xdata, std::ofstream &fout);
71 
72  void writeProfilePrf(const mio::Date& date, const SnowStation& Xdata, const bool& aggregate);
73 
74  size_t writeTemperatures(std::ofstream &fout, const double& z_vert, const double& T,
75  const size_t& ii, const SnowStation& Xdata);
76 
77  double compPerpPosition(const double& z_vert, const double& hs_ref,
78  const double& ground, const double& cos_sl);
79  double checkMeasuredTemperature(const double& T, const double& z, const double& mH);
80 
81  size_t findTaggedElement(const size_t& tag, const SnowStation& Xdata);
82  size_t writeHeightTemperatureTag(std::ofstream &fout, const size_t& tag,
83  const CurrentMeteo& Mdata, const SnowStation& Xdata);
84 
85  void setNumberSensors(const CurrentMeteo& Mdata);
86  void writeTimeSeriesAddDefault(const SnowStation& Xdata, const SurfaceFluxes& Sdata,
87  const CurrentMeteo& Mdata, const double crust,
88  const double dhs_corr, const double mass_corr,
89  const size_t nCalcSteps, std::ofstream &fout);
90  void writeTimeSeriesAddAntarctica(const SnowStation& Xdata, const SurfaceFluxes& Sdata,
91  const CurrentMeteo& Mdata, const double crust,
92  const double dhs_corr, const double mass_corr,
93  const size_t nCalcSteps, std::ofstream &fout);
94  void writeTimeSeriesAddCalibration(const SnowStation& Xdata, const SurfaceFluxes& Sdata,
95  const CurrentMeteo& Mdata, const double crust,
96  const double dhs_corr, const double mass_corr,
97  const size_t nCalcSteps, std::ofstream &fout);
98 
99  std::set<std::string> setAppendableFiles;
100  std::string variant, experiment, sw_mode;
101  std::string inpath, snowfile, i_snowpath, outpath, o_snowpath;
102  const RunInfo info;
103 
104  std::vector<std::string> vecProfileFmt;
105  bool aggregate_prf;
106 
107  //Monitored temperature sensors
108  std::vector<double> fixedPositions;
109  size_t numberMeasTemperatures, maxNumberMeasTemperatures;
110  size_t numberTags, numberFixedSensors, totNumberSensors;
111 
112  double time_zone; // time zone of input
113  double calculation_step_length, hazard_steps_between, ts_days_between;
114  double min_depth_subsurf, hoar_density_surf, hoar_min_size_surf;
115  bool avgsum_time_series, useCanopyModel, useSoilLayers, research_mode, perp_to_slope;
116  bool out_heat, out_lw, out_sw, out_meteo, out_haz, out_mass, out_t, out_load, out_stab, out_canopy, out_soileb;
117  bool r_in_n;
118 
119  static const bool t_srf, t_gnd;
120 };
121 
122 #endif //End of AsciiIO.h
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.
Definition: DataClasses.h:215
Definition: SnowpackConfig.h:28
AsciiIO & operator=(const AsciiIO &)
Assignement operator, required because of const "info" member.
Definition: AsciiIO.cc:366
class to collect the information about the current simulation (version, date)
Definition: DataClasses.h:700
virtual void writeProfile(const mio::Date &date, const SnowStation &Xdata)
Write the Snow Profile Results, snow depth being taken VERTICALLY Prepare Output File for JAVA visual...
Definition: AsciiIO.cc:872
Definition: SnowpackIOInterface.h:27
Definition: DataClasses.h:589
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: AsciiIO.cc:2361
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: AsciiIO.cc:745
virtual bool snowCoverExists(const std::string &i_snowfile, const std::string &stationID) const
This routine checks if the specified snow cover data exists.
Definition: AsciiIO.cc:420
virtual void readSnowCover(const std::string &i_snowfile, const std::string &stationID, SN_SNOWSOIL_DATA &SSdata, ZwischenData &Zdata, const bool &read_salinity)
This routine reads the status of the snow cover at program start.
Definition: AsciiIO.cc:440
AsciiIO(const SnowpackConfig &i_cfg, const RunInfo &run_info)
Definition: AsciiIO.cc:309
Structure of double values for output to SDB.
Definition: Hazard.h:37
Station data including all information on snowpack layers (elements and nodes) and on canopy This is...
Definition: DataClasses.h:468
virtual void writeTimeSeries(const SnowStation &Xdata, const SurfaceFluxes &Sdata, const CurrentMeteo &Mdata, const ProcessDat &Hdata, const double wind_trans24)
Write all Time Series results (*.met) All depths and water equivalents (mass) are taken VERTICALLY...
Definition: AsciiIO.cc:1746
Definition: AsciiIO.h:27