76 GetPropType<TypeTag, Properties::Indices>>
91 using GLiftEclWells =
typename GasLiftGroupInfo<Scalar>::GLiftEclWells;
93 using VectorBlockType = Dune::FieldVector<Scalar, Indices::numEq>;
94 using MatrixBlockType = Dune::FieldMatrix<Scalar, Indices::numEq, Indices::numEq>;
95 using Eval =
typename Base::Eval;
96 using BVector = Dune::BlockVector<VectorBlockType>;
97 using PressureMatrix = Dune::BCRSMatrix<Opm::MatrixBlock<Scalar, 1, 1>>;
99 using RateConverterType =
106 using ModelParameters =
typename Base::ModelParameters;
127 Indices::compositionSwitchIdx >= 0,
132 Indices::numPhases >;
137 const ModelParameters& param,
139 const int pvtRegionIdx,
141 const int num_phases,
151 const std::vector<Scalar>&
B_avg,
156 const std::vector<Scalar>&
B_avg,
160 virtual void solveEqAndUpdateWellState(
const Simulator& simulator,
164 void assembleWellEq(
const Simulator& simulator,
170 void assembleWellEqWithoutIteration(
const Simulator& simulator,
177 void prepareWellBeforeAssembling(
const Simulator& simulator,
184 virtual void computeWellRatesWithBhp(
const Simulator&
ebosSimulator,
189 virtual std::optional<Scalar>
204 virtual void apply(
const BVector& x, BVector&
Ax)
const = 0;
207 virtual void apply(BVector&
r)
const = 0;
210 virtual void computeWellPotentials(
const Simulator& simulator,
212 std::vector<Scalar>& well_potentials,
215 virtual void updateWellStateWithTarget(
const Simulator& simulator,
220 virtual void computeWellRatesWithBhpIterations(
const Simulator& simulator,
225 bool wellUnderZeroRateTarget(
const Simulator& simulator,
229 bool wellUnderZeroGroupRateTarget(
const Simulator& simulator,
234 bool stoppedOrZeroRateTarget(
const Simulator& simulator,
238 bool updateWellStateWithTHPTargetProd(
const Simulator& simulator,
242 enum class IndividualOrGroup { Individual, Group, Both };
243 bool updateWellControl(
const Simulator& simulator,
244 const IndividualOrGroup
iog,
249 bool updateWellControlAndStatusLocalIteration(
const Simulator& simulator,
254 const Scalar WQTotal,
259 virtual void updatePrimaryVariables(
const Simulator& simulator,
263 virtual void calculateExplicitQuantities(
const Simulator& simulator,
267 virtual void updateProductivityIndex(
const Simulator& simulator,
279 virtual void addWellContributions(SparseMatrixAdapter&)
const = 0;
281 virtual void addWellPressureEquations(PressureMatrix& mat,
283 const int pressureVarIndex,
287 void addCellRates(RateVector& rates,
int cellIdx)
const;
289 Scalar volumetricSurfaceRateForConnection(
int cellIdx,
int phaseIdx)
const;
293 void wellTesting(
const Simulator& simulator,
303 void checkWellOperability(
const Simulator& simulator,
313 void gliftBeginTimeStepWellTestUpdateALQ(
const Simulator& simulator,
322 void updateWellOperability(
const Simulator& simulator,
326 bool updateWellOperabilityFromWellEq(
const Simulator& simulator,
331 virtual void updateWaterThroughput(
const double dt,
336 virtual std::vector<Scalar>
347 void solveWellEquation(
const Simulator& simulator,
352 const std::vector<RateVector>& connectionRates()
const
354 return connectionRates_;
357 std::vector<Scalar> wellIndex(
const int perf,
358 const IntensiveQuantities& intQuants,
362 void updateConnectionDFactor(
const Simulator& simulator,
365 void updateConnectionTransmissibilityFactor(
const Simulator& simulator,
368 virtual bool iterateWellEqWithSwitching(
const Simulator& simulator,
379 std::vector<RateVector> connectionRates_;
380 std::vector<Scalar> B_avg_;
381 bool changed_to_stopped_this_step_ =
false;
382 bool thp_update_iterations =
false;
384 Scalar wpolymer()
const;
385 Scalar wfoam()
const;
386 Scalar wsalt()
const;
387 Scalar wmicrobes()
const;
388 Scalar woxygen()
const;
389 Scalar wurea()
const;
391 virtual Scalar getRefDensity()
const = 0;
394 const std::vector<Scalar>& compFrac()
const;
406 virtual void checkOperabilityUnderTHPLimit(
const Simulator& simulator,
410 virtual void updateIPR(
const Simulator& simulator,
413 virtual void assembleWellEqWithoutIteration(
const Simulator& simulator,
422 virtual bool iterateWellEqWithControl(
const Simulator& simulator,
430 virtual void updateIPRImplicit(
const Simulator& simulator,
434 bool iterateWellEquations(
const Simulator& simulator,
440 bool solveWellWithTHPConstraint(
const Simulator& simulator,
448 std::optional<Scalar>
455 bool solveWellWithBhp(
const Simulator& simulator,
461 bool solveWellWithZeroRate(
const Simulator& simulator,
466 bool solveWellForTesting(
const Simulator& simulator,
472 template<
class GasLiftSingleWell>
473 std::unique_ptr<GasLiftSingleWell> initializeGliftWellTest_(
const Simulator& simulator,
480 Eval getPerfCellPressure(
const FluidState& fs)
const;
483 template<
class Value,
class Callback>
484 void getMobility(
const Simulator& simulator,
486 std::vector<Value>&
mob,
490 void computeConnLevelProdInd(
const FluidState& fs,
491 const std::function<Scalar(
const Scalar)>&
connPICalc,
492 const std::vector<Scalar>& mobility,
495 void computeConnLevelInjInd(
const FluidState& fs,
497 const std::function<Scalar(
const Scalar)>&
connIICalc,
498 const std::vector<Scalar>& mobility,
502 Scalar computeConnectionDFactor(
const int perf,
503 const IntensiveQuantities& intQuants,
virtual void recoverWellSolutionAndUpdateWellState(const Simulator &simulator, const BVector &x, WellState< Scalar > &well_state, DeferredLogger &deferred_logger)=0
using the solution x to recover the solution xw for wells and applying xw to update Well State
void updateWellStateRates(const Simulator &simulator, WellState< Scalar > &well_state, DeferredLogger &deferred_logger) const
Modify the well_state's rates if there is only one nonzero rate.
Definition WellInterface_impl.hpp:1619
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:235