Aquifer Model: Add Initialization from Restart Data

This commit adds a new member function,

    initFromRestart()

to the EclBaseAquiferModel and the BlackoilAquiferModel.  The former
does nothing, the latter calls AquiferInterface::initFromRestart()
on the contained analytic aquifer objects.
This commit is contained in:
Bård Skaflestad 2019-11-28 18:21:45 +01:00
parent df86d01486
commit 4c4a893781
3 changed files with 45 additions and 1 deletions

View File

@ -27,8 +27,12 @@
#ifndef EWOMS_ECL_BASE_AQUIFER_MODEL_HH
#define EWOMS_ECL_BASE_AQUIFER_MODEL_HH
#include <opm/output/data/Aquifer.hpp>
#include <opm/models/utils/propertysystem.hh>
#include <vector>
BEGIN_PROPERTIES
NEW_PROP_TAG(Simulator);
@ -64,6 +68,18 @@ public:
void initialSolutionApplied()
{ }
/*!
* \brief Called if aquifers are being initialized from values retrieved
* from a restart file.
*
* \param[in] aquiferSoln Set of aquifer-related initial values, mostly
* pertaining to analytic aquifers. Contains at minimum the
* aquifer pressure and the base run's total produced liquid
* volume from the model's aquifers.
*/
void initFromRestart(const std::vector<data::AquiferData>& aquiferSoln OPM_UNUSED)
{ }
/*!
* \brief This method is called when a new episode (report step) starts.
*/

View File

@ -29,11 +29,17 @@
#include <opm/parser/eclipse/EclipseState/AquiferCT.hpp>
#include <opm/parser/eclipse/EclipseState/Aquifetp.hpp>
#include <opm/parser/eclipse/EclipseState/Aquancon.hpp>
#include <opm/simulators/timestepping/SimulatorTimer.hpp>
#include <opm/output/data/Aquifer.hpp>
#include <opm/simulators/aquifers/AquiferCarterTracy.hpp>
#include <opm/simulators/aquifers/AquiferFetkovich.hpp>
#include <opm/simulators/timestepping/SimulatorTimer.hpp>
#include <opm/material/densead/Math.hpp>
#include <vector>
namespace Opm {
/// Class for handling the blackoil well model.
@ -47,6 +53,8 @@ namespace Opm {
explicit BlackoilAquiferModel(Simulator& simulator);
void initialSolutionApplied();
void initFromRestart(const std::vector<data::AquiferData>& aquiferSoln);
void beginEpisode();
void beginTimeStep();
void beginIteration();

View File

@ -29,6 +29,26 @@ namespace Opm {
}
}
template<typename TypeTag>
void
BlackoilAquiferModel<TypeTag>::initFromRestart(const std::vector<data::AquiferData>& aquiferSoln)
{
if(aquiferCarterTracyActive())
{
for (auto& aquifer : aquifers_CarterTracy)
{
aquifer.initFromRestart(aquiferSoln);
}
}
if(aquiferFetkovichActive())
{
for (auto& aquifer : aquifers_Fetkovich)
{
aquifer.initFromRestart(aquiferSoln);
}
}
}
template<typename TypeTag>
void
BlackoilAquiferModel<TypeTag>::beginEpisode()