My Project
EclipseState.hpp
1 /*
2  Copyright 2013 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_ECLIPSE_STATE_HPP
21 #define OPM_ECLIPSE_STATE_HPP
22 
23 #include <cstddef>
24 #include <memory>
25 #include <vector>
26 
27 #include <opm/input/eclipse/EclipseState/Aquifer/AquiferConfig.hpp>
28 #include <opm/input/eclipse/EclipseState/EclipseConfig.hpp>
29 #include <opm/input/eclipse/EclipseState/TracerConfig.hpp>
30 #include <opm/input/eclipse/EclipseState/MICPpara.hpp>
31 #include <opm/input/eclipse/EclipseState/Grid/FieldPropsManager.hpp>
32 #include <opm/input/eclipse/EclipseState/Grid/EclipseGrid.hpp>
33 #include <opm/input/eclipse/EclipseState/Grid/FaultCollection.hpp>
34 #include <opm/input/eclipse/EclipseState/Grid/NNC.hpp>
35 #include <opm/input/eclipse/EclipseState/Grid/TransMult.hpp>
36 #include <opm/input/eclipse/EclipseState/Runspec.hpp>
37 #include <opm/input/eclipse/EclipseState/Tables/TableManager.hpp>
38 #include <opm/input/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp>
39 #include <opm/input/eclipse/Units/UnitSystem.hpp>
40 
41 namespace Opm {
42  class Deck;
43  class DeckKeyword;
44  class InitConfig;
45  class IOConfig;
46  class DeckSection;
47 } // namespace Opm
48 
49 namespace Opm { namespace RestartIO {
50  class RstAquifer;
51 }} // namespace Opm::RestartIO
52 
53 namespace Opm {
54 
55  class EclipseState {
56  public:
57  enum EnabledTypes {
58  IntProperties = 0x01,
59  DoubleProperties = 0x02,
60 
61  AllProperties = IntProperties | DoubleProperties
62  };
63 
64  EclipseState() = default;
65  explicit EclipseState(const Deck& deck);
66  virtual ~EclipseState() = default;
67 
68  const IOConfig& getIOConfig() const;
69  IOConfig& getIOConfig();
70 
71  const InitConfig& getInitConfig() const;
72  InitConfig& getInitConfig();
73 
74  const SimulationConfig& getSimulationConfig() const;
75  virtual const EclipseGrid& getInputGrid() const;
76 
77  const FaultCollection& getFaults() const;
78  const TransMult& getTransMult() const;
79  TransMult& getTransMult();
80 
83  const NNC& getInputNNC() const;
84  void appendInputNNC(const std::vector<NNCdata>& nnc);
85  void setInputNNC(const NNC& nnc);
86  bool hasInputNNC() const;
87 
88  // The potentially parallelized field properties
89  virtual const FieldPropsManager& fieldProps() const;
90  // Always the non-parallel field properties
91  virtual const FieldPropsManager& globalFieldProps() const;
92  const TableManager& getTableManager() const;
93  const EclipseConfig& getEclipseConfig() const;
94  const EclipseConfig& cfg() const;
95  const GridDims& gridDims() const;
96 
97  // the unit system used by the deck. note that it is rarely needed
98  // to convert units because internally to opm-parser everything is
99  // represented by SI units.
100  const UnitSystem& getDeckUnitSystem() const;
101  const UnitSystem& getUnits() const;
102 
103  std::string getTitle() const;
104 
105  void apply_schedule_keywords(const std::vector<DeckKeyword>& keywords);
106 
107  const Runspec& runspec() const;
108  const AquiferConfig& aquifer() const;
109  const TracerConfig& tracer() const;
110  const MICPpara& getMICPpara() const;
111 
112  void reset_actnum(const std::vector<int>& new_actnum);
113  void pruneDeactivatedAquiferConnections(const std::vector<std::size_t>& deactivated_cells);
114  void loadRestartAquifers(const RestartIO::RstAquifer& aquifers);
115 
116  template<class Serializer>
117  void serializeOp(Serializer& serializer)
118  {
119  // FieldPropsManager is handled through a different mechanism.
120  // Do not add the member (i.e., field_props) to this list.
121  serializer(m_tables);
122  serializer(m_runspec);
123  serializer(m_eclipseConfig);
124  serializer(m_deckUnitSystem);
125  serializer(m_inputNnc);
126  serializer(m_gridDims);
127  serializer(m_simulationConfig);
128  serializer(aquifer_config);
129  serializer(m_transMult);
130  serializer(m_faults);
131  serializer(m_title);
132  serializer(tracer_config);
133  serializer(m_micppara);
134  }
135 
136  static bool rst_cmp(const EclipseState& full_state, const EclipseState& rst_state);
137 
138 
139  private:
140  void initIOConfigPostSchedule(const Deck& deck);
141  void assignRunTitle(const Deck& deck);
142  void reportNumberOfActivePhases() const;
143  void conveyNumericalAquiferEffects();
144  void applyMULTXYZ();
145  void initFaults(const Deck& deck);
146  void initPara(const Deck& deck);
147 
148  void setMULTFLT(const Opm::DeckSection& section);
149 
150  void complainAboutAmbiguousKeyword(const Deck& deck,
151  const std::string& keywordName);
152 
153  protected:
154  TableManager m_tables;
155  Runspec m_runspec;
156  EclipseConfig m_eclipseConfig;
157  UnitSystem m_deckUnitSystem;
158  EclipseGrid m_inputGrid;
159  NNC m_inputNnc;
160  GridDims m_gridDims;
161  FieldPropsManager field_props;
162  SimulationConfig m_simulationConfig;
163  AquiferConfig aquifer_config;
164  TransMult m_transMult;
165  TracerConfig tracer_config;
166  MICPpara m_micppara;
167 
168  std::string m_title{};
169  FaultCollection m_faults{};
170  };
171 } // namespace Opm
172 
173 #endif // OPM_ECLIPSE_STATE_HPP
Definition: AquiferConfig.hpp:44
Definition: DeckSection.hpp:46
Definition: Deck.hpp:63
Definition: EclipseConfig.hpp:31
About cell information and dimension: The actual grid information is held in a pointer to an ERT ecl_...
Definition: EclipseGrid.hpp:54
Definition: EclipseState.hpp:55
const NNC & getInputNNC() const
non-neighboring connections the non-standard adjacencies as specified in input deck
Definition: FaultCollection.hpp:35
Definition: FieldPropsManager.hpp:38
Definition: GridDims.hpp:31
Definition: IOConfig.hpp:147
Definition: InitConfig.hpp:32
Definition: MICPpara.hpp:26
Definition: NNC.hpp:103
Definition: aquifer.hpp:45
Definition: Runspec.hpp:453
Class for (de-)serializing.
Definition: Serializer.hpp:75
Definition: SimulationConfig.hpp:32
Definition: TableManager.hpp:65
Definition: TracerConfig.hpp:31
Definition: TransMult.hpp:47
Definition: UnitSystem.hpp:33
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29