add serialization template to TableManager
This commit is contained in:
parent
08b7486597
commit
7b446b4d89
@ -118,7 +118,7 @@ namespace Opm {
|
||||
void serializeOp(Serializer& serializer)
|
||||
{
|
||||
// FieldPropsManager is handled otherwise, do not add
|
||||
serializer(m_tables);
|
||||
m_tables.serializeOp(serializer);
|
||||
m_runspec.serializeOp(serializer);
|
||||
m_eclipseConfig.serializeOp(serializer);
|
||||
serializer(m_deckUnitSystem);
|
||||
|
@ -215,6 +215,72 @@ namespace Opm {
|
||||
double rtemp() const;
|
||||
|
||||
bool operator==(const TableManager& data) const;
|
||||
|
||||
template<class Serializer>
|
||||
void serializeOp(Serializer& serializer)
|
||||
{
|
||||
auto simpleTables = m_simpleTables;
|
||||
auto split = splitSimpleTable(simpleTables);
|
||||
serializer.map(simpleTables);
|
||||
serializer(split.plyshMax);
|
||||
serializer.map(split.plyshMap);
|
||||
serializer(split.rockMax);
|
||||
serializer.map(split.rockMap);
|
||||
serializer.vector(m_pvtgTables);
|
||||
serializer.vector(m_pvtoTables);
|
||||
serializer.vector(m_rock2dTables);
|
||||
serializer.vector(m_rock2dtrTables);
|
||||
m_pvtwTable.serializeOp(serializer);
|
||||
m_pvcdoTable.serializeOp(serializer);
|
||||
m_densityTable.serializeOp(serializer);
|
||||
m_plyvmhTable.serializeOp(serializer);
|
||||
m_rockTable.serializeOp(serializer);
|
||||
m_plmixparTable.serializeOp(serializer);
|
||||
m_shrateTable.serializeOp(serializer);
|
||||
m_stone1exTable.serializeOp(serializer);
|
||||
m_tlmixparTable.serializeOp(serializer);
|
||||
m_viscrefTable.serializeOp(serializer);
|
||||
m_watdentTable.serializeOp(serializer);
|
||||
serializer.vector(m_pvtwsaltTables);
|
||||
serializer.vector(m_bdensityTables);
|
||||
serializer.vector(m_sdensityTables);
|
||||
serializer.map(m_plymwinjTables);
|
||||
serializer.map(m_skprwatTables);
|
||||
serializer.map(m_skprpolyTables);
|
||||
m_tabdims.serializeOp(serializer);
|
||||
m_regdims.serializeOp(serializer);
|
||||
m_eqldims.serializeOp(serializer);
|
||||
m_aqudims.serializeOp(serializer);
|
||||
serializer(hasImptvd);
|
||||
serializer(hasEnptvd);
|
||||
serializer(hasEqlnum);
|
||||
serializer(hasShrate);
|
||||
serializer(jfunc);
|
||||
oilDenT.serializeOp(serializer);
|
||||
gasDenT.serializeOp(serializer);
|
||||
watDenT.serializeOp(serializer);
|
||||
stcond.serializeOp(serializer);
|
||||
serializer(m_gas_comp_index);
|
||||
serializer(m_rtemp);
|
||||
if (!serializer.isSerializing()) {
|
||||
m_simpleTables = simpleTables;
|
||||
if (split.plyshMax > 0) {
|
||||
TableContainer container(split.plyshMax);
|
||||
for (const auto& it : split.plyshMap) {
|
||||
container.addTable(it.first, it.second);
|
||||
}
|
||||
m_simpleTables.insert(std::make_pair("PLYSHLOG", container));
|
||||
}
|
||||
if (split.rockMax > 0) {
|
||||
TableContainer container(split.rockMax);
|
||||
for (const auto& it : split.rockMap) {
|
||||
container.addTable(it.first, it.second);
|
||||
}
|
||||
m_simpleTables.insert(std::make_pair("ROCKTAB", container));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
TableContainer& forceGetTables( const std::string& tableName , size_t numTables);
|
||||
|
||||
@ -471,6 +537,15 @@ namespace Opm {
|
||||
StandardCond stcond;
|
||||
std::size_t m_gas_comp_index;
|
||||
double m_rtemp;
|
||||
|
||||
struct SplitSimpleTables {
|
||||
size_t plyshMax = 0;
|
||||
size_t rockMax = 0;
|
||||
std::map<size_t, std::shared_ptr<PlyshlogTable>> plyshMap;
|
||||
std::map<size_t, std::shared_ptr<RocktabTable>> rockMap;
|
||||
};
|
||||
|
||||
SplitSimpleTables splitSimpleTable(std::map<std::string,TableContainer>& simpleTables);
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1194,6 +1194,35 @@ namespace Opm {
|
||||
solventtables[lineIdx].init(keyword.getRecord(lineIdx));
|
||||
}
|
||||
}
|
||||
|
||||
TableManager::SplitSimpleTables TableManager::splitSimpleTable(std::map<std::string,TableContainer>& simpleTables)
|
||||
{
|
||||
SplitSimpleTables result;
|
||||
|
||||
// PlyshlogTable need special treatment
|
||||
auto it = simpleTables.find("PLYSHLOG");
|
||||
if (it != simpleTables.end()) {
|
||||
result.plyshMax = it->second.max();
|
||||
for (const auto& mapIt : it->second.tables()) {
|
||||
auto ptr = std::static_pointer_cast<PlyshlogTable>(mapIt.second);
|
||||
result.plyshMap.insert(std::make_pair(mapIt.first, ptr));
|
||||
}
|
||||
simpleTables.erase(it);
|
||||
}
|
||||
|
||||
// RocktabTable need special treatment
|
||||
it = simpleTables.find("ROCKMAP");
|
||||
if (it != simpleTables.end()) {
|
||||
result.rockMax = it->second.max();
|
||||
for (const auto& mapIt : it->second.tables()) {
|
||||
auto ptr = std::static_pointer_cast<RocktabTable>(mapIt.second);
|
||||
result.rockMap.insert(std::make_pair(mapIt.first, ptr));
|
||||
}
|
||||
simpleTables.erase(it);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user