diff --git a/opm/simulators/aquifers/BlackoilAquiferModel.hpp b/opm/simulators/aquifers/BlackoilAquiferModel.hpp index 507cd9477..bca18267e 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel.hpp @@ -112,6 +112,9 @@ public: template void deserialize(Restarter& res); + template + void serializeOp(Serializer& serializer); + protected: // --------- Types --------- using ElementContext = GetPropType; diff --git a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp index b83813246..31b7fe0e8 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp @@ -18,6 +18,9 @@ along with OPM. If not, see . */ +#include +#include + namespace Opm { @@ -184,4 +187,25 @@ data::Aquifers BlackoilAquiferModel::aquiferData() const return data; } +template +template +void BlackoilAquiferModel:: +serializeOp(Serializer& serializer) +{ + for (auto& aiPtr : aquifers) { + auto* ct = dynamic_cast*>(aiPtr.get()); + auto* fetp = dynamic_cast*>(aiPtr.get()); + auto* num = dynamic_cast*>(aiPtr.get()); + if (ct) { + serializer(*ct); + } else if (fetp) { + serializer(*fetp); + } else if (num) { + serializer(*num); + } else { + OPM_THROW(std::logic_error, "Error serializing BlackoilAquiferModel: unknown aquifer type"); + } + } +} + } // namespace Opm diff --git a/tests/test_RestartSerialization.cpp b/tests/test_RestartSerialization.cpp index 1752405d3..5385938bf 100644 --- a/tests/test_RestartSerialization.cpp +++ b/tests/test_RestartSerialization.cpp @@ -152,41 +152,27 @@ struct AquiferFixture { BOOST_GLOBAL_FIXTURE(AquiferFixture); -BOOST_AUTO_TEST_CASE(AquiferCarterTracy) -{ - using TT = Opm::Properties::TTag::EbosTypeTag; - Opm::EclGenericVanguard::readDeck("GLIFT1.DATA"); - using Simulator = Opm::GetPropType; - Simulator sim; - auto data_out = Opm::AquiferCarterTracy::serializationTestObject(sim); - Opm::Serialization::MemPacker packer; - Opm::Serializer ser(packer); - ser.pack(data_out); - size_t pos1 = ser.position(); - decltype(data_out) data_in({}, sim, {}); - ser.unpack(data_in); - size_t pos2 = ser.position(); - BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for AquiferCarterTracy"); - BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferCarterTracy differ"); +#define TEST_FOR_AQUIFER(TYPE) \ +BOOST_AUTO_TEST_CASE(TYPE) \ +{ \ + using TT = Opm::Properties::TTag::EbosTypeTag; \ + Opm::EclGenericVanguard::readDeck("GLIFT1.DATA"); \ + using Simulator = Opm::GetPropType; \ + Simulator sim; \ + auto data_out = Opm::TYPE::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 " #TYPE); \ + BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized " #TYPE " differ"); \ } -BOOST_AUTO_TEST_CASE(AquiferFetkovich) -{ - using TT = Opm::Properties::TTag::EbosTypeTag; - Opm::EclGenericVanguard::readDeck("GLIFT1.DATA"); - using Simulator = Opm::GetPropType; - Simulator sim; - auto data_out = Opm::AquiferFetkovich::serializationTestObject(sim); - Opm::Serialization::MemPacker packer; - Opm::Serializer ser(packer); - ser.pack(data_out); - size_t pos1 = ser.position(); - decltype(data_out) data_in({}, sim, {}); - ser.unpack(data_in); - size_t pos2 = ser.position(); - BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for AquiferFetkovich"); - BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferFetkovich differ"); -} +TEST_FOR_AQUIFER(AquiferCarterTracy) +TEST_FOR_AQUIFER(AquiferFetkovich) BOOST_AUTO_TEST_CASE(AquiferNumerical) { @@ -198,12 +184,12 @@ BOOST_AUTO_TEST_CASE(AquiferNumerical) Opm::Serialization::MemPacker packer; Opm::Serializer ser(packer); ser.pack(data_out); - size_t pos1 = ser.position(); + const size_t pos1 = ser.position(); decltype(data_out) data_in({}, sim); ser.unpack(data_in); - size_t pos2 = ser.position(); - BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for AquiferFetkovich"); - BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferFetkovich differ"); + const size_t pos2 = ser.position(); + BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for AquiferNumerical"); + BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferNumerical differ"); } bool init_unit_test_func()