From 7a77f28b7102f8167db15faebbf3ff62f911c906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Thu, 9 Mar 2023 18:29:00 +0100 Subject: [PATCH] Add Support for Initialising Constant Flux Aquifers from Restart In particular, form constant flux aquifer objects from the restart step's collection if available and properly initialise their total produced volume. --- .../aquifers/AquiferConstantFlux.hpp | 14 +++++++--- .../aquifers/BlackoilAquiferModel.hpp | 3 +++ .../aquifers/BlackoilAquiferModel_impl.hpp | 26 +++++++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/opm/simulators/aquifers/AquiferConstantFlux.hpp b/opm/simulators/aquifers/AquiferConstantFlux.hpp index e9c9aa020..9940841b9 100644 --- a/opm/simulators/aquifers/AquiferConstantFlux.hpp +++ b/opm/simulators/aquifers/AquiferConstantFlux.hpp @@ -91,12 +91,18 @@ public: aquifer_data_ = aquifer; } - void initFromRestart(const data::Aquifers& /* aquiferSoln */) override { - } - - void initialSolutionApplied() override { + void initFromRestart(const data::Aquifers& aquiferSoln) override + { + auto xaqPos = aquiferSoln.find(this->aquiferID()); + if (xaqPos == aquiferSoln.end()) { + return; + } + + this->cumulative_flux_ = this->area_fraction_ * xaqPos->second.volume; } + void initialSolutionApplied() override + {} void beginTimeStep() override {} diff --git a/opm/simulators/aquifers/BlackoilAquiferModel.hpp b/opm/simulators/aquifers/BlackoilAquiferModel.hpp index 0388045ce..37b99ae43 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel.hpp @@ -134,6 +134,9 @@ private: void createDynamicAquifers(const int episode_index); void initializeStaticAquifers(); + void initializeRestartDynamicAquifers(); + + bool needRestartDynamicAquifers() const; template std::unique_ptr diff --git a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp index 41f9badfa..98713b27b 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp @@ -165,6 +165,9 @@ void BlackoilAquiferModel::init() this->initializeStaticAquifers(); } + if (this->needRestartDynamicAquifers()) { + this->initializeRestartDynamicAquifers(); + } } template @@ -202,6 +205,15 @@ serializeOp(Serializer& serializer) } } +template +void BlackoilAquiferModel::initializeRestartDynamicAquifers() +{ + const auto rstStep = this->simulator_.vanguard().eclState() + .getInitConfig().getRestartStep() - 1; + + this->createDynamicAquifers(rstStep); +} + template void BlackoilAquiferModel::initializeStaticAquifers() { @@ -248,6 +260,20 @@ void BlackoilAquiferModel::initializeStaticAquifers() } } +template +bool BlackoilAquiferModel::needRestartDynamicAquifers() const +{ + const auto& initconfig = + this->simulator_.vanguard().eclState().getInitConfig(); + + if (! initconfig.restartRequested()) { + return false; + } + + return this->simulator_.vanguard() + .schedule()[initconfig.getRestartStep() - 1].hasAnalyticalAquifers(); +} + template template std::unique_ptr