AquiferNumerical: add serialization of dynamic state

This commit is contained in:
Arne Morten Kvarving
2023-02-02 10:27:48 +01:00
parent 03f6309ff7
commit a66fd75715
2 changed files with 51 additions and 2 deletions

View File

@@ -21,10 +21,13 @@
#ifndef OPM_AQUIFERNUMERICAL_HEADER_INCLUDED
#define OPM_AQUIFERNUMERICAL_HEADER_INCLUDED
#include <opm/output/data/Aquifer.hpp>
#include <opm/input/eclipse/EclipseState/Aquifer/NumericalAquifer/SingleNumericalAquifer.hpp>
#include <opm/material/common/MathToolbox.hpp>
#include <opm/material/densead/Evaluation.hpp>
#include <opm/output/data/Aquifer.hpp>
#include <opm/simulators/aquifers/AquiferInterface.hpp>
#include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp>
@@ -86,6 +89,17 @@ public:
}
}
static AquiferNumerical serializationTestObject(const Simulator& ebos_simulator)
{
AquiferNumerical result({}, ebos_simulator);
result.flux_rate_ = 1.0;
result.cumulative_flux_ = 2.0;
result.init_pressure_ = {3.0, 4.0};
result.pressure_ = 5.0;
return result;
}
void initFromRestart(const data::Aquifers& aquiferSoln) override
{
auto xaqPos = aquiferSoln.find(this->aquiferID());
@@ -140,6 +154,23 @@ public:
this->cumulative_flux_ = 0.;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(flux_rate_);
serializer(cumulative_flux_);
serializer(init_pressure_);
serializer(pressure_);
}
bool operator==(const AquiferNumerical& rhs) const
{
return this->flux_rate_ == rhs.flux_rate_ &&
this->cumulative_flux_ == rhs.cumulative_flux_ &&
this->init_pressure_ == rhs.init_pressure_ &&
this->pressure_ == rhs.pressure_;
}
private:
void checkConnectsToReservoir()
{

View File

@@ -188,6 +188,24 @@ BOOST_AUTO_TEST_CASE(AquiferFetkovich)
BOOST_CHECK_MESSAGE(data_out == data_in, "Deserialized AquiferFetkovich differ");
}
BOOST_AUTO_TEST_CASE(AquiferNumerical)
{
using TT = Opm::Properties::TTag::EbosTypeTag;
Opm::EclGenericVanguard::readDeck("GLIFT1.DATA");
using Simulator = Opm::GetPropType<TT, Opm::Properties::Simulator>;
Simulator sim;
auto data_out = Opm::AquiferNumerical<TT>::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");
}
bool init_unit_test_func()
{
return true;