From da4784b314e02b06edabda1e2242d958969735ce Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 22 Feb 2023 14:13:10 +0100 Subject: [PATCH] AquiferConstantFlux: add restart serialization support --- .../aquifers/AquiferConstantFlux.hpp | 19 +++++++++++++++++++ .../aquifers/BlackoilAquiferModel_impl.hpp | 3 +++ tests/test_RestartSerialization.cpp | 18 ++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/opm/simulators/aquifers/AquiferConstantFlux.hpp b/opm/simulators/aquifers/AquiferConstantFlux.hpp index 7a41fb9dd..8dd43e2c5 100644 --- a/opm/simulators/aquifers/AquiferConstantFlux.hpp +++ b/opm/simulators/aquifers/AquiferConstantFlux.hpp @@ -52,6 +52,14 @@ public: connection_flux_.resize(this->connections_.size(), {0}); } + static AquiferConstantFlux serializationTestObject(const Simulator& ebos_simulator) + { + AquiferConstantFlux result({}, {}, ebos_simulator); + result.cumulative_flux_ = 1.0; + + return result; + } + virtual ~AquiferConstantFlux() = default; void updateAquifer(const SingleAquiferFlux& aquifer) { @@ -113,6 +121,17 @@ public: += this->connection_flux_[idx] / model.dofTotalVolume(cellIdx); } + template + void serializeOp(Serializer& serializer) + { + serializer(cumulative_flux_); + } + + bool operator==(const AquiferConstantFlux& rhs) const + { + return this->cumulative_flux_ == rhs.cumulative_flux_; + } + private: const std::vector& connections_; SingleAquiferFlux aquifer_data_; diff --git a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp index dbe3cc76f..1b606f6e6 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp @@ -244,12 +244,15 @@ serializeOp(Serializer& serializer) auto* ct = dynamic_cast*>(aiPtr.get()); auto* fetp = dynamic_cast*>(aiPtr.get()); auto* num = dynamic_cast*>(aiPtr.get()); + auto* flux = dynamic_cast*>(aiPtr.get()); if (ct) { serializer(*ct); } else if (fetp) { serializer(*fetp); } else if (num) { serializer(*num); + } else if (flux) { + serializer(*flux); } else { OPM_THROW(std::logic_error, "Error serializing BlackoilAquiferModel: unknown aquifer type"); } diff --git a/tests/test_RestartSerialization.cpp b/tests/test_RestartSerialization.cpp index 5e098b358..5058a4a53 100644 --- a/tests/test_RestartSerialization.cpp +++ b/tests/test_RestartSerialization.cpp @@ -459,6 +459,24 @@ BOOST_AUTO_TEST_CASE(AquiferNumerical) BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferNumerical differ"); } +BOOST_AUTO_TEST_CASE(AquiferConstantFlux) +{ + using TT = Opm::Properties::TTag::EbosTypeTag; + Opm::EclGenericVanguard::readDeck("GLIFT1.DATA"); + using Simulator = Opm::GetPropType; + Simulator sim; + auto data_out = Opm::AquiferConstantFlux::serializationTestObject(sim); + Opm::Serialization::MemPacker packer; + Opm::Serializer ser(packer); + ser.pack(data_out); + const size_t pos1 = ser.position(); + decltype(data_out) data_in({}, {}, sim); + ser.unpack(data_in); + const size_t pos2 = ser.position(); + BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for AquiferConstantFlux"); + BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferConstantFlux differ"); +} + bool init_unit_test_func() { return true;