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.
This commit is contained in:
Bård Skaflestad 2023-03-09 18:29:00 +01:00
parent 3b11aba5f2
commit 7a77f28b71
3 changed files with 39 additions and 4 deletions

View File

@ -91,12 +91,18 @@ public:
aquifer_data_ = aquifer; aquifer_data_ = aquifer;
} }
void initFromRestart(const data::Aquifers& /* aquiferSoln */) override { void initFromRestart(const data::Aquifers& aquiferSoln) override
} {
auto xaqPos = aquiferSoln.find(this->aquiferID());
void initialSolutionApplied() override { if (xaqPos == aquiferSoln.end()) {
return;
}
this->cumulative_flux_ = this->area_fraction_ * xaqPos->second.volume;
} }
void initialSolutionApplied() override
{}
void beginTimeStep() override void beginTimeStep() override
{} {}

View File

@ -134,6 +134,9 @@ private:
void createDynamicAquifers(const int episode_index); void createDynamicAquifers(const int episode_index);
void initializeStaticAquifers(); void initializeStaticAquifers();
void initializeRestartDynamicAquifers();
bool needRestartDynamicAquifers() const;
template <typename AquiferType, typename AquiferData> template <typename AquiferType, typename AquiferData>
std::unique_ptr<AquiferType> std::unique_ptr<AquiferType>

View File

@ -165,6 +165,9 @@ void BlackoilAquiferModel<TypeTag>::init()
this->initializeStaticAquifers(); this->initializeStaticAquifers();
} }
if (this->needRestartDynamicAquifers()) {
this->initializeRestartDynamicAquifers();
}
} }
template<typename TypeTag> template<typename TypeTag>
@ -202,6 +205,15 @@ serializeOp(Serializer& serializer)
} }
} }
template <typename TypeTag>
void BlackoilAquiferModel<TypeTag>::initializeRestartDynamicAquifers()
{
const auto rstStep = this->simulator_.vanguard().eclState()
.getInitConfig().getRestartStep() - 1;
this->createDynamicAquifers(rstStep);
}
template <typename TypeTag> template <typename TypeTag>
void BlackoilAquiferModel<TypeTag>::initializeStaticAquifers() void BlackoilAquiferModel<TypeTag>::initializeStaticAquifers()
{ {
@ -248,6 +260,20 @@ void BlackoilAquiferModel<TypeTag>::initializeStaticAquifers()
} }
} }
template <typename TypeTag>
bool BlackoilAquiferModel<TypeTag>::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 <typename TypeTag> template <typename TypeTag>
template <typename AquiferType, typename AquiferData> template <typename AquiferType, typename AquiferData>
std::unique_ptr<AquiferType> std::unique_ptr<AquiferType>