TableManager.hpp
Go to the documentation of this file.
1 /*
2  Copyright 2015 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_TABLE_MANAGER_HPP
21 #define OPM_TABLE_MANAGER_HPP
22 
24 
28 
63 
64 namespace Opm {
65 
66  class TableManager {
67  public:
68  TableManager( const Deck& deck );
69 
70  const TableContainer& getTables( const std::string& tableName ) const;
71  const TableContainer& operator[](const std::string& tableName) const;
72  bool hasTables( const std::string& tableName ) const;
73 
74 
75  std::shared_ptr<const Tabdims> getTabdims() const;
76 
77  const TableContainer& getSwofTables() const;
78  const TableContainer& getSgwfnTables() const;
79  const TableContainer& getSof2Tables() const;
80  const TableContainer& getSof3Tables() const;
81  const TableContainer& getSgofTables() const;
82  const TableContainer& getSlgofTables() const;
83  const TableContainer& getSwfnTables() const;
84  const TableContainer& getSgfnTables() const;
85  const TableContainer& getSsfnTables() const;
86  const TableContainer& getRsvdTables() const;
87  const TableContainer& getRvvdTables() const;
88  const TableContainer& getEnkrvdTables() const;
89  const TableContainer& getEnptvdTables() const;
90  const TableContainer& getImkrvdTables() const;
91  const TableContainer& getImptvdTables() const;
92  const TableContainer& getPvdgTables() const;
93  const TableContainer& getPvdoTables() const;
94  const TableContainer& getPvdsTables() const;
95  const TableContainer& getWatvisctTables() const;
96  const TableContainer& getOilvisctTables() const;
97  const TableContainer& getGasvisctTables() const;
98  const TableContainer& getRtempvdTables() const;
99  const TableContainer& getRocktabTables() const;
100  const TableContainer& getPlyadsTables() const;
101  const TableContainer& getPlyviscTables() const;
102  const TableContainer& getPlydhflfTables() const;
103  const TableContainer& getPlymaxTables() const;
104  const TableContainer& getPlyrockTables() const;
105  const TableContainer& getPlyshlogTables() const;
106 
107  const std::vector<PvtgTable>& getPvtgTables() const;
108  const std::vector<PvtoTable>& getPvtoTables() const;
109  const std::map<int, VFPProdTable>& getVFPProdTables() const;
110  const std::map<int, VFPInjTable>& getVFPInjTables() const;
111  private:
112  TableContainer& forceGetTables( const std::string& tableName , size_t numTables);
113 
114  void complainAboutAmbiguousKeyword(const Deck& deck, const std::string& keywordName) const;
115 
116  void addTables( const std::string& tableName , size_t numTables);
117  void initSimpleTables(const Deck& deck);
118  void initRTempTables(const Deck& deck);
119  void initDims(const Deck& deck);
120  void initRocktabTables(const Deck& deck);
121  void initGasvisctTables(const Deck& deck);
122 
123  void initVFPProdTables(const Deck& deck,
124  std::map<int, VFPProdTable>& tableMap);
125 
126  void initVFPInjTables(const Deck& deck,
127  std::map<int, VFPInjTable>& tableMap);
128 
129 
130  void initPlymaxTables(const Deck& deck);
131  void initPlyrockTables(const Deck& deck);
132  void initPlyshlogTables(const Deck& deck);
133 
134  template <class TableType>
135  void initSimpleTableContainer(const Deck& deck,
136  const std::string& keywordName,
137  const std::string& tableName,
138  size_t numTables) {
139  if (!deck.hasKeyword(keywordName))
140  return; // the table is not featured by the deck...
141 
142  auto& container = forceGetTables(tableName , numTables);
143 
144  if (deck.numKeywords(keywordName) > 1) {
145  complainAboutAmbiguousKeyword(deck, keywordName);
146  return;
147  }
148 
149  const auto& tableKeyword = deck.getKeyword(keywordName);
150  for (size_t tableIdx = 0; tableIdx < tableKeyword->size(); ++tableIdx) {
151  const auto tableRecord = tableKeyword->getRecord( tableIdx );
152  const auto dataItem = tableRecord->getItem( 0 );
153  if (dataItem->size() > 0) {
154  std::shared_ptr<TableType> table = std::make_shared<TableType>();
155  table->init(dataItem);
156  container.addTable( tableIdx , table );
157  }
158  }
159  }
160 
161  template <class TableType>
162  void initSimpleTableContainer(const Deck& deck,
163  const std::string& keywordName,
164  size_t numTables) {
165  initSimpleTableContainer<TableType>(deck , keywordName , keywordName , numTables);
166  }
167 
168 
169  template <class TableType>
170  void initSimpleTable(const Deck& deck,
171  const std::string& keywordName,
172  std::vector<TableType>& tableVector) {
173  if (!deck.hasKeyword(keywordName))
174  return; // the table is not featured by the deck...
175 
176  if (deck.numKeywords(keywordName) > 1) {
177  complainAboutAmbiguousKeyword(deck, keywordName);
178  return;
179  }
180 
181  const auto& tableKeyword = deck.getKeyword(keywordName);
182  for (size_t tableIdx = 0; tableIdx < tableKeyword->size(); ++tableIdx) {
183  const auto tableRecord = tableKeyword->getRecord( tableIdx );
184  const auto dataItem = tableRecord->getItem( 0 );
185  if (dataItem->size() == 0) {
186  // for simple tables, an empty record indicates that the previous table
187  // should be copied...
188  if (tableIdx == 0) {
189  std::string msg = "The first table for keyword "+keywordName+" must be explicitly defined! Ignoring keyword";
190  OpmLog::addMessage(Log::MessageType::Warning , Log::fileMessage( tableKeyword->getFileName(), tableKeyword->getLineNumber(), msg));
191  return;
192  }
193  tableVector.push_back(tableVector.back());
194  continue;
195  }
196 
197  tableVector.push_back(TableType());
198  tableVector[tableIdx].init(dataItem);
199  }
200  }
201 
202 
203  template <class TableType>
204  void initFullTables(const Deck& deck,
205  const std::string& keywordName,
206  std::vector<TableType>& tableVector) {
207  if (!deck.hasKeyword(keywordName))
208  return; // the table is not featured by the deck...
209 
210  if (deck.numKeywords(keywordName) > 1) {
211  complainAboutAmbiguousKeyword(deck, keywordName);
212  return;
213  }
214 
215  const auto& tableKeyword = deck.getKeyword(keywordName);
216 
217  int numTables = TableType::numTables(tableKeyword);
218  for (int tableIdx = 0; tableIdx < numTables; ++tableIdx) {
219  tableVector.push_back(TableType());
220  tableVector[tableIdx].init(tableKeyword, tableIdx);
221  }
222  }
223 
224  std::map<std::string , TableContainer> m_simpleTables;
225  std::map<int, VFPProdTable> m_vfpprodTables;
226  std::map<int, VFPInjTable> m_vfpinjTables;
227  std::vector<PvtgTable> m_pvtgTables;
228  std::vector<PvtoTable> m_pvtoTables;
229 
230  std::shared_ptr<Regdims> m_regdims;
231  std::shared_ptr<Tabdims> m_tabdims;
232  std::shared_ptr<Eqldims> m_eqldims;
233  };
234 }
235 
236 
237 #endif
const TableContainer & getGasvisctTables() const
const TableContainer & getPvdsTables() const
const TableContainer & getSlgofTables() const
const std::vector< PvtoTable > & getPvtoTables() const
Definition: TableContainer.hpp:31
const TableContainer & getPlyshlogTables() const
bool hasKeyword(DeckKeywordConstPtr keyword) const
Definition: Deck.hpp:29
const TableContainer & getImkrvdTables() const
TableManager(const Deck &deck)
const TableContainer & getSgfnTables() const
const TableContainer & getEnptvdTables() const
size_t numKeywords(const std::string &keyword) const
Definition: Deck.hpp:31
std::string fileMessage(const std::string &path, int line, const std::string &msg)
const TableContainer & getRocktabTables() const
const std::map< int, VFPProdTable > & getVFPProdTables() const
std::shared_ptr< const Tabdims > getTabdims() const
const TableContainer & getSof3Tables() const
Definition: TableManager.hpp:66
const TableContainer & getRvvdTables() const
const std::map< int, VFPInjTable > & getVFPInjTables() const
const TableContainer & getPlymaxTables() const
const TableContainer & getPvdoTables() const
bool hasTables(const std::string &tableName) const
const std::vector< PvtgTable > & getPvtgTables() const
const TableContainer & getWatvisctTables() const
const int64_t Warning
Definition: LogUtil.hpp:31
const TableContainer & getRtempvdTables() const
const TableContainer & getRsvdTables() const
const TableContainer & getSsfnTables() const
const TableContainer & getSof2Tables() const
static void addMessage(int64_t messageFlag, const std::string &message)
const TableContainer & getPvdgTables() const
const TableContainer & getImptvdTables() const
const TableContainer & getSwfnTables() const
const TableContainer & getSgofTables() const
const TableContainer & getOilvisctTables() const
const TableContainer & getPlydhflfTables() const
const TableContainer & getPlyrockTables() const
const TableContainer & getEnkrvdTables() const
DeckKeywordConstPtr getKeyword(const std::string &keyword, size_t index) const
const TableContainer & getSwofTables() const
const TableContainer & getPlyadsTables() const
const TableContainer & getSgwfnTables() const
const TableContainer & operator[](const std::string &tableName) const
const TableContainer & getTables(const std::string &tableName) const
const TableContainer & getPlyviscTables() const