opm-common
Solution.hpp
1 /*
2  Copyright 2016 Statoil ASA.
3 
4  This file is part of the Open Porous Media project (OPM).
5 
6  OPM is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  OPM is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with OPM. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef OPM_OUTPUT_DATA_SOLUTION_HPP
21 #define OPM_OUTPUT_DATA_SOLUTION_HPP
22 
23 #include <opm/output/data/Cells.hpp>
24 
25 #include <opm/input/eclipse/Units/UnitSystem.hpp>
26 
27 #include <map>
28 #include <string>
29 #include <utility>
30 #include <vector>
31 
32 namespace Opm { namespace data {
33 
34 class Solution : public std::map<std::string, data::CellData>
35 {
36  using Base = std::map<std::string, data::CellData>;
37 
38  public:
39  Solution() = default;
40  explicit Solution( bool si );
41  using Base::map;
42  using Base::insert;
43 
44  bool has( const std::string& ) const;
45 
46  /*
47  * Get the data field of the struct matching the requested key. Will
48  * throw std::out_of_range if they key does not exist.
49  */
50  template<class T>
51  std::vector<T>& data(const std::string& );
52 
53  template<class T>
54  const std::vector<T>& data(const std::string& ) const;
55 
56  std::pair<iterator, bool> insert(std::string name,
57  UnitSystem::measure,
58  std::vector<double>,
59  TargetType );
60 
61  std::pair<iterator, bool> insert(std::string name,
62  UnitSystem::measure,
63  std::vector<float>,
64  TargetType );
65 
66  std::pair<iterator, bool> insert(std::string name,
67  std::vector<int>,
68  TargetType );
69 
70  void convertToSI( const UnitSystem& );
71  void convertFromSI( const UnitSystem& );
72 
73  template<class Serializer>
74  void serializeOp(Serializer& serializer)
75  {
76  serializer(static_cast<Base&>(*this));
77  serializer(si);
78  }
79 
80  static Solution serializationTestObject()
81  {
82  Solution sol;
83  sol.si = false;
84  sol.insert({"test_data", CellData::serializationTestObject()});
85 
86  return sol;
87  }
88 
89  private:
90  bool si = true;
91 };
92 
93 }} // namespace Opm::data
94 
95 #endif // OPM_OUTPUT_DATA_SOLUTION_HPP
Definition: Solution.hpp:34
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: UnitSystem.hpp:34
Class for (de-)serializing.
Definition: Serializer.hpp:94