22#ifndef OPM_MULTISEGMENTWELL_HEADER_INCLUDED
23#define OPM_MULTISEGMENTWELL_HEADER_INCLUDED
25#include <opm/simulators/wells/WellInterface.hpp>
26#include <opm/simulators/wells/MultisegmentWellEval.hpp>
32 template<
typename TypeTag>
35 GetPropType<TypeTag, Properties::Indices>,
36 GetPropType<TypeTag, Properties::Scalar>>
50 using typename Base::RateConverterType;
54 using Base::has_solvent;
55 using Base::has_polymer;
77 const int pvtRegionIdx,
81 const std::vector<PerforationData>& perf_data);
87 const std::vector< Scalar >&
B_avg,
90 void initPrimaryVariablesEvaluation()
override;
100 const std::vector<double>&
B_avg,
105 virtual void apply(
const BVector& x, BVector&
Ax)
const override;
107 virtual void apply(BVector&
r)
const override;
119 std::vector<double>& well_potentials,
126 virtual void calculateExplicitQuantities(
const Simulator& ebosSimulator,
130 virtual void updateProductivityIndex(
const Simulator& ebosSimulator,
135 void addWellContributions(SparseMatrixAdapter&
jacobian)
const override;
137 void addWellPressureEquations(PressureMatrix& mat,
139 const int pressureVarIndex,
141 const WellState& well_state)
const override;
146 void computeConnLevelProdInd(
const FluidState&
fs,
147 const std::function<
double(
const double)>&
connPICalc,
148 const std::vector<Scalar>&
mobility,
151 void computeConnLevelInjInd(
const FluidState&
fs,
153 const std::function<
double(
const double)>&
connIICalc,
154 const std::vector<Scalar>&
mobility,
158 std::optional<double>
170 std::vector<std::vector<double> > segment_fluid_initial_;
172 mutable int debug_cost_counter_ = 0;
176 const BVectorWell&
dwells,
183 void computeInitialSegmentFluids(
const Simulator&
ebos_simulator);
186 void computePerfCellPressDiffs(
const Simulator& ebosSimulator);
188 void computePerfRateScalar(
const IntensiveQuantities&
int_quants,
195 std::vector<Scalar>&
cq_s,
198 void computePerfRateEval(
const IntensiveQuantities&
int_quants,
205 std::vector<EvalWell>&
cq_s,
211 template<
class Value>
222 const std::vector<Value>&
cmix_s,
223 std::vector<Value>&
cq_s,
231 void computeSegmentFluidProperties(
const Simulator& ebosSimulator,
235 void getMobilityEval(
const Simulator& ebosSimulator,
237 std::vector<EvalWell>&
mob)
const;
240 void getMobilityScalar(
const Simulator& ebosSimulator,
242 std::vector<Scalar>&
mob)
const;
244 void computeWellRatesAtBhpLimit(
const Simulator& ebosSimulator,
248 virtual void computeWellRatesWithBhp(
const Simulator& ebosSimulator,
253 void computeWellRatesWithBhpIterations(
const Simulator& ebosSimulator,
258 std::vector<double> computeWellPotentialWithTHP(
263 bool updateWellStateWithTHPTargetProd(
const Simulator&
ebos_simulator,
267 virtual double getRefDensity()
const override;
269 virtual bool iterateWellEqWithControl(
const Simulator& ebosSimulator,
277 virtual void assembleWellEqWithoutIteration(
const Simulator& ebosSimulator,
285 virtual void updateWaterThroughput(
const double dt,
WellState& well_state)
const override;
294 bool openCrossFlowAvoidSingularity(
const Simulator&
ebos_simulator)
const;
298 bool allDrawDownWrongDirection(
const Simulator&
ebos_simulator)
const;
302 std::optional<double> computeBhpAtThpLimitProd(
308 std::optional<double> computeBhpAtThpLimitInj(
const Simulator&
ebos_simulator,
326#include "MultisegmentWell_impl.hpp"
Definition AquiferInterface.hpp:35
Represents the convergence status of the whole simulator, to make it possible to query and store the ...
Definition ConvergenceReport.hpp:38
Definition DeferredLogger.hpp:57
Definition GroupState.hpp:34
Definition MultisegmentWellEval.hpp:49
Definition MultisegmentWell.hpp:37
virtual void updateWellStateWithTarget(const Simulator &ebos_simulator, const GroupState &group_state, WellState &well_state, DeferredLogger &deferred_logger) const override
updating the well state based the current control mode
Definition MultisegmentWell_impl.hpp:167
virtual void apply(const BVector &x, BVector &Ax) const override
Ax = Ax - C D^-1 B x.
Definition MultisegmentWell_impl.hpp:211
virtual std::vector< double > computeCurrentWellRates(const Simulator &ebosSimulator, DeferredLogger &deferred_logger) const override
Compute well rates based on current reservoir conditions and well variables.
Definition MultisegmentWell_impl.hpp:1915
void recoverWellSolutionAndUpdateWellState(const SummaryState &summary_state, const BVector &x, WellState &well_state, DeferredLogger &deferred_logger) override
using the solution x to recover the solution xw for wells and applying xw to update Well State
Definition MultisegmentWell_impl.hpp:246
virtual void computeWellPotentials(const Simulator &ebosSimulator, const WellState &well_state, std::vector< double > &well_potentials, DeferredLogger &deferred_logger) override
computing the well potentials for group control
Definition MultisegmentWell_impl.hpp:267
virtual ConvergenceReport getWellConvergence(const WellState &well_state, const std::vector< double > &B_avg, DeferredLogger &deferred_logger, const bool relax_tolerance=false) const override
check whether the well equations get converged for this well
Definition MultisegmentWell_impl.hpp:188
Class encapsulating some information about parallel wells.
Definition ParallelWellInfo.hpp:184
Definition WellInterface.hpp:74
Collect per-connection static information to enable calculating connection-level or well-level produc...
Definition WellProdIndexCalculator.hpp:36
The state of a set of wells, tailored for use by the fully implicit blackoil simulator.
Definition WellState.hpp:60
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition BlackoilPhases.hpp:27
Solver parameters for the BlackoilModel.
Definition BlackoilModelParametersEbos.hpp:327
Definition BlackoilPhases.hpp:46