opm-simulators
Loading...
Searching...
No Matches
Opm::MultisegmentWell< TypeTag > Class Template Reference
Inheritance diagram for Opm::MultisegmentWell< TypeTag >:
Opm::WellInterface< TypeTag > Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > > Opm::WellInterfaceIndices< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > > Opm::MultisegmentWellGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType > Opm::WellInterfaceFluidSystem< FluidSystem > Opm::WellInterfaceGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >

Public Types

using Base = WellInterface<TypeTag>
using MSWEval
using FSInfo = std::tuple<Scalar,typename std::decay<decltype(std::declval<decltype(std::declval<const Simulator&>().model().intensiveQuantities(0, 0).fluidState())>().saltConcentration())>::type,int>
using Simulator
using IntensiveQuantities
using FluidSystem
using IndexTraits
using ModelParameters
using MaterialLaw
using Indices
using RateConverterType
using SparseMatrixAdapter
using FluidState
using WellStateType
using Scalar
using BVector
using Eval
using Equations
using EvalWell
using BVectorWell
using PressureMatrix
Public Types inherited from Opm::WellInterface< TypeTag >
enum class  IndividualOrGroup { Individual , Group , Both }
using Grid = GetPropType<TypeTag, Properties::Grid>
using Simulator = GetPropType<TypeTag, Properties::Simulator>
using Scalar = GetPropType<TypeTag, Properties::Scalar>
using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>
using IndexTraits = typename FluidSystem::IndexTraitsType
using Indices = GetPropType<TypeTag, Properties::Indices>
using IntensiveQuantities = GetPropType<TypeTag, Properties::IntensiveQuantities>
using MaterialLaw = GetPropType<TypeTag, Properties::MaterialLaw>
using SparseMatrixAdapter = GetPropType<TypeTag, Properties::SparseMatrixAdapter>
using RateVector = GetPropType<TypeTag, Properties::RateVector>
using GasLiftSingleWell = ::Opm::GasLiftSingleWell<TypeTag>
using GLiftEclWells = typename GasLiftGroupInfo<Scalar, IndexTraits>::GLiftEclWells
using VectorBlockType = Dune::FieldVector<Scalar, Indices::numEq>
using MatrixBlockType = Dune::FieldMatrix<Scalar, Indices::numEq, Indices::numEq>
using Eval = typename Base::Eval
using BVector = Dune::BlockVector<VectorBlockType>
using PressureMatrix = Dune::BCRSMatrix<Opm::MatrixBlock<Scalar, 1, 1>>
using WellStateType = WellState<Scalar, IndexTraits>
using SingleWellStateType = SingleWellState<Scalar, IndexTraits>
using RateConverterType
using ModelParameters = typename Base::ModelParameters
using FluidState
Public Types inherited from Opm::WellInterfaceIndices< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
using Scalar
using Eval
using ModelParameters
Public Types inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
using Scalar = typename FluidSystem::Scalar
using IndexTraits = typename FluidSystem::IndexTraitsType
using ModelParameters = typename WellInterfaceGeneric<Scalar, IndexTraits>::ModelParameters
Public Types inherited from Opm::WellInterfaceGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
using ModelParameters
using WellStateType

Public Member Functions

 MultisegmentWell (const Well &well, const ParallelWellInfo< Scalar > &pw_info, const int time_step, const ModelParameters &param, const RateConverterType &rate_converter, const int pvtRegionIdx, const int num_conservation_quantities, const int num_phases, const int index_of_well, const std::vector< PerforationData< Scalar > > &perf_data)
void init (const std::vector< Scalar > &depth_arg, const Scalar gravity_arg, const std::vector< Scalar > &B_avg, const bool changed_to_open_this_step) override
void updateWellStateWithTarget (const Simulator &simulator, const GroupState< Scalar > &group_state, WellStateType &well_state, DeferredLogger &deferred_logger) const override
 updating the well state based the current control mode
void scaleSegmentRatesAndPressure (WellStateType &well_state) const override
 updating the segment pressure and rates based the current bhp and well rates
ConvergenceReport getWellConvergence (const Simulator &simulator, const WellStateType &well_state, const std::vector< Scalar > &B_avg, DeferredLogger &deferred_logger, const bool relax_tolerance) const override
 check whether the well equations get converged for this well
void apply (const BVector &x, BVector &Ax) const override
 Ax = Ax - C D^-1 B x.
void apply (BVector &r) const override
 r = r - C D^-1 Rw
void recoverWellSolutionAndUpdateWellState (const Simulator &simulator, const BVector &x, WellStateType &well_state, DeferredLogger &deferred_logger) override
 using the solution x to recover the solution xw for wells and applying xw to update Well State
void computeWellPotentials (const Simulator &simulator, const WellStateType &well_state, std::vector< Scalar > &well_potentials, DeferredLogger &deferred_logger) override
 computing the well potentials for group control
void updatePrimaryVariables (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger) override
void solveEqAndUpdateWellState (const Simulator &simulator, WellStateType &well_state, DeferredLogger &deferred_logger) override
void calculateExplicitQuantities (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger) override
void updateIPRImplicit (const Simulator &simulator, WellStateType &well_state, DeferredLogger &deferred_logger) override
void updateProductivityIndex (const Simulator &simulator, const WellProdIndexCalculator< Scalar > &wellPICalc, WellStateType &well_state, DeferredLogger &deferred_logger) const override
Scalar connectionDensity (const int globalConnIdx, const int openConnIdx) const override
void addWellContributions (SparseMatrixAdapter &jacobian) const override
void addWellPressureEquations (PressureMatrix &mat, const BVector &x, const int pressureVarIndex, const bool use_well_weights, const WellStateType &well_state) const override
std::vector< Scalar > computeCurrentWellRates (const Simulator &simulator, DeferredLogger &deferred_logger) const override
 Compute well rates based on current reservoir conditions and well variables.
std::optional< Scalar > computeBhpAtThpLimitProdWithAlq (const Simulator &simulator, const SummaryState &summary_state, const Scalar alq_value, DeferredLogger &deferred_logger, bool iterate_if_no_solution) const override
std::vector< Scalar > getPrimaryVars () const override
int setPrimaryVars (typename std::vector< Scalar >::const_iterator it) override
Public Member Functions inherited from Opm::WellInterface< TypeTag >
 WellInterface (const Well &well, const ParallelWellInfo< Scalar > &pw_info, const int time_step, const ModelParameters &param, const RateConverterType &rate_converter, const int pvtRegionIdx, const int num_conservation_quantities, const int num_phases, const int index_of_well, const std::vector< PerforationData< Scalar > > &perf_data)
 Constructor.
virtual ~WellInterface ()=default
 Virtual destructor.
virtual void init (const std::vector< Scalar > &depth_arg, const Scalar gravity_arg, const std::vector< Scalar > &B_avg, const bool changed_to_open_this_step)
virtual ConvergenceReport getWellConvergence (const Simulator &simulator, const WellStateType &well_state, const std::vector< Scalar > &B_avg, DeferredLogger &deferred_logger, const bool relax_tolerance) const =0
void assembleWellEq (const Simulator &simulator, const double dt, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
void assembleWellEqWithoutIteration (const Simulator &simulator, const double dt, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
void prepareWellBeforeAssembling (const Simulator &simulator, const double dt, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
virtual void computeWellRatesWithBhp (const Simulator &ebosSimulator, const Scalar &bhp, std::vector< Scalar > &well_flux, DeferredLogger &deferred_logger) const =0
virtual std::optional< Scalar > computeBhpAtThpLimitProdWithAlq (const Simulator &ebos_simulator, const SummaryState &summary_state, const Scalar alq_value, DeferredLogger &deferred_logger, bool iterate_if_no_solution) const =0
virtual void computeWellPotentials (const Simulator &simulator, const WellStateType &well_state, std::vector< Scalar > &well_potentials, DeferredLogger &deferred_logger)=0
virtual void updateWellStateWithTarget (const Simulator &simulator, const GroupState< Scalar > &group_state, WellStateType &well_state, DeferredLogger &deferred_logger) const
virtual void computeWellRatesWithBhpIterations (const Simulator &simulator, const Scalar &bhp, std::vector< Scalar > &well_flux, DeferredLogger &deferred_logger) const =0
bool wellUnderZeroRateTarget (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger) const
bool wellUnderZeroGroupRateTarget (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger, std::optional< bool > group_control=std::nullopt) const
bool stoppedOrZeroRateTarget (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger) const
bool updateWellStateWithTHPTargetProd (const Simulator &simulator, WellStateType &well_state, DeferredLogger &deferred_logger) const
bool updateWellControl (const Simulator &simulator, const IndividualOrGroup iog, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
bool updateWellControlAndStatusLocalIteration (const Simulator &simulator, WellStateType &well_state, const GroupState< Scalar > &group_state, const Well::InjectionControls &inj_controls, const Well::ProductionControls &prod_controls, const Scalar WQTotal, DeferredLogger &deferred_logger, const bool fixed_control=false, const bool fixed_status=false)
virtual void updateProductivityIndex (const Simulator &simulator, const WellProdIndexCalculator< Scalar > &wellPICalc, WellStateType &well_state, DeferredLogger &deferred_logger) const =0
void addCellRates (RateVector &rates, int cellIdx) const
Scalar volumetricSurfaceRateForConnection (int cellIdx, int phaseIdx) const
void wellTesting (const Simulator &simulator, const double simulation_time, WellStateType &well_state, const GroupState< Scalar > &group_state, WellTestState &welltest_state, GLiftEclWells &ecl_well_map, std::map< std::string, double > &open_times, DeferredLogger &deferred_logger)
void checkWellOperability (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger)
void gliftBeginTimeStepWellTestUpdateALQ (const Simulator &simulator, WellStateType &well_state, const GroupState< Scalar > &group_state, GLiftEclWells &ecl_well_map, DeferredLogger &deferred_logger)
void updateWellOperability (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger)
bool updateWellOperabilityFromWellEq (const Simulator &simulator, const WellStateType &well_state, DeferredLogger &deferred_logger)
void initializeProducerWellState (const Simulator &simulator, WellStateType &well_state, DeferredLogger &deferred_logger) const
 Modify the well_state's rates if there is only one nonzero rate.
void solveWellEquation (const Simulator &simulator, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
const std::vector< RateVector > & connectionRates () const
std::vector< Scalar > wellIndex (const int perf, const IntensiveQuantities &intQuants, const Scalar trans_mult, const SingleWellStateType &ws) const
void updateConnectionDFactor (const Simulator &simulator, SingleWellStateType &ws) const
void updateConnectionTransmissibilityFactor (const Simulator &simulator, SingleWellStateType &ws) const
virtual bool iterateWellEqWithSwitching (const Simulator &simulator, const double dt, const WellInjectionControls &inj_controls, const WellProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger, const bool fixed_control=false, const bool fixed_status=false)=0
Public Member Functions inherited from Opm::WellInterfaceIndices< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
Scalar scalingFactor (const int phaseIdx) const
Eval restrictEval (const EvalWell &in) const
Public Member Functions inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
const RateConverterType & rateConverter () const
Public Member Functions inherited from Opm::WellInterfaceGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
 WellInterfaceGeneric (const Well &well, const ParallelWellInfo< Scalar > &parallel_well_info, const int time_step, const ModelParameters &param, const int pvtRegionIdx, const int num_conservation_quantities, const int num_phases, const int index_of_well, const PhaseUsageInfo< FluidSystem::IndexTraitsType > &phase_usage, const std::vector< PerforationData< Scalar > > &perf_data)
const std::vector< PerforationData< Scalar > > & perforationData () const
 Get the perforations of the well.
const std::string & name () const
 Well name.
bool isInjector () const
 True if the well is an injector.
bool isProducer () const
 True if the well is a producer.
const std::vector< int > & cells () const
 Well cells.
int indexOfWell () const
 Index of well in the wells struct and wellState.
void adaptRatesForVFP (std::vector< Scalar > &rates) const
const Well & wellEcl () const
const PhaseUsageInfo< FluidSystem::IndexTraitsType > & phaseUsage () const
bool underPredictionMode () const
 Returns true if the well is currently in prediction mode (i.e. not history mode).
bool isOperableAndSolvable () const
bool useVfpExplicit () const
bool thpLimitViolatedButNotSwitched () const
void initCompletions ()
void closeCompletions (const WellTestState &wellTestState)
void setVFPProperties (const VFPProperties< Scalar, FluidSystem::IndexTraitsType > *vfp_properties_arg)
void setPrevSurfaceRates (WellStateType &well_state, const WellStateType &prev_well_state) const
void setGuideRate (const GuideRate *guide_rate_arg)
void setWellEfficiencyFactor (const Scalar efficiency_factor)
void setRepRadiusPerfLength ()
void setWsolvent (const Scalar wsolvent)
void setDynamicThpLimit (const Scalar thp_limit)
std::optional< Scalar > getDynamicThpLimit () const
void updatePerforatedCell (std::vector< bool > &is_cell_perforated)
bool wellHasTHPConstraints (const SummaryState &summaryState) const
 Returns true if the well has one or more THP limits/constraints.
void stopWell ()
void openWell ()
Well::Status wellStatus ()
bool wellIsStopped () const
int currentStep () const
int pvtRegionIdx () const
const GuideRate * guideRate () const
int numConservationQuantities () const
int numPhases () const
int numLocalPerfs () const
Scalar refDepth () const
Scalar gravity () const
const VFPProperties< Scalar, FluidSystem::IndexTraitsType > * vfpProperties () const
const ParallelWellInfo< Scalar > & parallelWellInfo () const
const std::vector< Scalar > & perfDepth () const
const std::vector< Scalar > & wellIndex () const
const std::map< int, std::vector< int > > & getCompletions () const
Scalar getTHPConstraint (const SummaryState &summaryState) const
Scalar getALQ (const WellStateType &well_state) const
Scalar wsolvent () const
Scalar rsRvInj () const
void initInjMult (const std::vector< Scalar > &max_inj_mult)
void updateInjMult (std::vector< Scalar > &inj_multipliers, DeferredLogger &deferred_logger) const
Scalar getInjMult (const int local_perf_index, const Scalar bhp, const Scalar perf_pres, DeferredLogger &dlogger) const
bool isVFPActive (DeferredLogger &deferred_logger) const
void reportWellSwitching (const SingleWellState< Scalar, FluidSystem::IndexTraitsType > &ws, DeferredLogger &deferred_logger) const
bool changedToOpenThisStep () const
void updateWellTestState (const SingleWellState< Scalar, FluidSystem::IndexTraitsType > &ws, const double &simulationTime, const bool &writeMessageToOPMLog, const bool zero_group_target, WellTestState &wellTestState, DeferredLogger &deferred_logger) const
bool isPressureControlled (const WellStateType &well_state) const
Scalar wellEfficiencyFactor () const
void updateFilterCakeMultipliers (const std::vector< Scalar > &inj_fc_multiplier)
 Update filter cake multipliers.
void resetWellOperability ()
virtual int setPrimaryVars (typename std::vector< Scalar >::const_iterator)
void addPerforations (const std::vector< RuntimePerforation > &perfs)
Public Member Functions inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
const Equations & linSys () const
 Returns a const reference to equation system.
Public Member Functions inherited from Opm::MultisegmentWellGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
const WellSegments & segmentSet () const
int segmentNumberToIndex (const int segment_number) const
int numberOfSegments () const
 number of segments for this well

Static Public Attributes

static constexpr bool has_solvent
static constexpr bool has_polymer
static constexpr int SPres
Static Public Attributes inherited from Opm::WellInterface< TypeTag >
static constexpr bool has_solvent = getPropValue<TypeTag, Properties::EnableSolvent>()
static constexpr bool has_zFraction = getPropValue<TypeTag, Properties::EnableExtbo>()
static constexpr bool has_polymer = getPropValue<TypeTag, Properties::EnablePolymer>()
static constexpr bool has_energy = getPropValue<TypeTag, Properties::EnableEnergy>()
static const bool has_temperature = getPropValue<TypeTag, Properties::EnableTemperature>()
static constexpr bool has_polymermw = getPropValue<TypeTag, Properties::EnablePolymerMW>()
static constexpr bool has_foam = getPropValue<TypeTag, Properties::EnableFoam>()
static constexpr bool has_brine = getPropValue<TypeTag, Properties::EnableBrine>()
static constexpr bool has_watVapor = getPropValue<TypeTag, Properties::EnableVapwat>()
static constexpr bool has_disgas_in_water = getPropValue<TypeTag, Properties::EnableDisgasInWater>()
static constexpr bool has_saltPrecip = getPropValue<TypeTag, Properties::EnableSaltPrecipitation>()
static constexpr bool has_bioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>()
static constexpr bool has_micp = Indices::enableMICP
Static Public Attributes inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
static constexpr int Water = IndexTraits::waterPhaseIdx
static constexpr int Oil = IndexTraits::oilPhaseIdx
static constexpr int Gas = IndexTraits::gasPhaseIdx

Protected Member Functions

void updateWellState (const Simulator &simulator, const BVectorWell &dwells, WellStateType &well_state, DeferredLogger &deferred_logger, const Scalar relaxation_factor=1.0)
void computeInitialSegmentFluids (const Simulator &simulator)
void computePerfCellPressDiffs (const Simulator &simulator)
template<class Value>
void computePerfRate (const IntensiveQuantities &int_quants, const std::vector< Value > &mob_perfcells, const std::vector< Scalar > &Tw, const int seg, const int perf, const Value &segment_pressure, const bool &allow_cf, std::vector< Value > &cq_s, Value &perf_press, PerforationRates< Scalar > &perf_rates, DeferredLogger &deferred_logger) const
template<class Value>
void computePerfRate (const Value &pressure_cell, const Value &rs, const Value &rv, const std::vector< Value > &b_perfcells, const std::vector< Value > &mob_perfcells, const std::vector< Scalar > &Tw, const int perf, const Value &segment_pressure, const Value &segment_density, const bool &allow_cf, const std::vector< Value > &cmix_s, std::vector< Value > &cq_s, Value &perf_press, PerforationRates< Scalar > &perf_rates, DeferredLogger &deferred_logger) const
void computeSegmentFluidProperties (const Simulator &simulator, DeferredLogger &deferred_logger)
template<class Value>
void getMobility (const Simulator &simulator, const int local_perf_index, std::vector< Value > &mob, DeferredLogger &deferred_logger) const
void computeWellRatesAtBhpLimit (const Simulator &simulator, std::vector< Scalar > &well_flux, DeferredLogger &deferred_logger) const
void computeWellRatesWithBhp (const Simulator &simulator, const Scalar &bhp, std::vector< Scalar > &well_flux, DeferredLogger &deferred_logger) const override
void computeWellRatesWithBhpIterations (const Simulator &simulator, const Scalar &bhp, std::vector< Scalar > &well_flux, DeferredLogger &deferred_logger) const override
std::vector< Scalar > computeWellPotentialWithTHP (const WellStateType &well_state, const Simulator &simulator, DeferredLogger &deferred_logger) const
bool computeWellPotentialsImplicit (const Simulator &simulator, const WellStateType &well_state, std::vector< Scalar > &well_potentials, DeferredLogger &deferred_logger) const
Scalar getRefDensity () const override
bool iterateWellEqWithControl (const Simulator &simulator, const double dt, const Well::InjectionControls &inj_controls, const Well::ProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger) override
bool iterateWellEqWithSwitching (const Simulator &simulator, const double dt, const Well::InjectionControls &inj_controls, const Well::ProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger, const bool fixed_control=false, const bool fixed_status=false) override
void assembleWellEqWithoutIteration (const Simulator &simulator, const double dt, const Well::InjectionControls &inj_controls, const Well::ProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger) override
void updateWaterThroughput (const double dt, WellStateType &well_state) const override
EvalWell getSegmentSurfaceVolume (const Simulator &simulator, const int seg_idx) const
bool openCrossFlowAvoidSingularity (const Simulator &simulator) const
bool allDrawDownWrongDirection (const Simulator &simulator) const
std::optional< Scalar > computeBhpAtThpLimitProd (const WellStateType &well_state, const Simulator &ebos_simulator, const SummaryState &summary_state, DeferredLogger &deferred_logger) const
std::optional< Scalar > computeBhpAtThpLimitInj (const Simulator &ebos_simulator, const SummaryState &summary_state, DeferredLogger &deferred_logger) const
Scalar maxPerfPress (const Simulator &simulator) const
void checkOperabilityUnderBHPLimit (const WellStateType &well_state, const Simulator &ebos_simulator, DeferredLogger &deferred_logger) override
void checkOperabilityUnderTHPLimit (const Simulator &ebos_simulator, const WellStateType &well_state, DeferredLogger &deferred_logger) override
void updateIPR (const Simulator &ebos_simulator, DeferredLogger &deferred_logger) const override
FSInfo getFirstPerforationFluidStateInfo (const Simulator &simulator) const
Protected Member Functions inherited from Opm::WellInterface< TypeTag >
Scalar wpolymer () const
Scalar wfoam () const
Scalar wsalt () const
Scalar wmicrobes () const
Scalar woxygen () const
Scalar wurea () const
std::vector< Scalar > initialWellRateFractions (const Simulator &ebosSimulator, const WellStateType &well_state) const
virtual void assembleWellEqWithoutIteration (const Simulator &simulator, const double dt, const WellInjectionControls &inj_controls, const WellProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)=0
virtual bool iterateWellEqWithControl (const Simulator &simulator, const double dt, const WellInjectionControls &inj_controls, const WellProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)=0
bool iterateWellEquations (const Simulator &simulator, const double dt, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
bool solveWellWithOperabilityCheck (const Simulator &simulator, const double dt, const Well::InjectionControls &inj_controls, const Well::ProductionControls &prod_controls, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
std::optional< Scalar > estimateOperableBhp (const Simulator &ebos_simulator, const double dt, WellStateType &well_state, const SummaryState &summary_state, DeferredLogger &deferred_logger)
bool solveWellWithBhp (const Simulator &simulator, const double dt, const Scalar bhp, WellStateType &well_state, DeferredLogger &deferred_logger)
bool solveWellWithZeroRate (const Simulator &simulator, const double dt, WellStateType &well_state, DeferredLogger &deferred_logger)
bool solveWellForTesting (const Simulator &simulator, WellStateType &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferred_logger)
template<class GasLiftSingleWell>
std::unique_ptr< GasLiftSingleWell > initializeGliftWellTest_ (const Simulator &simulator, WellStateType &well_state, const GroupState< Scalar > &group_state, GLiftEclWells &ecl_well_map, DeferredLogger &deferred_logger)
Eval getPerfCellPressure (const FluidState &fs) const
template<class Value, class Callback>
void getMobility (const Simulator &simulator, const int local_perf_index, std::vector< Value > &mob, Callback &extendEval, DeferredLogger &deferred_logger) const
void computeConnLevelProdInd (const FluidState &fs, const std::function< Scalar(const Scalar)> &connPICalc, const std::vector< Scalar > &mobility, Scalar *connPI) const
void computeConnLevelInjInd (const FluidState &fs, const Phase preferred_phase, const std::function< Scalar(const Scalar)> &connIICalc, const std::vector< Scalar > &mobility, Scalar *connII, DeferredLogger &deferred_logger) const
Scalar computeConnectionDFactor (const int perf, const IntensiveQuantities &intQuants, const SingleWellStateType &ws) const
Protected Member Functions inherited from Opm::WellInterfaceIndices< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
 WellInterfaceIndices (const Well &well, const ParallelWellInfo< Scalar > &parallel_well_info, const int time_step, const ModelParameters &param, const typename WellInterfaceFluidSystem< FluidSystem >::RateConverterType &rate_converter, const int pvtRegionIdx, const int num_conservation_quantities, const int num_phases, const int index_of_well, const std::vector< PerforationData< Scalar > > &perf_data)
Protected Member Functions inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
 WellInterfaceFluidSystem (const Well &well, const ParallelWellInfo< Scalar > &parallel_well_info, const int time_step, const ModelParameters &param, const RateConverterType &rate_converter, const int pvtRegionIdx, const int num_conservation_quantities, const int num_phases, const int index_of_well, const std::vector< PerforationData< Scalar > > &perf_data)
void calculateReservoirRates (const bool co2store, SingleWellState< Scalar, IndexTraits > &ws) const
bool checkIndividualConstraints (SingleWellState< Scalar, IndexTraits > &ws, const SummaryState &summaryState, DeferredLogger &deferred_logger, const std::optional< Well::InjectionControls > &inj_controls=std::nullopt, const std::optional< Well::ProductionControls > &prod_controls=std::nullopt) const
bool checkGroupConstraints (WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, const Schedule &schedule, const SummaryState &summaryState, const bool check_guide_rate, DeferredLogger &deferred_logger) const
bool checkConstraints (WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, const Schedule &schedule, const SummaryState &summaryState, DeferredLogger &deferred_logger) const
std::optional< Scalar > getGroupInjectionTargetRate (const Group &group, const WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, const Schedule &schedule, const SummaryState &summaryState, const InjectorType &injectorType, Scalar efficiencyFactor, DeferredLogger &deferred_logger) const
Scalar getGroupProductionTargetRate (const Group &group, const WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, const Schedule &schedule, const SummaryState &summaryState, Scalar efficiencyFactor, DeferredLogger &deferred_logger) const
bool zeroGroupRateTarget (const SummaryState &summary_state, const Schedule &schedule, const WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, DeferredLogger &deferredLogger) const
Protected Member Functions inherited from Opm::WellInterfaceGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
bool getAllowCrossFlow () const
Scalar wmicrobes_ () const
Scalar wfoam_ () const
Scalar woxygen_ () const
Scalar wpolymer_ () const
Scalar wsalt_ () const
Scalar wurea_ () const
int polymerTable_ () const
int polymerInjTable_ () const
int polymerWaterTable_ () const
bool wellUnderZeroRateTargetIndividual (const SummaryState &summary_state, const WellState< Scalar, FluidSystem::IndexTraitsType > &well_state) const
bool wellUnderGroupControl (const SingleWellState< Scalar, FluidSystem::IndexTraitsType > &ws) const
std::pair< bool, bool > computeWellPotentials (std::vector< Scalar > &well_potentials, const WellStateType &well_state)
void checkNegativeWellPotentials (std::vector< Scalar > &well_potentials, const bool checkOperability, DeferredLogger &deferred_logger)
void onlyKeepBHPandTHPcontrols (const SummaryState &summary_state, WellStateType &well_state, Well::InjectionControls &inj_controls, Well::ProductionControls &prod_controls) const
void resetDampening ()
Protected Member Functions inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
 MultisegmentWellEval (WellInterfaceIndices< FluidSystem, Indices > &baseif, const ParallelWellInfo< Scalar > &pw_info)
void initMatrixAndVectors ()
void assembleDefaultPressureEq (const int seg, WellState< Scalar, IndexTraits > &well_state, const bool use_average_density)
void assembleICDPressureEq (const int seg, const UnitSystem &unit_system, WellState< Scalar, IndexTraits > &well_state, const SummaryState &summary_state, const bool use_average_density, DeferredLogger &deferred_logger)
void assembleAccelerationAndHydroPressureLosses (const int seg, WellState< Scalar, IndexTraits > &well_state, const bool use_average_density)
void assemblePressureEq (const int seg, const UnitSystem &unit_system, WellState< Scalar, IndexTraits > &well_state, const SummaryState &summary_state, const bool use_average_density, DeferredLogger &deferred_logger)
ConvergenceReport getWellConvergence (const WellState< Scalar, IndexTraits > &well_state, const std::vector< Scalar > &B_avg, DeferredLogger &deferred_logger, const Scalar max_residual_allowed, const Scalar tolerance_wells, const Scalar relaxed_inner_tolerance_flow_ms_well, const Scalar tolerance_pressure_ms_wells, const Scalar relaxed_inner_tolerance_pressure_ms_well, const bool relax_tolerance, const bool well_is_stopped) const
 check whether the well equations get converged for this well
std::pair< bool, std::vector< Scalar > > getFiniteWellResiduals (const std::vector< Scalar > &B_avg, DeferredLogger &deferred_logger) const
Scalar getControlTolerance (const WellState< Scalar, IndexTraits > &well_state, const Scalar tolerance_wells, const Scalar tolerance_pressure_ms_wells, DeferredLogger &deferred_logger) const
Scalar getResidualMeasureValue (const WellState< Scalar, IndexTraits > &well_state, const std::vector< Scalar > &residuals, const Scalar tolerance_wells, const Scalar tolerance_pressure_ms_wells, DeferredLogger &deferred_logger) const
void assembleAccelerationPressureLoss (const int seg, WellState< Scalar, IndexTraits > &well_state)
EvalWell pressureDropAutoICD (const int seg, const UnitSystem &unit_system) const
EvalWell extendEval (const Eval &in) const
Protected Member Functions inherited from Opm::MultisegmentWellGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
 MultisegmentWellGeneric (WellInterfaceGeneric< Scalar, FluidSystem::IndexTraitsType > &baseif)
void scaleSegmentRatesWithWellRates (const std::vector< std::vector< int > > &segment_inlets, const std::vector< std::vector< int > > &segment_perforations, WellState< Scalar, FluidSystem::IndexTraitsType > &well_state) const
void scaleSegmentPressuresWithBhp (WellState< Scalar, FluidSystem::IndexTraitsType > &well_state) const
WellSegmentCompPressureDrop compPressureDrop () const
bool update_relaxation_factor (const std::vector< Scalar > &measure_history, Scalar &relaxation_factor, bool &regularize, DeferredLogger &deferred_logger) const
 Detect oscillation or stagnation based on the residual measure history.
bool repeatedStagnation (const std::vector< Scalar > &measure_history, bool &regularize, DeferredLogger &deferred_logger) const
bool accelerationalPressureLossConsidered () const
bool frictionalPressureLossConsidered () const
Scalar getSegmentDp (const int seg, const Scalar density, const std::vector< Scalar > &seg_dp) const

Protected Attributes

bool regularize_
std::vector< std::vector< Scalar > > segment_fluid_initial_
int debug_cost_counter_ = 0
Protected Attributes inherited from Opm::WellInterface< TypeTag >
std::vector< RateVector > connectionRates_
std::vector< Scalar > B_avg_
bool changed_to_stopped_this_step_ = false
bool thp_update_iterations = false
int number_of_well_reopenings_ {0}
Protected Attributes inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
const RateConverterType & rateConverter_
Protected Attributes inherited from Opm::WellInterfaceGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
OperabilityStatus operability_status_
Well well_ecl_
const ParallelWellInfo< Scalar > & parallel_well_info_
const int current_step_
const ModelParameters & param_
const int pvtRegionIdx_
const int num_conservation_quantities_
int number_of_phases_
int index_of_well_
const PhaseUsageInfo< FluidSystem::IndexTraitsType > & phase_usage_
const std::vector< PerforationData< Scalar > > * perf_data_
std::vector< Scalar > ipr_a_
std::vector< Scalar > ipr_b_
std::vector< int > well_cells_
std::vector< Scalar > well_index_
int number_of_local_perforations_
std::vector< Scalar > perf_depth_
std::vector< Scalar > perf_rep_radius_
std::vector< Scalar > perf_length_
std::vector< Scalar > bore_diameters_
std::map< int, std::vector< int > > completions_
Scalar ref_depth_
std::vector< int > saturation_table_number_
Well::Status wellStatus_
Scalar gravity_
Scalar wsolvent_
std::optional< Scalar > dynamic_thp_limit_
std::vector< Scalar > inj_multiplier_
std::vector< Scalar > prev_inj_multiplier_
std::vector< Scalar > inj_multiplier_previter_
std::vector< Scalar > inj_multiplier_damp_factor_
std::vector< Scalar > inj_fc_multiplier_
Scalar well_efficiency_factor_
const VFPProperties< Scalar, FluidSystem::IndexTraitsType > * vfp_properties_
const GuideRate * guide_rate_
std::vector< std::string > well_control_log_
bool changed_to_open_this_step_
Protected Attributes inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
const WellInterfaceIndices< FluidSystem, Indices > & baseif_
Equations linSys_
 The equation system.
PrimaryVariables primary_variables_
 The primary variables.
MSWSegments segments_
 Segment properties.
std::vector< Scalar > cell_perforation_depth_diffs_
std::vector< Scalar > cell_perforation_pressure_diffs_
Protected Attributes inherited from Opm::MultisegmentWellGeneric< FluidSystem::Scalar, FluidSystem::IndexTraitsType >
const WellInterfaceGeneric< Scalar, FluidSystem::IndexTraitsType > & baseif_

Additional Inherited Members

Public Attributes inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
const ParallelWellInfo< Scalar > & pw_info_
Protected Types inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
using RateConverterType
Protected Types inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
using Scalar
using IndexTraits
using PrimaryVariables
using Equations
using MSWSegments
using BVector
using BVectorWell
using EvalWell
using Eval
Static Protected Attributes inherited from Opm::WellInterfaceFluidSystem< FluidSystem >
static constexpr int INVALIDCOMPLETION = std::numeric_limits<int>::max()
Static Protected Attributes inherited from Opm::MultisegmentWellEval< GetPropType< TypeTag, Properties::FluidSystem >, GetPropType< TypeTag, Properties::Indices > >
static constexpr int numWellEq
static constexpr int SPres
static constexpr int WQTotal

Member Typedef Documentation

◆ MSWEval

template<typename TypeTag>
using Opm::MultisegmentWell< TypeTag >::MSWEval
Initial value:
MultisegmentWellEval<GetPropType<TypeTag, Properties::FluidSystem>,
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:233

Member Function Documentation

◆ addWellContributions()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::addWellContributions ( SparseMatrixAdapter & jacobian) const
overridevirtual

◆ addWellPressureEquations()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::addWellPressureEquations ( PressureMatrix & mat,
const BVector & x,
const int pressureVarIndex,
const bool use_well_weights,
const WellStateType & well_state ) const
overridevirtual

◆ apply() [1/2]

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::apply ( BVector & r) const
overridevirtual

r = r - C D^-1 Rw

Implements Opm::WellInterface< TypeTag >.

◆ apply() [2/2]

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::apply ( const BVector & x,
BVector & Ax ) const
overridevirtual

Ax = Ax - C D^-1 B x.

Implements Opm::WellInterface< TypeTag >.

◆ calculateExplicitQuantities()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::calculateExplicitQuantities ( const Simulator & simulator,
const WellStateType & well_state,
DeferredLogger & deferred_logger )
overridevirtual

◆ checkOperabilityUnderBHPLimit()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::checkOperabilityUnderBHPLimit ( const WellStateType & well_state,
const Simulator & ebos_simulator,
DeferredLogger & deferred_logger )
overrideprotectedvirtual

◆ checkOperabilityUnderTHPLimit()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::checkOperabilityUnderTHPLimit ( const Simulator & ebos_simulator,
const WellStateType & well_state,
DeferredLogger & deferred_logger )
overrideprotectedvirtual

◆ computeCurrentWellRates()

template<typename TypeTag>
std::vector< typename MultisegmentWell< TypeTag >::Scalar > Opm::MultisegmentWell< TypeTag >::computeCurrentWellRates ( const Simulator & simulator,
DeferredLogger & deferred_logger ) const
overridevirtual

Compute well rates based on current reservoir conditions and well variables.

Used in updateWellStateRates().

Implements Opm::WellInterface< TypeTag >.

◆ connectionDensity()

template<typename TypeTag>
MultisegmentWell< TypeTag >::Scalar Opm::MultisegmentWell< TypeTag >::connectionDensity ( const int globalConnIdx,
const int openConnIdx ) const
overridevirtual

◆ getPrimaryVars()

template<typename TypeTag>
std::vector< typename MultisegmentWell< TypeTag >::Scalar > Opm::MultisegmentWell< TypeTag >::getPrimaryVars ( ) const
overridevirtual

◆ getRefDensity()

template<typename TypeTag>
MultisegmentWell< TypeTag >::Scalar Opm::MultisegmentWell< TypeTag >::getRefDensity ( ) const
overrideprotectedvirtual

◆ recoverWellSolutionAndUpdateWellState()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::recoverWellSolutionAndUpdateWellState ( const Simulator & simulator,
const BVector & x,
WellStateType & well_state,
DeferredLogger & deferred_logger )
overridevirtual

using the solution x to recover the solution xw for wells and applying xw to update Well State

Implements Opm::WellInterface< TypeTag >.

◆ scaleSegmentRatesAndPressure()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::scaleSegmentRatesAndPressure ( WellStateType & well_state) const
overridevirtual

updating the segment pressure and rates based the current bhp and well rates

Reimplemented from Opm::WellInterface< TypeTag >.

◆ solveEqAndUpdateWellState()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::solveEqAndUpdateWellState ( const Simulator & simulator,
WellStateType & well_state,
DeferredLogger & deferred_logger )
overridevirtual

◆ updateIPR()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::updateIPR ( const Simulator & ebos_simulator,
DeferredLogger & deferred_logger ) const
overrideprotectedvirtual

◆ updateIPRImplicit()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::updateIPRImplicit ( const Simulator & simulator,
WellStateType & well_state,
DeferredLogger & deferred_logger )
overridevirtual

◆ updatePrimaryVariables()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::updatePrimaryVariables ( const Simulator & simulator,
const WellStateType & well_state,
DeferredLogger & deferred_logger )
overridevirtual

◆ updateWaterThroughput()

template<typename TypeTag>
void Opm::MultisegmentWell< TypeTag >::updateWaterThroughput ( const double dt,
WellStateType & well_state ) const
overrideprotectedvirtual

The documentation for this class was generated from the following files: