21#ifndef OPM_TABLE_MANAGER_HPP
22#define OPM_TABLE_MANAGER_HPP
184 template<
class Serializer>
187 auto simpleTables = m_simpleTables;
188 auto split = splitSimpleTable(simpleTables);
189 serializer.map(simpleTables);
190 serializer(split.plyshMax);
191 serializer.map(split.plyshMap);
192 serializer(split.rockMax);
193 serializer.map(split.rockMap);
194 serializer.vector(m_pvtgTables);
195 serializer.vector(m_pvtoTables);
196 serializer.vector(m_rock2dTables);
197 serializer.vector(m_rock2dtrTables);
209 serializer.vector(m_pvtwsaltTables);
210 serializer.vector(m_bdensityTables);
211 serializer.vector(m_sdensityTables);
212 serializer.map(m_plymwinjTables);
213 serializer.map(m_skprwatTables);
214 serializer.map(m_skprpolyTables);
219 serializer(hasImptvd);
220 serializer(hasEnptvd);
221 serializer(hasEqlnum);
222 serializer(hasShrate);
228 serializer(m_gas_comp_index);
230 if (!serializer.isSerializing()) {
231 m_simpleTables = simpleTables;
232 if (split.plyshMax > 0) {
234 for (
const auto& it : split.plyshMap) {
235 container.
addTable(it.first, it.second);
237 m_simpleTables.insert(std::make_pair(
"PLYSHLOG", container));
239 if (split.rockMax > 0) {
241 for (
const auto& it : split.rockMap) {
242 container.
addTable(it.first, it.second);
244 m_simpleTables.insert(std::make_pair(
"ROCKTAB", container));
252 void complainAboutAmbiguousKeyword(
const Deck& deck,
const std::string& keywordName);
254 void addTables(
const std::string& tableName ,
size_t numTables);
255 void initSimpleTables(
const Deck& deck);
256 void initRTempTables(
const Deck& deck);
257 void initDims(
const Deck& deck);
258 void initRocktabTables(
const Deck& deck);
259 void initGasvisctTables(
const Deck& deck);
261 void initPlymaxTables(
const Deck& deck);
262 void initPlyrockTables(
const Deck& deck);
263 void initPlyshlogTables(
const Deck& deck);
265 void initPlymwinjTables(
const Deck& deck);
266 void initSkprwatTables(
const Deck& deck);
267 void initSkprpolyTables(
const Deck& deck);
271 template <
class TableType>
272 void initRockTables(
const Deck& deck,
const std::string& keywordName, std::vector<TableType>& rocktable ) {
278 OpmLog::error(
"ROCKCOMP must be present if ROCK2DTR is used");
282 OpmLog::error(
"ROCKWNOD must be present if ROCK2DTR is used");
285 const auto& rockcompKeyword = deck.
getKeyword(
"ROCKCOMP");
286 const auto& record = rockcompKeyword.
getRecord( 0 );
287 size_t numTables = record.
getItem(
"NTROCC").
get<
int >(0);
288 rocktable.resize(numTables);
291 size_t numEntries =
keyword.size();
292 size_t regionIdx = 0;
294 for (
unsigned lineIdx = 0; lineIdx < numEntries; ++lineIdx) {
295 if (
keyword.getRecord(lineIdx).getItem(
"PRESSURE").hasValue(0)) {
296 rocktable[regionIdx].init(
keyword.getRecord(lineIdx), tableIdx);
303 assert(regionIdx == numTables - 1 );
307 template <
class TableType>
308 void initPvtwsaltTables(
const Deck& deck, std::vector<TableType>& pvtwtables ) {
311 pvtwtables.resize(numTables);
313 const auto&
keyword = deck.getKeyword(
"PVTWSALT");
314 size_t numEntries =
keyword.size();
315 size_t regionIdx = 0;
316 for (
unsigned lineIdx = 0; lineIdx < numEntries; lineIdx += 2) {
317 pvtwtables[regionIdx].init(
keyword.getRecord(lineIdx),
keyword.getRecord(lineIdx+1));
320 assert(regionIdx == numTables);
323 template <
class TableType>
324 void initBrineTables(
const Deck& deck, std::vector<TableType>& brinetables ) {
327 brinetables.resize(numTables);
329 const auto&
keyword = deck.getKeyword(
"BDENSITY");
330 size_t numEntries =
keyword.size();
331 assert(numEntries == numTables);
332 for (
unsigned lineIdx = 0; lineIdx < numEntries; ++lineIdx) {
333 brinetables[lineIdx].init(
keyword.getRecord(lineIdx));
338 void initSolventTables(
const Deck& deck, std::vector<SolventDensityTable>& solventtables);
343 template <
class TableType>
344 void initSimpleTableContainerWithJFunc(
const Deck& deck,
348 if (!deck.hasKeyword(keywordName))
351 auto& container = forceGetTables(tableName , numTables);
353 if (deck.count(keywordName) > 1) {
354 complainAboutAmbiguousKeyword(deck, keywordName);
358 const auto& tableKeyword = deck.getKeyword(keywordName);
359 for (
size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) {
360 const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem(
"DATA");
361 if (dataItem.data_size() > 0) {
362 std::shared_ptr<TableType> table = std::make_shared<TableType>( dataItem,
useJFunc() );
363 container.addTable( tableIdx , table );
370 template <
class TableType>
371 void initSimpleTableContainer(
const Deck& deck,
375 if (!deck.hasKeyword(keywordName))
378 auto& container = forceGetTables(tableName , numTables);
380 if (deck.count(keywordName) > 1) {
381 complainAboutAmbiguousKeyword(deck, keywordName);
385 const auto& tableKeyword = deck.getKeyword(keywordName);
386 for (
size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) {
387 const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem(
"DATA");
388 if (dataItem.data_size() > 0) {
389 std::shared_ptr<TableType> table = std::make_shared<TableType>( dataItem );
390 container.addTable( tableIdx , table );
395 template <
class TableType>
396 void initSimpleTableContainer(
const Deck& deck,
399 initSimpleTableContainer<TableType>(deck , keywordName , keywordName , numTables);
403 template <
class TableType>
404 void initSimpleTableContainerWithJFunc(
const Deck& deck,
407 initSimpleTableContainerWithJFunc<TableType>(deck , keywordName , keywordName , numTables);
412 template <
class TableType>
413 void initSimpleTable(
const Deck& deck,
415 std::vector<TableType>& tableVector) {
416 if (!deck.hasKeyword(keywordName))
419 if (deck.count(keywordName) > 1) {
420 complainAboutAmbiguousKeyword(deck, keywordName);
424 const auto& tableKeyword = deck.getKeyword(keywordName);
425 for (
size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) {
426 const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem(
"DATA");
427 if (dataItem.data_size() == 0) {
431 std::string msg =
"The first table for keyword "+keywordName+
" must be explicitly defined! Ignoring keyword";
432 const auto& location = tableKeyword.location();
436 tableVector.push_back(tableVector.back());
440 tableVector.push_back(TableType());
441 tableVector[tableIdx].init(dataItem);
446 template <
class TableType>
447 void initFullTables(
const Deck& deck,
449 std::vector<TableType>& tableVector) {
450 if (!deck.hasKeyword(keywordName))
453 if (deck.count(keywordName) > 1) {
454 complainAboutAmbiguousKeyword(deck, keywordName);
458 const auto& tableKeyword = deck.getKeyword(keywordName);
460 int numTables = TableType::numTables( tableKeyword );
461 for (
int tableIdx = 0; tableIdx < numTables; ++tableIdx)
462 tableVector.emplace_back( tableKeyword , tableIdx );
465 std::map<std::string , TableContainer> m_simpleTables;
466 std::vector<PvtgTable> m_pvtgTables;
467 std::vector<PvtoTable> m_pvtoTables;
468 std::vector<Rock2dTable> m_rock2dTables;
469 std::vector<Rock2dtrTable> m_rock2dtrTables;
470 PvtwTable m_pvtwTable;
471 PvcdoTable m_pvcdoTable;
472 DensityTable m_densityTable;
473 PlyvmhTable m_plyvmhTable;
474 RockTable m_rockTable;
475 PlmixparTable m_plmixparTable;
476 ShrateTable m_shrateTable;
477 Stone1exTable m_stone1exTable;
478 TlmixparTable m_tlmixparTable;
479 ViscrefTable m_viscrefTable;
480 WatdentTable m_watdentTable;
481 std::vector<PvtwsaltTable> m_pvtwsaltTables;
482 std::vector<BrineDensityTable> m_bdensityTables;
483 std::vector<SolventDensityTable> m_sdensityTables;
484 std::map<int, PlymwinjTable> m_plymwinjTables;
485 std::map<int, SkprwatTable> m_skprwatTables;
486 std::map<int, SkprpolyTable> m_skprpolyTables;
493 bool hasImptvd =
false;
494 bool hasEnptvd =
false;
495 bool hasEqlnum =
false;
496 bool hasShrate =
false;
497 std::shared_ptr<JFunc> jfunc;
503 std::size_t m_gas_comp_index;
506 struct SplitSimpleTables {
509 std::map<size_t, std::shared_ptr<PlyshlogTable>> plyshMap;
510 std::map<size_t, std::shared_ptr<RocktabTable>> rockMap;
513 SplitSimpleTables splitSimpleTable(std::map<std::string,TableContainer>& simpleTables);
const char *const string
Definition: cJSON.h:170
Definition: Aqudims.hpp:34
void serializeOp(Serializer &serializer)
Definition: Aqudims.hpp:133
T get(size_t index) const
const DeckRecord & getRecord(size_t index) const
bool hasKeyword(const DeckKeyword &keyword) const
DeckKeyword & getKeyword(size_t)
DeckItem & getItem(size_t index)
void serializeOp(Serializer &serializer)
Definition: DenT.hpp:62
Definition: Eqldims.hpp:31
void serializeOp(Serializer &serializer)
Definition: Eqldims.hpp:92
static void error(const std::string &message)
static void warning(const std::string &message)
Definition: Regdims.hpp:31
void serializeOp(Serializer &serializer)
Definition: Regdims.hpp:90
Definition: Serializer.hpp:38
Definition: parser/eclipse/EclipseState/Tables/tabdims.hpp:34
size_t getNumPVTTables() const
Definition: parser/eclipse/EclipseState/Tables/tabdims.hpp:83
void serializeOp(Serializer &serializer)
Definition: parser/eclipse/EclipseState/Tables/tabdims.hpp:113
Definition: TableContainer.hpp:34
void addTable(size_t tableNumber, std::shared_ptr< SimpleTable > table)
Definition: TableManager.hpp:63
const TableContainer & getRsvdTables() const
const TableContainer & getTlpmixpaTables() const
const TableContainer & getRocktabTables() const
const Regdims & getRegdims() const
const std::vector< Rock2dTable > & getRock2dTables() const
const TableContainer & getEnptvdTables() const
const PlmixparTable & getPlmixparTable() const
const TableContainer & getMsfnTables() const
const TableContainer & getWatvisctTables() const
const TableContainer & getPlyrockTables() const
const std::vector< Rock2dtrTable > & getRock2dtrTables() const
const TableContainer & getMiscTables() const
const TableContainer & getRockwnodTables() const
const Aqudims & getAqudims() const
bool operator==(const TableManager &data) const
const TableContainer & getImkrvdTables() const
const TableContainer & getSlgofTables() const
const std::map< int, PlymwinjTable > & getPlymwinjTables() const
const TableContainer & getTables(const std::string &tableName) const
bool useEqlnum() const
deck has keyword "EQLNUM" — Equilibriation region numbers
const TableContainer & getSgwfnTables() const
const TableContainer & getGasvisctTables() const
const Eqldims & getEqldims() const
size_t numFIPRegions() const
const std::vector< SolventDensityTable > & getSolventDensityTables() const
void serializeOp(Serializer &serializer)
Definition: TableManager.hpp:185
const TableContainer & getSpecrockTables() const
const ShrateTable & getShrateTable() const
const std::map< int, SkprpolyTable > & getSkprpolyTables() const
const std::vector< PvtoTable > & getPvtoTables() const
const TableContainer & getSwfnTables() const
const TableContainer & getSwofTables() const
const TableContainer & getPmiscTables() const
const TableContainer & operator[](const std::string &tableName) const
const TableContainer & getSgofTables() const
const TableContainer & getFoammobTables() const
bool useJFunc() const
deck has keyword "JFUNC" — Use Leverett's J Function for capillary pressure
const DenT & WatDenT() const
const PlyvmhTable & getPlyvmhTable() const
const WatdentTable & getWatdentTable() const
TableManager & operator=(const TableManager &data)
const TableContainer & getPvdgTables() const
const ViscrefTable & getViscrefTable() const
const TableContainer & getSorwmisTables() const
bool useEnptvd() const
deck has keyword "ENPTVD" — Saturation end-point versus depth tables
const TableContainer & getPlydhflfTables() const
const TableContainer & getEnkrvdTables() const
const std::map< std::string, TableContainer > & getSimpleTables() const
bool hasTables(const std::string &tableName) const
const TableContainer & getPdvdTables() const
TableManager(const Deck &deck)
const TableContainer & getFoamadsTables() const
std::size_t gas_comp_index() const
const TableContainer & getPlyshlogTables() const
const TableContainer & getSgcwmisTables() const
bool useImptvd() const
deck has keyword "IMPTVD" — Imbition end-point versus depth tables
const TlmixparTable & getTlmixparTable() const
const DenT & OilDenT() const
const PvcdoTable & getPvcdoTable() const
const Tabdims & getTabdims() const
bool useShrate() const
deck has keyword "SHRATE"
const TableContainer & getPvdsTables() const
const JFunc & getJFunc() const
const TableContainer & getImptvdTables() const
const TableContainer & getPbvdTables() const
const TableContainer & getSaltvdTables() const
const TableContainer & getPlyviscTables() const
const RockTable & getRockTable() const
const TableContainer & getPlyadsTables() const
const StandardCond & stCond() const
const TableContainer & getSof3Tables() const
const TableContainer & getAqutabTables() const
const TableContainer & getRvvdTables() const
const Stone1exTable & getStone1exTable() const
const PvtwTable & getPvtwTable() const
const std::map< int, SkprwatTable > & getSkprwatTables() const
const TableContainer & getPvdoTables() const
const std::vector< BrineDensityTable > & getBrineDensityTables() const
const std::vector< PvtwsaltTable > & getPvtwSaltTables() const
const std::vector< PvtgTable > & getPvtgTables() const
const TableContainer & getOilvisctTables() const
const TableContainer & getOverburdTables() const
const TableContainer & getRtempvdTables() const
const TableContainer & getSgfnTables() const
const TableContainer & getSof2Tables() const
static TableManager serializeObject()
const DenT & GasDenT() const
const TableContainer & getSsfnTables() const
const DensityTable & getDensityTable() const
const TableContainer & getSpecheatTables() const
const TableContainer & getPlymaxTables() const
std::string fileMessage(const Location &location, const std::string &msg)
UDAKeyword keyword(UDAControl control)
Definition: FlatTable.hpp:45
void serializeOp(Serializer &serializer)
Definition: FlatTable.hpp:17
Definition: FlatTable.hpp:172
Definition: FlatTable.hpp:206
Definition: FlatTable.hpp:147
Definition: FlatTable.hpp:82
Definition: FlatTable.hpp:110
Definition: FlatTable.hpp:231
Definition: StandardCond.hpp:24
void serializeOp(Serializer &serializer)
Definition: StandardCond.hpp:35
Definition: FlatTable.hpp:256
Definition: FlatTable.hpp:284
Definition: FlatTable.hpp:312
Definition: FlatTable.hpp:343