SNOWPACK  SNOWPACK-3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CaaMLIO.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2014 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of Snowpack.
5 MeteoIO 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 MeteoIO 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 MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef CAAMLIO_H
19 #define CAAMLIO_H
20 
21 #include <meteoio/MeteoIO.h>
22 #include <snowpack/Constants.h>
23 #include <snowpack/Hazard.h>
26 
27 #include <string>
28 
29 #include <libxml/parser.h>
30 #include <libxml/xpath.h>
31 #include <libxml/xmlwriter.h>
32 
41 class CaaMLIO : public SnowpackIOInterface {
42 
43  public:
44  CaaMLIO(const SnowpackConfig& i_cfg, const RunInfo& run_info);
45  CaaMLIO(const CaaMLIO&);
46  ~CaaMLIO() throw();
47 
48  CaaMLIO& operator=(const CaaMLIO&);
49 
50  virtual bool snowCoverExists(const std::string& i_snowfile, const std::string& stationID) const;
51 
52  virtual void readSnowCover(const std::string& i_snowfile, const std::string& stationID,
53  SN_SNOWSOIL_DATA& SSdata, ZwischenData& Zdata);
54 
55  virtual void writeSnowCover(const mio::Date& date, const SnowStation& Xdata,
56  const ZwischenData& Zdata, const bool& forbackup=false);
57 
58  virtual void writeTimeSeries(const SnowStation& Xdata, const SurfaceFluxes& Sdata, const CurrentMeteo& Mdata,
59  const ProcessDat& Hdata, const double wind_trans24);
60 
61  virtual void writeProfile(const mio::Date& date, const SnowStation& Xdata);
62 
63  virtual bool writeHazardData(const std::string& stationID, const std::vector<ProcessDat>& Hdata,
64  const std::vector<ProcessInd>& Hdata_ind, const size_t& num);
65 
66  private:
67  void cleanup() throw();
68  void init(const SnowpackConfig& cfg);
69  void openIn_CAAML(const std::string& in_snowfile);
70  void closeIn_CAAML() throw();
71  void setBasicHeader(const SnowStation& Xdata, const std::string& fields, smet::SMETWriter& smet_writer) const;
72  void setSnoSmetHeader(const SnowStation& Xdata, const SN_SNOWSOIL_DATA& SSdata, const mio::Date& date, smet::SMETWriter& smet_writer) const;
73  void setFormatting(const size_t& nr_solutes, std::vector<int>& vec_width, std::vector<int>& vec_precision) const;
74 
75  std::string getFilenamePrefix(const std::string& fnam, const std::string& path, const bool addexp=true) const;
76  bool read_snocaaml(const std::string& snofilename, const std::string& stationID, SN_SNOWSOIL_DATA& SSdata);
77  void writeSnowFile(const std::string& snofilename, const mio::Date& date, const SnowStation& Xdata,
78  const bool aggregate);
79 
80  const RunInfo info;
81  std::string i_snowpath, sw_mode, o_snowpath, experiment;
82  bool useSoilLayers, perp_to_slope, aggregate_caaml;
83  /*static const*/ double in_tz; //plugin specific time zones
84  std::string snow_prefix, snow_ext; //for the file naming scheme
85  double caaml_nodata; //plugin specific no data value
86 
87  xmlDocPtr in_doc;
88  xmlXPathContextPtr in_xpathCtx;
89  xmlCharEncoding in_encoding;
90  static const xmlChar *xml_ns_caaml, *xml_ns_abrev_caaml;
91  static const xmlChar *xml_ns_gml, *xml_ns_abrev_gml;
92  static const xmlChar *xml_ns_xsi, *xml_ns_abrev_xsi;
93  static const xmlChar *xml_ns_slf, *xml_ns_abrev_slf;
94  static const xmlChar *xml_ns_snp, *xml_ns_abrev_snp;
95  static const std::string TimeData_xpath, StationMetaData_xpath, SnowData_xpath;
96 
97  xmlNodeSetPtr xmlGetData(const std::string& path);
98  mio::Date xmlGetDate();
99  mio::StationData xmlGetStationData(const std::string& stationID);
100  double xmlSetVal(const std::string& xpath, const std::string& property, const double& dflt);
101  int xmlSetVal(const std::string& xpath, const std::string& property, const int& dflt);
102  void setCustomSnowSoil(SN_SNOWSOIL_DATA& Xdata);
103  bool getLayersDir();
104  LayerData xmlGetLayer(xmlNodePtr cur);
105  void getProfiles(const std::string path, std::vector<double> &depths, std::vector<double> &val);
106  void setProfileVal(std::vector<LayerData> &Layers, std::vector<std::vector<double> > depths, std::vector<std::vector<double> > val);
107  void setCustomLayerData(LayerData &Layer);
108  void setDepositionDates(std::vector<LayerData> &Layers, const mio::Date);
109 
110  void xmlWriteElement(const xmlTextWriterPtr writer, const char* name, const char* content, const char* att_name, const char* att_val);
111  // void writeDate(const xmlTextWriterPtr writer, const mio::Date date);
112  void writeDate(const xmlTextWriterPtr writer, const char* att_name, const char* att_val);
113  void writeCustomSnowSoil(const xmlTextWriterPtr writer, const SnowStation& Xdata);
114  void writeLayers(const xmlTextWriterPtr writer, const SnowStation& Xdata);
115  void writeCustomLayerData(const xmlTextWriterPtr writer, const ElementData& Edata, const NodeData& Ndata);
116  void writeProfiles(const xmlTextWriterPtr writer, const SnowStation& Xdata);
117  void writeStationData(const xmlTextWriterPtr writer, const SnowStation& Xdata);
118 
119  double lwc_codeToVal(const char* code);
120  std::string lwc_valToCode(const double val);
121  double hardness_codeToVal(char* code);
122  std::string hardness_valToCode(const double code);
123  void grainShape_codeToVal(const std::string& code, double &sp, double &dd, unsigned short int &mk);
124  std::string grainShape_valToAbbrev(const unsigned int var);
125  std::string grainShape_valToAbbrev_old(const double* var);
126 
127  char layerDepthTopStr[10], layerThicknessStr[10], layerValStr[10], valueStr[10], dateStr[30];
128 
129 };
130 
131 #endif //End of CAAMLIO.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 This data structure ...
Definition: DataClasses.h:212
Definition: SnowpackConfig.h:28
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
class to collect the information about the current simulation (version, date)
Definition: DataClasses.h:690
Definition: SnowpackIOInterface.h:27
Definition: DataClasses.h:580
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: CaaMLIO.cc:261
CurrentMeteo is the class of interpolated meteo data for the current calculation time step It contai...
Definition: DataClasses.h:81
virtual bool snowCoverExists(const std::string &i_snowfile, const std::string &stationID) const
This routine checks if the specified snow cover data exists.
Definition: CaaMLIO.cc:243
virtual bool writeHazardData(const std::string &stationID, const std::vector< ProcessDat > &Hdata, const std::vector< ProcessInd > &Hdata_ind, const size_t &num)
Definition: CaaMLIO.cc:1042
CaaMLIO(const SnowpackConfig &i_cfg, const RunInfo &run_info)
Definition: CaaMLIO.cc:109
Reading snow profile data in CAAML format. Reads in CAAML snow profile data, the CAA-IACS internation...
Definition: CaaMLIO.h:41
virtual void writeProfile(const mio::Date &date, const SnowStation &Xdata)
Definition: CaaMLIO.cc:1037
Structure of double values for output to SDB.
Definition: DataClasses.h:707
Station data including all information on snowpack layers (elements and nodes) and on canopy This is...
Definition: DataClasses.h:463
Parameters of the different layers of the snowpack The layers form a vector within the SSdata (profi...
Definition: DataClasses.h:174
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: CaaMLIO.cc:703
~CaaMLIO()
Definition: CaaMLIO.cc:184
virtual void writeTimeSeries(const SnowStation &Xdata, const SurfaceFluxes &Sdata, const CurrentMeteo &Mdata, const ProcessDat &Hdata, const double wind_trans24)
Definition: CaaMLIO.cc:1031
NODAL DATA used as a pointer in the SnowStation structure.
Definition: DataClasses.h:336
CaaMLIO & operator=(const CaaMLIO &)
Assignement operator, required because of pointer member.
Definition: CaaMLIO.cc:175