21#ifndef OPM_AQUIFETP_HEADER_INCLUDED
22#define OPM_AQUIFETP_HEADER_INCLUDED
26#include <opm/input/eclipse/EclipseState/Aquifer/Aquifetp.hpp>
28#include <opm/output/data/Aquifer.hpp>
36template <
typename TypeTag>
56 const Aquifetp::AQUFETP_data& aqufetp_data)
67 result.pressure_current_ = {4.0, 5.0};
68 result.Qai_ = {{6.0}};
71 result.aquifer_pressure_ = 9.0;
78 for (
const auto& q : this->
Qai_) {
87 auto data = data::AquiferData{};
91 data.fluxRate = std::accumulate(this->
Qai_.begin(), this->Qai_.end(), 0.0,
92 [](
const double flux,
const auto& q) ->
double
94 return flux + q.value();
96 data.volume = this->
W_flux_.value();
97 data.initPressure = this->
pa0_;
99 auto* aquFet = data.typeData.template create<data::AquiferType::Fetkovich>();
107 template<
class Serializer>
110 serializer(
static_cast<Base&
>(*
this));
116 return static_cast<const Base&
>(*this) == rhs &&
127 if (! xaq.typeData.is<data::AquiferType::Fetkovich>()) {
128 throw std::invalid_argument {
129 "Analytic aquifer data for unexpected aquifer "
130 "type passed to Fetkovich aquifer"
134 this->aquifer_pressure_ = xaq.pressure;
135 this->
rhow_ = this->aqufetp_data_.waterDensity();
143 return this->aquifer_pressure_ + this->
rhow_*gdz
152 const auto& comm = this->
simulator_.vanguard().grid().comm();
156 this->aqufetp_data_.total_compr * this->aqufetp_data_.initial_watvolume;
158 return this->
pa0_ - (Flux / denom);
163 this->
Tc_ = this->aqufetp_data_.timeConstant();
169 const Scalar td_Tc_ = simulator.timeStepSize() / this->
Tc_;
170 const Scalar coef = (1 - exp(-td_Tc_)) / td_Tc_;
173 this->aqufetp_data_.prod_index *
dpai(idx);
182 if (! this->aqufetp_data_.initial_pressure.has_value()) {
183 this->aqufetp_data_.initial_pressure =
186 const auto& tables = this->
simulator_.vanguard()
187 .eclState().getTableManager();
189 this->aqufetp_data_.finishInitialisation(tables);
192 this->
rhow_ = this->aqufetp_data_.waterDensity();
193 this->
pa0_ = this->aqufetp_data_.initial_pressure.value();
194 if (this->aqufetp_data_.initial_temperature.has_value())
195 this->
Ta0_ = this->aqufetp_data_.initial_temperature.value();
196 this->aquifer_pressure_ = this->
pa0_;
201 return this->aqufetp_data_.datum_depth;
Definition: AquiferAnalytical.hpp:56
Scalar gravity_() const
Definition: AquiferAnalytical.hpp:243
Scalar Tc_
Definition: AquiferAnalytical.hpp:449
GetPropType< TypeTag, Properties::Simulator > Simulator
Definition: AquiferAnalytical.hpp:58
GetPropType< TypeTag, Properties::IntensiveQuantities > IntensiveQuantities
Definition: AquiferAnalytical.hpp:64
bool solution_set_from_restart_
Definition: AquiferAnalytical.hpp:459
GetPropType< TypeTag, Properties::ElementContext > ElementContext
Definition: AquiferAnalytical.hpp:60
GetPropType< TypeTag, Properties::RateVector > RateVector
Definition: AquiferAnalytical.hpp:63
std::vector< Scalar > alphai_
Definition: AquiferAnalytical.hpp:447
Scalar pa0_
Definition: AquiferAnalytical.hpp:450
DenseAd::Evaluation< Scalar, numEq > Eval
Definition: AquiferAnalytical.hpp:77
GetPropType< TypeTag, Properties::ElementMapper > ElementMapper
Definition: AquiferAnalytical.hpp:65
std::vector< Scalar > pressure_previous_
Definition: AquiferAnalytical.hpp:444
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: AquiferAnalytical.hpp:59
Eval W_flux_
Definition: AquiferAnalytical.hpp:457
std::vector< Eval > pressure_current_
Definition: AquiferAnalytical.hpp:445
std::optional< Scalar > Ta0_
Definition: AquiferAnalytical.hpp:451
std::vector< Scalar > cell_depth_
Definition: AquiferAnalytical.hpp:443
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: AquiferAnalytical.hpp:61
std::vector< Eval > Qai_
Definition: AquiferAnalytical.hpp:446
Scalar calculateReservoirEquilibrium()
Definition: AquiferAnalytical.hpp:394
BlackOilFluidState< Eval, FluidSystem, enableTemperature, enableEnergy, BlackoilIndices::gasEnabled, enableVapwat, enableBrine, enableSaltPrecipitation, has_disgas_in_water, BlackoilIndices::numPhases > FluidState
Definition: AquiferAnalytical.hpp:88
GetPropType< TypeTag, Properties::Indices > BlackoilIndices
Definition: AquiferAnalytical.hpp:62
Scalar rhow_
Definition: AquiferAnalytical.hpp:452
Definition: AquiferFetkovich.hpp:38
void assignRestartData(const data::AquiferData &xaq) override
Definition: AquiferFetkovich.hpp:125
void calculateAquiferCondition() override
Definition: AquiferFetkovich.hpp:176
bool operator==(const AquiferFetkovich &rhs) const
Definition: AquiferFetkovich.hpp:114
void endTimeStep() override
Definition: AquiferFetkovich.hpp:76
AquiferFetkovich(const std::vector< Aquancon::AquancCell > &connections, const Simulator &simulator, const Aquifetp::AQUFETP_data &aqufetp_data)
Definition: AquiferFetkovich.hpp:54
data::AquiferData aquiferData() const override
Definition: AquiferFetkovich.hpp:84
void serializeOp(Serializer &serializer)
Definition: AquiferFetkovich.hpp:108
static AquiferFetkovich serializationTestObject(const Simulator &simulator)
Definition: AquiferFetkovich.hpp:62
virtual Scalar aquiferDepth() const override
Definition: AquiferFetkovich.hpp:199
void calculateInflowRate(int idx, const Simulator &simulator) override
Definition: AquiferFetkovich.hpp:167
Eval dpai(int idx)
Definition: AquiferFetkovich.hpp:138
void calculateAquiferConstants() override
Definition: AquiferFetkovich.hpp:161
Aquifetp::AQUFETP_data aqufetp_data_
Definition: AquiferFetkovich.hpp:122
Scalar aquiferPressure()
Definition: AquiferFetkovich.hpp:148
Scalar aquifer_pressure_
Definition: AquiferFetkovich.hpp:123
const Simulator & simulator_
Definition: AquiferInterface.hpp:98
int aquiferID() const
Definition: AquiferInterface.hpp:79
Definition: blackoilboundaryratevector.hh:37