From 73b9e32d8893a038bb1f16e58beeef96ac85d8be Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Mon, 20 Jan 2020 14:56:57 +0100 Subject: [PATCH] add mpi serialization for EclMaterialLawManager --- .../EclMaterialLawManager.hpp | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp b/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp index ad0f37e8e..b18c269f9 100644 --- a/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp +++ b/opm/material/fluidmatrixinteractions/EclMaterialLawManager.hpp @@ -617,6 +617,64 @@ public: std::shared_ptr >& oilWaterScaledEpsInfoDrainagePointerReferenceHack(unsigned elemIdx) { return oilWaterScaledEpsInfoDrainage_[elemIdx]; } + template + std::size_t packSize(Serializer& serializer) const + { + return serializer.packSize(enableEndPointScaling_) + + hysteresisConfig_->packSize(serializer) + + oilWaterEclEpsConfig_->packSize(serializer) + + serializer.packSize(unscaledEpsInfo_) + + serializer.packSize(threePhaseApproach_) + + serializer.packSize(twoPhaseApproach_) + + gasOilConfig->packSize(serializer) + + oilWaterConfig->packSize(serializer) + + serializer.packSize(stoneEtas) + + serializer.packSize(hasGas) + + serializer.packSize(hasOil) + + serializer.packSize(hasWater); + } + + template + void pack(std::vector& buffer, int& position, + Serializer& serializer) const + { + serializer.pack(enableEndPointScaling_, buffer, position); + hysteresisConfig_->pack(buffer, position, serializer); + oilWaterEclEpsConfig_->pack(buffer, position, serializer); + serializer.pack(unscaledEpsInfo_, buffer, position); + serializer.pack(threePhaseApproach_, buffer, position); + serializer.pack(twoPhaseApproach_, buffer, position); + gasOilConfig->pack(buffer, position, serializer); + oilWaterConfig->pack(buffer, position, serializer); + serializer.pack(stoneEtas, buffer, position); + serializer.pack(hasGas, buffer, position); + serializer.pack(hasOil, buffer, position); + serializer.pack(hasWater, buffer, position); + } + + template + void unpack(std::vector& buffer, int& position, + Serializer& serializer) + { + oilWaterEclEpsConfig_ = std::make_shared(); + hysteresisConfig_ = std::make_shared(); + gasOilConfig = std::make_shared(); + oilWaterConfig = std::make_shared(); + + serializer.unpack(enableEndPointScaling_, buffer, position); + hysteresisConfig_->unpack(buffer, position, serializer); + oilWaterEclEpsConfig_->unpack(buffer, position, serializer); + serializer.unpack(unscaledEpsInfo_, buffer, position); + serializer.unpack(threePhaseApproach_, buffer, position); + serializer.unpack(twoPhaseApproach_, buffer, position); + gasOilConfig->unpack(buffer, position, serializer); + oilWaterConfig->unpack(buffer, position, serializer); + serializer.unpack(stoneEtas, buffer, position); + serializer.unpack(hasGas, buffer, position); + serializer.unpack(hasOil, buffer, position); + serializer.unpack(hasWater, buffer, position); + } + private: void readGlobalEpsOptions_(const Opm::Deck& deck, const Opm::EclipseState& eclState) {