35 GetPropType<TypeTag, Properties::Indices>>
42 using typename Base::Simulator;
43 using typename Base::IntensiveQuantities;
44 using typename Base::FluidSystem;
45 using typename Base::ModelParameters;
46 using typename Base::MaterialLaw;
47 using typename Base::Indices;
48 using typename Base::RateConverterType;
49 using typename Base::SparseMatrixAdapter;
50 using typename Base::FluidState;
52 using Base::has_solvent;
53 using Base::has_polymer;
58 using typename Base::Scalar;
61 using typename Base::BVector;
62 using typename Base::Eval;
65 using typename MSWEval::EvalWell;
66 using typename MSWEval::BVectorWell;
68 using typename Base::PressureMatrix;
73 const ModelParameters& param,
74 const RateConverterType& rate_converter,
75 const int pvtRegionIdx,
76 const int num_components,
78 const int index_of_well,
82 const std::vector<Scalar>& depth_arg,
83 const Scalar gravity_arg,
84 const std::vector<Scalar>& B_avg,
85 const bool changed_to_open_this_step)
override;
87 void initPrimaryVariablesEvaluation()
override;
98 const std::vector<Scalar>& B_avg,
100 const bool relax_tolerance)
const override;
103 void apply(
const BVector& x, BVector& Ax)
const override;
105 void apply(BVector& r)
const override;
117 std::vector<Scalar>& well_potentials,
120 void updatePrimaryVariables(
const Simulator& simulator,
124 void solveEqAndUpdateWellState(
const Simulator& simulator,
128 void calculateExplicitQuantities(
const Simulator& simulator,
132 void updateIPRImplicit(
const Simulator& simulator,
136 void updateProductivityIndex(
const Simulator& simulator,
141 Scalar connectionDensity(
const int globalConnIdx,
142 const int openConnIdx)
const override;
144 void addWellContributions(SparseMatrixAdapter& jacobian)
const override;
146 void addWellPressureEquations(PressureMatrix& mat,
148 const int pressureVarIndex,
149 const bool use_well_weights,
156 std::optional<Scalar>
157 computeBhpAtThpLimitProdWithAlq(
const Simulator& simulator,
158 const SummaryState& summary_state,
159 const Scalar alq_value,
162 std::vector<Scalar> getPrimaryVars()
const override;
164 int setPrimaryVars(
typename std::vector<Scalar>::const_iterator it)
override;
171 std::vector<std::vector<Scalar> > segment_fluid_initial_;
173 mutable int debug_cost_counter_ = 0;
176 void updateWellState(
const Simulator& simulator,
177 const BVectorWell& dwells,
180 const Scalar relaxation_factor = 1.0);
183 void computeInitialSegmentFluids(
const Simulator& simulator);
186 void computePerfCellPressDiffs(
const Simulator& simulator);
188 template<
class Value>
189 void computePerfRate(
const IntensiveQuantities& int_quants,
190 const std::vector<Value>& mob_perfcells,
191 const std::vector<Scalar>& Tw,
194 const Value& segment_pressure,
195 const bool& allow_cf,
196 std::vector<Value>& cq_s,
201 template<
class Value>
202 void computePerfRate(
const Value& pressure_cell,
205 const std::vector<Value>& b_perfcells,
206 const std::vector<Value>& mob_perfcells,
207 const std::vector<Scalar>& Tw,
209 const Value& segment_pressure,
210 const Value& segment_density,
211 const bool& allow_cf,
212 const std::vector<Value>& cmix_s,
213 std::vector<Value>& cq_s,
220 void computeSegmentFluidProperties(
const Simulator& simulator,
224 template<
class Value>
225 void getMobility(
const Simulator& simulator,
227 std::vector<Value>& mob,
230 void computeWellRatesAtBhpLimit(
const Simulator& simulator,
231 std::vector<Scalar>& well_flux,
234 void computeWellRatesWithBhp(
const Simulator& simulator,
236 std::vector<Scalar>& well_flux,
239 void computeWellRatesWithBhpIterations(
const Simulator& simulator,
241 std::vector<Scalar>& well_flux,
246 const Simulator& simulator,
249 bool computeWellPotentialsImplicit(
const Simulator& simulator,
250 std::vector<Scalar>& well_potentials,
253 Scalar getRefDensity()
const override;
255 bool iterateWellEqWithControl(
const Simulator& simulator,
257 const Well::InjectionControls& inj_controls,
258 const Well::ProductionControls& prod_controls,
263 bool iterateWellEqWithSwitching(
const Simulator& simulator,
265 const Well::InjectionControls& inj_controls,
266 const Well::ProductionControls& prod_controls,
270 const bool fixed_control =
false,
271 const bool fixed_status =
false)
override;
273 void assembleWellEqWithoutIteration(
const Simulator& simulator,
275 const Well::InjectionControls& inj_controls,
276 const Well::ProductionControls& prod_controls,
281 void updateWaterThroughput(
const double dt,
WellState<Scalar>& well_state)
const override;
283 EvalWell getSegmentSurfaceVolume(
const Simulator& simulator,
const int seg_idx)
const;
290 bool openCrossFlowAvoidSingularity(
const Simulator& simulator)
const;
294 bool allDrawDownWrongDirection(
const Simulator& simulator)
const;
296 std::optional<Scalar>
298 const Simulator& ebos_simulator,
299 const SummaryState& summary_state,
302 std::optional<Scalar>
303 computeBhpAtThpLimitInj(
const Simulator& ebos_simulator,
304 const SummaryState& summary_state,
307 Scalar maxPerfPress(
const Simulator& simulator)
const;
311 const Simulator& ebos_simulator,
315 void checkOperabilityUnderTHPLimit(
const Simulator& ebos_simulator,
320 void updateIPR(
const Simulator& ebos_simulator,