21 #ifndef OPM_TABLE_MANAGER_HPP 22 #define OPM_TABLE_MANAGER_HPP 24 #include <opm/input/eclipse/EclipseState/Tables/Aqudims.hpp> 25 #include <opm/input/eclipse/EclipseState/Tables/BrineDensityTable.hpp> 26 #include <opm/input/eclipse/EclipseState/Tables/DenT.hpp> 27 #include <opm/input/eclipse/EclipseState/Tables/Eqldims.hpp> 28 #include <opm/input/eclipse/EclipseState/Tables/FlatTable.hpp> 29 #include <opm/input/eclipse/EclipseState/Tables/JFunc.hpp> 30 #include <opm/input/eclipse/EclipseState/Tables/JouleThomson.hpp> 31 #include <opm/input/eclipse/EclipseState/Tables/MiscTable.hpp> 32 #include <opm/input/eclipse/EclipseState/Tables/MsfnTable.hpp> 33 #include <opm/input/eclipse/EclipseState/Tables/PlymwinjTable.hpp> 34 #include <opm/input/eclipse/EclipseState/Tables/PlyshlogTable.hpp> 35 #include <opm/input/eclipse/EclipseState/Tables/PmiscTable.hpp> 36 #include <opm/input/eclipse/EclipseState/Tables/Ppcwmax.hpp> 37 #include <opm/input/eclipse/EclipseState/Tables/PvtgTable.hpp> 38 #include <opm/input/eclipse/EclipseState/Tables/PvtgwoTable.hpp> 39 #include <opm/input/eclipse/EclipseState/Tables/PvtgwTable.hpp> 40 #include <opm/input/eclipse/EclipseState/Tables/PvtoTable.hpp> 41 #include <opm/input/eclipse/EclipseState/Tables/PvtsolTable.hpp> 42 #include <opm/input/eclipse/EclipseState/Tables/PvtwsaltTable.hpp> 43 #include <opm/input/eclipse/EclipseState/Tables/Regdims.hpp> 44 #include <opm/input/eclipse/EclipseState/Tables/Rock2dTable.hpp> 45 #include <opm/input/eclipse/EclipseState/Tables/Rock2dtrTable.hpp> 46 #include <opm/input/eclipse/EclipseState/Tables/RocktabTable.hpp> 47 #include <opm/input/eclipse/EclipseState/Tables/RwgsaltTable.hpp> 48 #include <opm/input/eclipse/EclipseState/Tables/SgcwmisTable.hpp> 49 #include <opm/input/eclipse/EclipseState/Tables/SkprpolyTable.hpp> 50 #include <opm/input/eclipse/EclipseState/Tables/SkprwatTable.hpp> 51 #include <opm/input/eclipse/EclipseState/Tables/SolventDensityTable.hpp> 52 #include <opm/input/eclipse/EclipseState/Tables/SorwmisTable.hpp> 53 #include <opm/input/eclipse/EclipseState/Tables/StandardCond.hpp> 54 #include <opm/input/eclipse/EclipseState/Tables/Tabdims.hpp> 55 #include <opm/input/eclipse/EclipseState/Tables/TableContainer.hpp> 56 #include <opm/input/eclipse/EclipseState/Tables/TLMixpar.hpp> 78 const TableContainer& getTables(
const std::string& tableName )
const;
79 const TableContainer& operator[](
const std::string& tableName)
const;
80 bool hasTables(
const std::string& tableName )
const;
82 const Tabdims& getTabdims()
const;
83 const Eqldims& getEqldims()
const;
84 const Aqudims& getAqudims()
const;
85 const Regdims& getRegdims()
const;
87 const Ppcwmax& getPpcwmax()
const;
91 std::size_t numFIPRegions()
const;
151 const JFunc& getJFunc()
const;
153 const std::vector<PvtgTable>& getPvtgTables()
const;
154 const std::vector<PvtgwTable>& getPvtgwTables()
const;
155 const std::vector<PvtgwoTable>& getPvtgwoTables()
const;
156 const std::vector<PvtoTable>& getPvtoTables()
const;
157 const std::vector<PvtsolTable>& getPvtsolTables()
const;
158 const std::vector<Rock2dTable>& getRock2dTables()
const;
159 const std::vector<Rock2dtrTable>& getRock2dtrTables()
const;
163 const DenT& WatDenT()
const;
164 const DenT& GasDenT()
const;
165 const DenT& OilDenT()
const;
170 std::size_t gas_comp_index()
const;
172 const std::vector<PvtwsaltTable>& getPvtwSaltTables()
const;
173 const std::vector<RwgsaltTable>& getRwgSaltTables()
const;
174 const std::vector<BrineDensityTable>& getBrineDensityTables()
const;
175 const std::vector<SolventDensityTable>& getSolventDensityTables()
const;
191 const std::map<int, PlymwinjTable>& getPlymwinjTables()
const;
192 const std::map<int, SkprwatTable>& getSkprwatTables()
const;
193 const std::map<int, SkprpolyTable>& getSkprpolyTables()
const;
194 const std::map<std::string, TableContainer>& getSimpleTables()
const;
211 double rtemp()
const;
213 double salinity()
const;
215 bool diffMoleFraction()
const;
219 template<
class Serializer>
222 auto simpleTables = m_simpleTables;
223 auto split = splitSimpleTable(simpleTables);
224 serializer(simpleTables);
225 serializer(split.plyshMax);
226 serializer(split.plyshMap);
227 serializer(split.rockMax);
228 serializer(split.rockMap);
229 serializer(m_pvtgTables);
230 serializer(m_pvtgwTables);
231 serializer(m_pvtgwoTables);
232 serializer(m_pvtoTables);
233 serializer(m_pvtsolTables);
234 serializer(m_rock2dTables);
235 serializer(m_rock2dtrTables);
236 serializer(m_pvtwTable);
237 serializer(m_pvcdoTable);
238 serializer(m_densityTable);
239 serializer(m_diffCoeffTable);
240 serializer(m_diffCoeffWatTable);
241 serializer(m_diffCoeffGasTable);
242 serializer(m_plyvmhTable);
243 serializer(m_rockTable);
244 serializer(m_plmixparTable);
245 serializer(m_shrateTable);
246 serializer(m_stone1exTable);
247 serializer(m_viscrefTable);
248 serializer(m_watdentTable);
249 serializer(m_sgofletTable);
250 serializer(m_swofletTable);
251 serializer(m_pvtwsaltTables);
252 serializer(m_rwgsaltTables);
253 serializer(m_bdensityTables);
254 serializer(m_sdensityTables);
255 serializer(m_plymwinjTables);
256 serializer(m_skprwatTables);
257 serializer(m_skprpolyTables);
258 serializer(m_tabdims);
259 serializer(m_regdims);
260 serializer(m_eqldims);
261 serializer(m_aqudims);
262 serializer(hasImptvd);
263 serializer(hasEnptvd);
264 serializer(hasEqlnum);
265 serializer(hasShrate);
274 serializer(m_gas_comp_index);
276 serializer(m_salinity);
277 serializer(m_diff_mole_fraction);
278 serializer(m_tlmixpar);
279 serializer(m_ppcwmax);
281 m_simpleTables = simpleTables;
282 if (split.plyshMax > 0) {
284 for (
const auto& it : split.plyshMap) {
285 container.addTable(it.first, it.second);
287 m_simpleTables.insert(std::make_pair(
"PLYSHLOG", container));
289 if (split.rockMax > 0) {
291 for (
const auto& it : split.rockMap) {
292 container.addTable(it.first, it.second);
294 m_simpleTables.insert(std::make_pair(
"ROCKTAB", container));
300 TableContainer& forceGetTables(
const std::string& tableName , std::size_t numTables);
302 void complainAboutAmbiguousKeyword(
const Deck& deck,
const std::string& keywordName);
304 void addTables(
const std::string& tableName , std::size_t numTables);
305 void initSimpleTables(
const Deck& deck);
306 void initRTempTables(
const Deck& deck);
307 void initZmfvdTables(
const Deck& deck);
308 void initCompvdTables(
const Deck& deck);
309 void initDims(
const Deck& deck);
310 void initRocktabTables(
const Deck& deck);
312 void initPlymaxTables(
const Deck& deck);
313 void initRsconstTables(
const Deck& deck);
314 void initPlyrockTables(
const Deck& deck);
315 void initPlyshlogTables(
const Deck& deck);
317 void initPlymwinjTables(
const Deck& deck);
318 void initSkprwatTables(
const Deck& deck);
319 void initSkprpolyTables(
const Deck& deck);
323 template <
class TableType>
324 void initRockTables(
const Deck& deck,
const std::string& keywordName, std::vector<TableType>& rocktable );
326 template <
class TableType>
327 void initPvtwsaltTables(
const Deck& deck, std::vector<TableType>& pvtwtables );
329 template <
class TableType>
330 void initRwgsaltTables(
const Deck& deck, std::vector<TableType>& rwgtables );
332 template <
class TableType>
333 void initBrineTables(
const Deck& deck, std::vector<TableType>& brinetables );
335 void initSolventTables(
const Deck& deck, std::vector<SolventDensityTable>& solventtables);
340 template <
class TableType>
341 void initSimpleTableContainerWithJFunc(
const Deck& deck,
342 const std::string& keywordName,
343 const std::string& tableName,
344 std::size_t numTables);
346 template <
class TableType>
347 void initSimpleTableContainer(
const Deck& deck,
348 const std::string& keywordName,
349 const std::string& tableName,
350 std::size_t numTables);
352 template <
class TableType>
353 void initSimpleTableContainer(
const Deck& deck,
354 const std::string& keywordName,
355 std::size_t numTables);
357 template <
class TableType>
358 void initSimpleTableContainerWithJFunc(
const Deck& deck,
359 const std::string& keywordName,
360 std::size_t numTables);
362 template <
class TableType>
363 void initSimpleTable(
const Deck& deck,
364 const std::string& keywordName,
365 std::vector<TableType>& tableVector);
367 template <
class TableType>
368 void initFullTables(
const Deck& deck,
369 const std::string& keywordName,
370 std::vector<TableType>& tableVector);
372 void checkPVTOMonotonicity(
const Deck& deck)
const;
374 void logPVTOMonotonicityFailure(
const Deck& deck,
375 const std::size_t tableID,
376 const std::vector<PvtoTable::FlippedFVF>& flipped_Bo)
const;
378 std::map<std::string , TableContainer> m_simpleTables;
379 std::vector<PvtgTable> m_pvtgTables;
380 std::vector<PvtgwTable> m_pvtgwTables;
381 std::vector<PvtgwoTable> m_pvtgwoTables;
382 std::vector<PvtoTable> m_pvtoTables;
383 std::vector<PvtsolTable> m_pvtsolTables;
384 std::vector<Rock2dTable> m_rock2dTables;
385 std::vector<Rock2dtrTable> m_rock2dtrTables;
401 std::vector<PvtwsaltTable> m_pvtwsaltTables;
402 std::vector<RwgsaltTable> m_rwgsaltTables;
403 std::vector<BrineDensityTable> m_bdensityTables;
404 std::vector<SolventDensityTable> m_sdensityTables;
405 std::map<int, PlymwinjTable> m_plymwinjTables;
406 std::map<int, SkprwatTable> m_skprwatTables;
407 std::map<int, SkprpolyTable> m_skprpolyTables;
416 bool hasImptvd =
false;
417 bool hasEnptvd =
false;
418 bool hasEqlnum =
false;
419 bool hasShrate =
false;
420 std::optional<JFunc> jfunc;
429 std::size_t m_gas_comp_index = 77;
430 double m_rtemp {288.7056};
431 double m_salinity {0.0};
432 bool m_diff_mole_fraction {
true};
434 struct SplitSimpleTables {
435 std::size_t plyshMax = 0;
436 std::size_t rockMax = 0;
437 std::map<std::size_t, std::shared_ptr<PlyshlogTable>> plyshMap;
438 std::map<std::size_t, std::shared_ptr<RocktabTable>> rockMap;
441 SplitSimpleTables splitSimpleTable(std::map<std::string,TableContainer>& simpleTables);
Definition: FlatTable.hpp:363
bool useJFunc() const
deck has keyword "JFUNC" — Use Leverett's J Function for capillary pressure
Definition: TableManager.cpp:1398
Definition: FlatTable.hpp:534
bool useShrate() const
deck has keyword "SHRATE"
Definition: TableManager.cpp:1394
Definition: Aqudims.hpp:34
bool useEqlnum() const
deck has keyword "EQLNUM" — Equilibriation region numbers
Definition: TableManager.cpp:1390
Definition: FlatTable.hpp:617
Definition: JouleThomson.hpp:30
Definition: FlatTable.hpp:447
Definition: FlatTable.hpp:173
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: StandardCond.hpp:24
Definition: FlatTable.hpp:298
Definition: FlatTable.hpp:422
Definition: Ppcwmax.hpp:51
Definition: FlatTable.hpp:230
Definition: FlatTable.hpp:397
bool useImptvd() const
deck has keyword "IMPTVD" — Imbition end-point versus depth tables
Definition: TableManager.cpp:1382
Definition: FlatTable.hpp:338
Definition: FlatTable.hpp:267
Definition: FlatTable.hpp:607
Definition: TableManager.hpp:71
Definition: FlatTable.hpp:123
Definition: Eqldims.hpp:32
The TableContainer class implements a simple map:
Definition: TableContainer.hpp:60
Definition: TLMixpar.hpp:53
bool isSerializing() const
Returns true if we are currently doing a serialization operation.
Definition: Serializer.hpp:208
Class for (de-)serializing.
Definition: Serializer.hpp:95
Definition: Regdims.hpp:36
bool useEnptvd() const
deck has keyword "ENPTVD" — Saturation end-point versus depth tables
Definition: TableManager.cpp:1386
Definition: FlatTable.hpp:202
Definition: Tabdims.hpp:36
Definition: FlatTable.hpp:503