SNOWPACK 20251207.15ac3588
Physically based, energy balance snow cover model
Loading...
Searching...
No Matches
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.
5MeteoIO is free software: you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation, either version 3 of the License, or
8(at your option) any later version.
9
10MeteoIO is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License
16along 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//PugiXML, we temporarily disable warnings
30#ifdef __GNUC__
31 #pragma GCC diagnostic push
32 #pragma GCC diagnostic ignored "-Weffc++"
33 #pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
34 #include <snowpack/plugins/pugixml/pugixml.hpp>
35 #pragma GCC diagnostic pop
36#elif defined __clang__
37 #pragma clang diagnostic push
38 #pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec"
39 #include <snowpack/plugins/pugixml/pugixml.hpp>
40 #pragma clang diagnostic pop
41#endif
42
43
53
54 public:
55 CaaMLIO(const SnowpackConfig& i_cfg, const RunInfo& run_info);
57
58 virtual bool snowCoverExists(const std::string& i_snowfile, const std::string& stationID) const override;
59
60 virtual void readSnowCover(const std::string& i_snowfile, const std::string& stationID,
61 SN_SNOWSOIL_DATA& SSdata, ZwischenData& Zdata, const bool& read_salinity) override;
62
63 virtual void writeSnowCover(const mio::Date& date, const SnowStation& Xdata,
64 const ZwischenData& Zdata, const bool& forbackup=false) override;
65
66 virtual void writeTimeSeries(const SnowStation& Xdata, const SurfaceFluxes& Sdata, const CurrentMeteo& Mdata,
67 const ProcessDat& Hdata, const double wind_trans24) override;
68
69 virtual void writeProfile(const mio::Date& date, const SnowStation& Xdata) override;
70
71 virtual bool writeHazardData(const std::string& stationID, const std::vector<ProcessDat>& Hdata,
72 const std::vector<ProcessInd>& Hdata_ind, const size_t& num) override;
73
74 private:
75 void cleanup() noexcept;
76 void init(const SnowpackConfig& cfg);
77
78 void setBasicHeader(const SnowStation& Xdata, const std::string& fields, smet::SMETWriter& smet_writer) const;
79 void setSnoSmetHeader(const SnowStation& Xdata, const SN_SNOWSOIL_DATA& SSdata, const mio::Date& date, smet::SMETWriter& smet_writer) const;
80 void setFormatting(const size_t& nr_solutes, std::vector<int>& vec_width, std::vector<int>& vec_precision) const;
81 std::string getFilenamePrefix(const std::string& fnam, const std::string& path, const bool addexp=true) const;
82
83 //functions for reading caaml-files:
84 bool read_snocaaml(const std::string& snofilename, const std::string& stationID, SN_SNOWSOIL_DATA& SSdata);
85 void openIn_CAAML(const std::string& in_snowfile);
86 mio::Date xmlGetDate();
87 mio::StationData xmlGetStationData(const std::string& stationID);
88 void setCustomSnowSoil(SN_SNOWSOIL_DATA& Xdata);
89 void xmlReadLayerData(SN_SNOWSOIL_DATA& SSdata);
90 void adjustToSlopeAngle(SN_SNOWSOIL_DATA& SSdata); // #cmb
91 LayerData xmlGetLayer(pugi::xml_node nodeLayer, std::string& grainFormCode);
92 bool getLayersDir();
93 void getAndSetProfile(const std::string path, const std::string name,const bool directionTopDown,
94 const bool isRangeMeasurement,std::vector<LayerData>& Layers);
95 bool xmlGetProfile(const std::string path, const std::string name, std::vector<double>& zVec, std::vector<double>& valVec);
96 void estimateValidFormationTimesIfNotSetYet(std::vector<LayerData> &Layers, const mio::Date);
97 void checkAllDataForConsistencyAndSetMissingValues( SN_SNOWSOIL_DATA& SSdata );
98 bool checkWhatWasReadIn(SN_SNOWSOIL_DATA& SSdata);
99
100 //functions for writing caaml-file:
101 void writeSnowFile(const std::string& snofilename, const mio::Date& date, const SnowStation& Xdata);
102 void writeCustomSnowSoil(pugi::xml_node& node, const SnowStation& Xdata);
103 void writeLayers(pugi::xml_node& node, const SnowStation& Xdata);
104 void writeCustomLayerData(pugi::xml_node& node, const ElementData& Edata, const NodeData& Ndata);
105 void writeProfiles(pugi::xml_node& node, const SnowStation& Xdata);
106 void writeStationData(pugi::xml_node& root, const SnowStation& Xdata);
107
108 double lwc_codeToVal(const char* code);
109 std::string lwc_valToCode(const double val);
110 double hardness_codeToVal(char* code);
111 std::string hardness_valToCode(const double code);
112 void grainShape_codeToVal(const std::string& code, double &sp, double &dd, unsigned short int &mk);
113 std::string grainShape_valToAbbrev(const unsigned int var);
114 std::string grainShape_valToAbbrev_old(const double* var);
115
116 //xml functions:
117 double xmlReadValueFromPath(const std::string& xpath, const std::string& property, const double& dflt);
118 int xmlReadValueFromPath(const std::string& xpath, const std::string& property, const int& dflt);
119 void xmlWriteElement(pugi::xml_node& node, const char* name, const char* content, const char* att_name, const char* att_val);
120 bool xmlDoesPathExist(const std::string& path);
121 bool xmlReadValueFromNode(const pugi::xml_node node, const std::string propertyName, double& variableToSet,
122 const std::string unitOut = "",const std::string unitMeasured = "", const double factor=1.0);
123 std::string xmlReadAttributeFromPath (const std::string& path, const std::string& attributeName);
124
125 const RunInfo info;
126 std::string i_snowpath, o_snowpath, experiment;
127 double i_max_element_thickness;
128 bool caaml_writeout_as_readin, haz_write;
129 /*static const*/ double in_tz; //plugin specific time zones
130
131 pugi::xml_document inDoc;
132 pugi::xml_encoding inEncoding;
133
134 //charEncoding in_encoding;
135 static const char *xml_ns_caaml, *xml_ns_abrev_caaml;
136 static const char *xml_ns_gml, *xml_ns_abrev_gml;
137 static const char *xml_ns_xsi, *xml_ns_abrev_xsi;
138 static const char *xml_ns_slf, *xml_ns_abrev_slf;
139 static const char *xml_ns_snp, *xml_ns_abrev_snp;
140 static const std::string TimeData_xpath, StationMetaData_xpath, SnowData_xpath;
141
142 static const int num_max_len = 10;
143 char layerDepthTopStr[num_max_len], layerThicknessStr[num_max_len], layerValStr[num_max_len], valueStr[num_max_len];
144 double hoarDensitySurf;
145 std::vector<std::string> grainForms;
146};
147
148#endif //End of CAAMLIO.h
Reading snow profile data in CAAML format. Reads in CAAML snow profile data, the CAA-IACS internation...
Definition CaaMLIO.h:52
virtual bool snowCoverExists(const std::string &i_snowfile, const std::string &stationID) const override
This routine checks if the specified snow cover data exists.
Definition CaaMLIO.cc:494
virtual void writeProfile(const mio::Date &date, const SnowStation &Xdata) override
Definition CaaMLIO.cc:1383
virtual void writeTimeSeries(const SnowStation &Xdata, const SurfaceFluxes &Sdata, const CurrentMeteo &Mdata, const ProcessDat &Hdata, const double wind_trans24) override
Definition CaaMLIO.cc:1377
virtual void writeSnowCover(const mio::Date &date, const SnowStation &Xdata, const ZwischenData &Zdata, const bool &forbackup=false) override
This routine writes the status of the snow cover at program termination and at specified backup times...
Definition CaaMLIO.cc:1048
CaaMLIO(const CaaMLIO &)
virtual bool writeHazardData(const std::string &stationID, const std::vector< ProcessDat > &Hdata, const std::vector< ProcessInd > &Hdata_ind, const size_t &num) override
Definition CaaMLIO.cc:1388
virtual void readSnowCover(const std::string &i_snowfile, const std::string &stationID, SN_SNOWSOIL_DATA &SSdata, ZwischenData &Zdata, const bool &read_salinity) override
This routine reads the status of the snow cover at program start.
Definition CaaMLIO.cc:513
CurrentMeteo is the class of interpolated meteo data for the current calculation time step It contai...
Definition DataClasses.h:83
ELEMENT DATA used as a pointer in the SnowStation structure NOTE on M below: this is the mass of an e...
Definition DataClasses.h:284
Parameters of the different layers of the snowpack.
Definition DataClasses.h:186
NODAL DATA used as a pointer in the SnowStation structure.
Definition DataClasses.h:392
class to collect the information about the current simulation (version, date)
Definition DataClasses.h:848
SN_SNOWSOIL_DATA includes all important station parameters as well as LayerData.
Definition DataClasses.h:230
Definition DataClasses.h:604
Definition SnowpackConfig.h:28
Definition SnowpackIOInterface.h:27
Definition DataClasses.h:732
ZwischenData contains "memory" information mainly for operational use It is used to prepare some para...
Definition DataClasses.h:65
Structure of double values for output to SDB.
Definition Hazard.h:37