56 const Simulator& ebosSimulator,
63 static AquiferFetkovich serializationTestObject(
const Simulator& ebosSimulator)
67 result.pressure_previous_ = {1.0, 2.0, 3.0};
68 result.pressure_current_ = {4.0, 5.0};
72 result.aquifer_pressure_ = 9.0;
77 void endTimeStep()
override
79 for (
const auto&
q : this->Qai_) {
80 this->W_flux_ +=
q * this->ebos_simulator_.timeStepSize();
82 aquifer_pressure_ = aquiferPressure();
85 data::AquiferData aquiferData()
const override
88 auto data = data::AquiferData{};
90 data.aquiferID = this->aquiferID();
91 data.pressure = this->aquifer_pressure_;
92 data.fluxRate = std::accumulate(this->Qai_.begin(),
this->Qai_.end(), 0.0,
93 [](
const double flux,
const auto&
q) ->
double
95 return flux + q.value();
97 data.volume = this->W_flux_.value();
98 data.initPressure = this->pa0_;
101 aquFet->initVolume = this->aqufetp_data_.initial_watvolume;
102 aquFet->prodIndex = this->aqufetp_data_.prod_index;
103 aquFet->timeConstant = this->aqufetp_data_.timeConstant();
108 template<
class Serializer>
117 return static_cast<const Base&
>(*this) == rhs &&
118 this->aquifer_pressure_ == rhs.aquifer_pressure_;
123 Aquifetp::AQUFETP_data aqufetp_data_;
126 void assignRestartData(
const data::AquiferData&
xaq)
override
128 if (!
xaq.typeData.is<data::AquiferType::Fetkovich>()) {
129 throw std::invalid_argument {
130 "Analytic aquifer data for unexpected aquifer "
131 "type passed to Fetkovich aquifer"
135 this->aquifer_pressure_ =
xaq.pressure;
136 this->rhow_ = this->aqufetp_data_.waterDensity();
139 inline Eval dpai(
int idx)
142 this->gravity_() * (this->cell_depth_[
idx] - this->aquiferDepth());
144 return this->aquifer_pressure_ + this->rhow_*
gdz
145 - this->pressure_current_.at(
idx);
149 inline Scalar aquiferPressure()
153 const auto& comm = this->ebos_simulator_.vanguard().grid().comm();
157 this->aqufetp_data_.total_compr * this->aqufetp_data_.initial_watvolume;
162 inline void calculateAquiferConstants()
override
164 this->Tc_ = this->aqufetp_data_.timeConstant();
168 inline void calculateInflowRate(
int idx,
const Simulator&
simulator)
override
173 this->Qai_.at(
idx) =
coef * this->alphai_[
idx] *
174 this->aqufetp_data_.prod_index * dpai(
idx);
177 inline void calculateAquiferCondition()
override
179 if (this->solution_set_from_restart_) {
183 if (! this->aqufetp_data_.initial_pressure.has_value()) {
184 this->aqufetp_data_.initial_pressure =
185 this->calculateReservoirEquilibrium();
187 const auto&
tables = this->ebos_simulator_.vanguard()
188 .eclState().getTableManager();
190 this->aqufetp_data_.finishInitialisation(
tables);
193 this->rhow_ = this->aqufetp_data_.waterDensity();
194 this->pa0_ = this->aqufetp_data_.initial_pressure.value();
195 if (this->aqufetp_data_.initial_temperature.has_value())
196 this->Ta0_ = this->aqufetp_data_.initial_temperature.value();
197 this->aquifer_pressure_ = this->pa0_;
200 virtual Scalar aquiferDepth()
const override
202 return this->aqufetp_data_.datum_depth;