58 GetPropType<TypeTag, Properties::Indices>,
59 GetPropType<TypeTag, Properties::Scalar>>
77 using typename Base::RateConverterType;
82 using Base::has_solvent;
83 using Base::has_zFraction;
84 using Base::has_polymer;
85 using Base::has_polymermw;
87 using Base::has_brine;
88 using Base::has_energy;
97 static constexpr int numWellConservationEq = Indices::numPhases + Indices::numSolvents;
99 static constexpr int numWellControlEq = 1;
102 static constexpr int numStaticWellEq = numWellConservationEq + numWellControlEq;
107 static constexpr int Bhp = numStaticWellEq - numWellControlEq;
109 using StdWellEval::WQTotal;
121 using Eval =
typename StdWellEval::Eval;
122 using EvalWell =
typename StdWellEval::EvalWell;
123 using BVectorWell =
typename StdWellEval::BVectorWell;
130 const int pvtRegionIdx,
132 const int num_phases,
134 const std::vector<PerforationData>& perf_data);
140 const std::vector< Scalar >&
B_avg,
144 void initPrimaryVariablesEvaluation()
override;
149 const std::vector<double>&
B_avg,
154 virtual void apply(
const BVector& x, BVector&
Ax)
const override;
156 virtual void apply(BVector&
r)
const override;
168 std::vector<double>& well_potentials,
179 virtual void calculateExplicitQuantities(
const Simulator& ebosSimulator,
183 virtual void updateProductivityIndex(
const Simulator& ebosSimulator,
191 virtual void addWellContributions(SparseMatrixAdapter& mat)
const override;
193 virtual void addWellPressureEquations(PressureMatrix& mat,
195 const int pressureVarIndex,
197 const WellState& well_state)
const override;
200 bool iterateWellEqWithControl(
const Simulator& ebosSimulator,
209 bool iterateWellEqWithSwitching(
const Simulator& ebosSimulator,
220 return this->param_.matrix_add_well_contributions_;
224 double computeWellRatesAndBhpWithThpAlqProd(
const Simulator &
ebos_simulator,
230 void computeWellRatesWithThpAlqProd(
237 std::optional<double> computeBhpAtThpLimitProdWithAlq(
243 virtual void computeWellRatesWithBhp(
244 const Simulator& ebosSimulator,
250 using Base::phaseUsage;
251 using Base::vfp_properties_;
256 std::vector<double> getPrimaryVars()
const override;
258 int setPrimaryVars(std::vector<double>::const_iterator it)
override;
265 const BVectorWell&
dwells,
271 using WellConnectionProps =
typename StdWellEval::StdWellConnections::Properties;
272 void computePropertiesForWellConnectionPressures(
const Simulator& ebosSimulator,
274 WellConnectionProps&
props)
const;
276 void computeWellConnectionDensitesPressures(
const Simulator& ebosSimulator,
278 const WellConnectionProps&
props,
281 void computeWellConnectionPressures(
const Simulator& ebosSimulator,
285 template<
class Value>
286 void computePerfRate(
const IntensiveQuantities&
intQuants,
287 const std::vector<Value>&
mob,
292 std::vector<Value>&
cq_s,
296 template<
class Value>
297 void computePerfRate(
const std::vector<Value>&
mob,
298 const Value& pressure,
308 const Value& skin_pressure,
309 const std::vector<Value>&
cmix_s,
310 std::vector<Value>&
cq_s,
314 void computeWellRatesWithBhpIterations(
const Simulator& ebosSimulator,
319 std::vector<double> computeWellPotentialWithTHP(
320 const Simulator& ebosSimulator,
324 virtual double getRefDensity()
const override;
327 template<
class Value>
328 void getMobility(
const Simulator& ebosSimulator,
330 std::vector<Value>&
mob,
333 void updateWaterMobilityWithPolymer(
const Simulator&
ebos_simulator,
338 void updatePrimaryVariablesNewton(
const BVectorWell&
dwells,
347 virtual void assembleWellEqWithoutIteration(
const Simulator& ebosSimulator,
355 void assembleWellEqWithoutIterationImpl(
const Simulator& ebosSimulator,
363 void calculateSinglePerf(
const Simulator& ebosSimulator,
366 std::vector<RateVector>& connectionRates,
367 std::vector<EvalWell>&
cq_s,
383 bool allDrawDownWrongDirection(
const Simulator&
ebos_simulator)
const;
386 bool canProduceInjectWithCurrentBhp(
const Simulator&
ebos_simulator,
395 bool openCrossFlowAvoidSingularity(
const Simulator&
ebos_simulator)
const;
402 const EvalWell& water_velocity,
408 const EvalWell& water_velocity,
413 const EvalWell& water_velocity,
417 void handleInjectivityRate(
const Simulator& ebosSimulator,
419 std::vector<EvalWell>&
cq_s)
const;
422 void handleInjectivityEquations(
const Simulator& ebosSimulator,
428 virtual void updateWaterThroughput(
const double dt,
WellState& well_state)
const override;
431 void checkConvergenceExtraEqs(
const std::vector<double>&
res,
435 void updateConnectionRatePolyMW(
const EvalWell&
cq_s_poly,
439 std::vector<RateVector>& connectionRates,
443 std::optional<double> computeBhpAtThpLimitProd(
const WellState& well_state,
448 std::optional<double> computeBhpAtThpLimitInj(
const Simulator&
ebos_simulator,
454 const std::vector<EvalWell>&
cq_s,
458 template<
class Value>
459 void gasOilPerfRateInj(
const std::vector<Value>&
cq_s,
463 const Value& pressure,
467 template<
class Value>
468 void gasOilPerfRateProd(std::vector<Value>&
cq_s,
472 const Value& rvw)
const;
474 template<
class Value>
475 void gasWaterPerfRateProd(std::vector<Value>&
cq_s,
478 const Value& rsw)
const;
480 template<
class Value>
481 void gasWaterPerfRateInj(
const std::vector<Value>&
cq_s,
485 const Value& pressure,
488 template<
class Value>
492 const Value& pressure,
493 const std::vector<Value>&
cmix_s,
497 template<
class Value>
501 const Value& pressure,
502 const std::vector<Value>&
cmix_s,
virtual ConvergenceReport getWellConvergence(const SummaryState &summary_state, const WellState &well_state, const std::vector< double > &B_avg, DeferredLogger &deferred_logger, const bool relax_tolerance) const override
check whether the well equations get converged for this well
Definition StandardWell_impl.hpp:1082