diff --git a/opm/simulators/wells/WGState.cpp b/opm/simulators/wells/WGState.cpp index 118666fea..0af7fa5dd 100644 --- a/opm/simulators/wells/WGState.cpp +++ b/opm/simulators/wells/WGState.cpp @@ -32,10 +32,27 @@ WGState::WGState(const PhaseUsage& pu) : well_test_state{} {} +WGState WGState::serializationTestObject(const ParallelWellInfo& pinfo) +{ + WGState result(PhaseUsage{}); + result.well_state = WellState::serializationTestObject(pinfo); + result.group_state = GroupState::serializationTestObject(); + result.well_test_state = WellTestState::serializationTestObject(); + + return result; +} + void WGState::wtest_state(WellTestState wtest_state) { wtest_state.filter_wells( this->well_state.wells() ); this->well_test_state = std::move(wtest_state); } +bool WGState::operator==(const WGState& rhs) const +{ + return this->well_state == rhs.well_state && + this->group_state == rhs.group_state && + this->well_test_state == rhs.well_test_state; +} + } diff --git a/opm/simulators/wells/WGState.hpp b/opm/simulators/wells/WGState.hpp index 28306ccef..446f5c836 100644 --- a/opm/simulators/wells/WGState.hpp +++ b/opm/simulators/wells/WGState.hpp @@ -26,20 +26,34 @@ namespace Opm { +class ParallelWellInfo; + /* - Microscopic class to handle well , group and well test state. + Microscopic class to handle well, group and well test state. */ struct PhaseUsage; struct WGState { WGState(const PhaseUsage& pu); + + static WGState serializationTestObject(const ParallelWellInfo& pinfo); + void wtest_state(WellTestState wtest_state); WellState well_state; GroupState group_state; WellTestState well_test_state; + bool operator==(const WGState&) const; + + template + void serializeOp(Serializer& serializer) + { + serializer(well_state); + serializer(group_state); + serializer(well_test_state); + } }; } diff --git a/tests/test_RestartSerialization.cpp b/tests/test_RestartSerialization.cpp index 0f71013a5..a4219fbef 100644 --- a/tests/test_RestartSerialization.cpp +++ b/tests/test_RestartSerialization.cpp @@ -146,6 +146,22 @@ BOOST_AUTO_TEST_CASE(WellState) BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized WellState differ"); } +BOOST_AUTO_TEST_CASE(WGState) +{ + Opm::ParallelWellInfo dummy; + auto data_out = Opm::WGState::serializationTestObject(dummy); + Opm::Serialization::MemPacker packer; + Opm::Serializer ser(packer); + ser.pack(data_out); + const size_t pos1 = ser.position(); + decltype(data_out) data_in(Opm::PhaseUsage{}); + data_in.well_state = Opm::WellState(dummy); + ser.unpack(data_in); + const size_t pos2 = ser.position(); + BOOST_CHECK_MESSAGE(pos1 == pos2, "Packed size differ from unpack size for WGState"); + BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized WGState differ"); +} + BOOST_AUTO_TEST_CASE(EclGenericVanguard) { auto in_params = Opm::EclGenericVanguard::serializationTestParams();