changed: add serialization templates to BlackoilPolymerModule

This commit is contained in:
Arne Morten Kvarving 2020-01-03 15:05:18 +01:00
parent 27e7b42ae9
commit 69426ba768

View File

@ -910,8 +910,115 @@ public:
return 0.25; // kg/mol
}
template<class Serializer>
static std::size_t packSize(Serializer& serializer)
{
std::size_t size = serializer.packSize(plyrockDeadPoreVolume_) +
serializer.packSize(plyrockResidualResistanceFactor_) +
serializer.packSize(plyrockRockDensityFactor_) +
serializer.packSize(plyrockAdsorbtionIndex_) +
serializer.packSize(plyrockMaxAdsorbtion_) +
serializer.packSize(plyadsAdsorbedPolymer_) +
serializer.packSize(plyviscViscosityMultiplierTable_) +
serializer.packSize(plymaxMaxConcentration_) +
serializer.packSize(plymixparToddLongstaff_) +
serializer.packSize(plyshlogShearEffectRefMultiplier_) +
serializer.packSize(plyshlogShearEffectRefLogVelocity_) +
serializer.packSize(shrate_) +
serializer.packSize(hasShrate_) +
serializer.packSize(hasPlyshlog_) +
serializer.packSize(plymwinjTables_) +
serializer.packSize(skprwatTables_);
size += serializer.packSize(plyvmhCoefficients_.size());
for (const auto& it : plyvmhCoefficients_) {
size += serializer.packSize(it.k_mh);
size += serializer.packSize(it.a_mh);
size += serializer.packSize(it.gamma);
size += serializer.packSize(it.kappa);
}
size += serializer.packSize(skprpolyTables_.size());
for (const auto& it : skprpolyTables_) {
size += serializer.packSize(it.first);
size += serializer.packSize(it.second.refConcentration);
size += serializer.packSize(it.second.table_func);
}
return size;
}
template<class Serializer>
static void pack(std::vector<char>& buffer, int& position,
Serializer& serializer)
{
serializer.pack(plyrockDeadPoreVolume_, buffer, position);
serializer.pack(plyrockResidualResistanceFactor_, buffer, position);
serializer.pack(plyrockRockDensityFactor_, buffer, position);
serializer.pack(plyrockAdsorbtionIndex_, buffer, position);
serializer.pack(plyrockMaxAdsorbtion_, buffer, position);
serializer.pack(plyadsAdsorbedPolymer_, buffer, position);
serializer.pack(plyviscViscosityMultiplierTable_, buffer, position);
serializer.pack(plymaxMaxConcentration_, buffer, position);
serializer.pack(plymixparToddLongstaff_, buffer, position);
serializer.pack(plyshlogShearEffectRefMultiplier_, buffer, position);
serializer.pack(plyshlogShearEffectRefLogVelocity_, buffer, position);
serializer.pack(shrate_, buffer, position);
serializer.pack(hasShrate_, buffer, position);
serializer.pack(hasPlyshlog_, buffer, position);
serializer.pack(plymwinjTables_, buffer, position);
serializer.pack(skprwatTables_, buffer, position);
serializer.pack(plyvmhCoefficients_.size(), buffer, position);
for (const auto& it : plyvmhCoefficients_) {
serializer.pack(it.k_mh, buffer, position);
serializer.pack(it.a_mh, buffer, position);
serializer.pack(it.gamma, buffer, position);
serializer.pack(it.kappa, buffer, position);
}
serializer.pack(skprpolyTables_.size(), buffer, position);
for (const auto& it : skprpolyTables_) {
serializer.pack(it.first, buffer, position);
serializer.pack(it.second.refConcentration, buffer, position);
serializer.pack(it.second.table_func, buffer, position);
}
}
template<class Serializer>
static void unpack(std::vector<char>& buffer, int& position,
Serializer& serializer)
{
serializer.unpack(plyrockDeadPoreVolume_, buffer, position);
serializer.unpack(plyrockResidualResistanceFactor_, buffer, position);
serializer.unpack(plyrockRockDensityFactor_, buffer, position);
serializer.unpack(plyrockAdsorbtionIndex_, buffer, position);
serializer.unpack(plyrockMaxAdsorbtion_, buffer, position);
serializer.unpack(plyadsAdsorbedPolymer_, buffer, position);
serializer.unpack(plyviscViscosityMultiplierTable_, buffer, position);
serializer.unpack(plymaxMaxConcentration_, buffer, position);
serializer.unpack(plymixparToddLongstaff_, buffer, position);
serializer.unpack(plyshlogShearEffectRefMultiplier_, buffer, position);
serializer.unpack(plyshlogShearEffectRefLogVelocity_, buffer, position);
serializer.unpack(shrate_, buffer, position);
serializer.unpack(hasShrate_, buffer, position);
serializer.unpack(hasPlyshlog_, buffer, position);
serializer.unpack(plymwinjTables_, buffer, position);
serializer.unpack(skprwatTables_, buffer, position);
size_t size;
serializer.unpack(size, buffer, position);
plyvmhCoefficients_.resize(size);
for (auto& it : plyvmhCoefficients_) {
serializer.unpack(it.k_mh, buffer, position);
serializer.unpack(it.a_mh, buffer, position);
serializer.unpack(it.gamma, buffer, position);
serializer.unpack(it.kappa, buffer, position);
}
serializer.unpack(size, buffer, position);
skprpolyTables_.clear();
for (size_t i = 0; i < size; ++i) {
int key;
serializer.unpack(key, buffer, position);
serializer.unpack(skprpolyTables_[key].refConcentration, buffer, position);
serializer.unpack(skprpolyTables_[key].table_func, buffer, position);
}
}
private:
static std::vector<Scalar> plyrockDeadPoreVolume_;