My Project
Loading...
Searching...
No Matches
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/WagHysteresisConfig.hpp>
32#include <opm/input/eclipse/EclipseState/Grid/FieldPropsManager.hpp>
33#include <opm/input/eclipse/EclipseState/Grid/EclipseGrid.hpp>
34#include <opm/input/eclipse/EclipseState/Grid/FaultCollection.hpp>
35#include <opm/input/eclipse/EclipseState/Grid/NNC.hpp>
36#include <opm/input/eclipse/EclipseState/Grid/TransMult.hpp>
37#include <opm/input/eclipse/EclipseState/Grid/LgrCollection.hpp>
38#include <opm/input/eclipse/EclipseState/Runspec.hpp>
39#include <opm/input/eclipse/EclipseState/Tables/TableManager.hpp>
40#include <opm/input/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp>
41#include <opm/input/eclipse/Units/UnitSystem.hpp>
42
43namespace Opm {
44 class Deck;
45 class DeckKeyword;
46 class InitConfig;
47 class IOConfig;
48 class DeckSection;
49} // namespace Opm
50
51namespace Opm { namespace RestartIO {
52 class RstAquifer;
53}} // namespace Opm::RestartIO
54
55namespace Opm {
56
58 public:
59 enum EnabledTypes {
60 IntProperties = 0x01,
61 DoubleProperties = 0x02,
62
63 AllProperties = IntProperties | DoubleProperties
64 };
65
66 EclipseState() = default;
67 explicit EclipseState(const Deck& deck);
68 virtual ~EclipseState() = default;
69
70 const IOConfig& getIOConfig() const;
71 IOConfig& getIOConfig();
72
73 const InitConfig& getInitConfig() const;
74 InitConfig& getInitConfig();
75
76 const SimulationConfig& getSimulationConfig() const;
77 virtual const EclipseGrid& getInputGrid() const;
78
79 const FaultCollection& getFaults() const;
80 const TransMult& getTransMult() const;
81 TransMult& getTransMult();
82
85 const NNC& getInputNNC() const;
86 void appendInputNNC(const std::vector<NNCdata>& nnc);
87 void setInputNNC(const NNC& nnc);
88 bool hasInputNNC() const;
89
90 // The potentially parallelized field properties
91 virtual const FieldPropsManager& fieldProps() const;
92 // Always the non-parallel field properties
93 virtual const FieldPropsManager& globalFieldProps() const;
94 const TableManager& getTableManager() const;
95 const EclipseConfig& getEclipseConfig() const;
96 const EclipseConfig& cfg() const;
97 const GridDims& gridDims() const;
98
99 const LgrCollection& getLgrs() const;
100 bool hasInputLGR() const;
101
102 // the unit system used by the deck. note that it is rarely needed
103 // to convert units because internally to opm-parser everything is
104 // represented by SI units.
105 const UnitSystem& getDeckUnitSystem() const;
106 const UnitSystem& getUnits() const;
107
108 std::string getTitle() const;
109
110 void apply_schedule_keywords(const std::vector<DeckKeyword>& keywords);
111
112 const Runspec& runspec() const;
113 const AquiferConfig& aquifer() const;
114 const TracerConfig& tracer() const;
115 const MICPpara& getMICPpara() const;
116 const WagHysteresisConfig& getWagHysteresis() const;
117
118 void reset_actnum(const std::vector<int>& new_actnum);
119 void pruneDeactivatedAquiferConnections(const std::vector<std::size_t>& deactivated_cells);
120 void loadRestartAquifers(const RestartIO::RstAquifer& aquifers);
121 // TODO: it is possible that the aquifer are opened through SCHEDULE and not specified in the SOLUTION section
122 // For the ease of the implementation, we create inactive aquifer in the AquiferConfig.
123 // At the moment, it only works for Constant Flux Aquifers(AQUFLUX) as indicated by the function name
124 // When we know and decide to handle the same for AQUFETP and AQUCT, this part will be refactored
125 void appendAqufluxSchedule(const std::unordered_set<int>& ids);
126
127 template<class Serializer>
128 void serializeOp(Serializer& serializer)
129 {
130 // FieldPropsManager is handled through a different mechanism.
131 // Do not add the member (i.e., field_props) to this list.
132 serializer(m_tables);
133 serializer(m_runspec);
134 serializer(m_eclipseConfig);
135 serializer(m_deckUnitSystem);
136 serializer(m_inputNnc);
137 serializer(m_gridDims);
138 serializer(m_lgrs);
139 serializer(m_simulationConfig);
140 serializer(aquifer_config);
141 serializer(m_transMult);
142 serializer(m_faults);
143 serializer(m_title);
144 serializer(tracer_config);
145 serializer(m_micppara);
146 serializer(wag_hyst_config);
147 }
148
149 static bool rst_cmp(const EclipseState& full_state, const EclipseState& rst_state);
150
151
152 private:
153 void initIOConfigPostSchedule(const Deck& deck);
154 void assignRunTitle(const Deck& deck);
155 void reportNumberOfActivePhases() const;
156 void initLgrs(const Deck& deck);
157 void conveyNumericalAquiferEffects();
158 void applyMULTXYZ();
159 void initFaults(const Deck& deck);
160 void initPara(const Deck& deck);
161
162 void setMULTFLT(const Opm::DeckSection& section, bool edit = false);
163
164 void complainAboutAmbiguousKeyword(const Deck& deck,
165 const std::string& keywordName);
166
167 protected:
168 TableManager m_tables;
169 Runspec m_runspec;
170 EclipseConfig m_eclipseConfig;
171 UnitSystem m_deckUnitSystem;
172 EclipseGrid m_inputGrid;
173 NNC m_inputNnc;
174 GridDims m_gridDims;
175 FieldPropsManager field_props;
176 LgrCollection m_lgrs;
177 SimulationConfig m_simulationConfig;
178 AquiferConfig aquifer_config;
179 TransMult m_transMult;
180 TracerConfig tracer_config;
181 MICPpara m_micppara;
182 WagHysteresisConfig wag_hyst_config;
183
184 std::string m_title{};
185 FaultCollection m_faults{};
186 };
187} // namespace Opm
188
189#endif // OPM_ECLIPSE_STATE_HPP
Definition AquiferConfig.hpp:46
Definition DeckSection.hpp:47
Definition Deck.hpp:49
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:55
Definition EclipseState.hpp:57
const NNC & getInputNNC() const
non-neighboring connections the non-standard adjacencies as specified in input deck
Definition FaultCollection.hpp:35
Definition FieldPropsManager.hpp:41
Definition GridDims.hpp:31
Definition IOConfig.hpp:147
Definition InitConfig.hpp:32
Definition LgrCollection.hpp:33
Definition MICPpara.hpp:26
Definition NNC.hpp:103
Definition aquifer.hpp:45
Definition Runspec.hpp:449
Class for (de-)serializing.
Definition Serializer.hpp:84
Definition SimulationConfig.hpp:32
Definition TableManager.hpp:66
Definition TracerConfig.hpp:33
Definition TransMult.hpp:48
Definition UnitSystem.hpp:33
Definition WagHysteresisConfig.hpp:27
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30