My Project
Opm::BlackoilWellModel< TypeTag > Class Template Reference

Class for handling the blackoil well model. More...

#include <BlackoilWellModel.hpp>

Inheritance diagram for Opm::BlackoilWellModel< TypeTag >:
Opm::BlackoilWellModelGeneric

Public Types

typedef BlackoilModelParametersEbos< TypeTag > ModelParameters
 
using Grid = GetPropType< TypeTag, Properties::Grid >
 
using EquilGrid = GetPropType< TypeTag, Properties::EquilGrid >
 
using FluidSystem = GetPropType< TypeTag, Properties::FluidSystem >
 
using ElementContext = GetPropType< TypeTag, Properties::ElementContext >
 
using Indices = GetPropType< TypeTag, Properties::Indices >
 
using Simulator = GetPropType< TypeTag, Properties::Simulator >
 
using Scalar = GetPropType< TypeTag, Properties::Scalar >
 
using RateVector = GetPropType< TypeTag, Properties::RateVector >
 
using GlobalEqVector = GetPropType< TypeTag, Properties::GlobalEqVector >
 
using SparseMatrixAdapter = GetPropType< TypeTag, Properties::SparseMatrixAdapter >
 
using GasLiftSingleWell = typename WellInterface< TypeTag >::GasLiftSingleWell
 
using GLiftOptWells = typename BlackoilWellModelGeneric::GLiftOptWells
 
using GLiftProdWells = typename BlackoilWellModelGeneric::GLiftProdWells
 
using GLiftWellStateMap = typename BlackoilWellModelGeneric::GLiftWellStateMap
 
using GLiftEclWells = typename GasLiftGroupInfo::GLiftEclWells
 
using GLiftSyncGroups = typename GasLiftSingleWellGeneric::GLiftSyncGroups
 
typedef BaseAuxiliaryModule< TypeTag >::NeighborSet NeighborSet
 
typedef Dune::FieldVector< Scalar, numEq > VectorBlockType
 
typedef Dune::BlockVector< VectorBlockType > BVector
 
typedef BlackOilPolymerModule< TypeTag > PolymerModule
 
typedef BlackOilMICPModule< TypeTag > MICPModule
 
using RateConverterType = RateConverter::SurfaceToReservoirVoidage< FluidSystem, std::vector< int > >
 
using AverageRegionalPressureType = RegionAverageCalculator::AverageRegionalPressure< FluidSystem, std::vector< int > >
 
using WellInterfacePtr = std::shared_ptr< WellInterface< TypeTag > >
 
using PressureMatrix = Dune::BCRSMatrix< Opm::MatrixBlock< double, 1, 1 > >
 
- Public Types inherited from Opm::BlackoilWellModelGeneric
using GLiftOptWells = std::map< std::string, std::unique_ptr< GasLiftSingleWellGeneric > >
 
using GLiftProdWells = std::map< std::string, const WellInterfaceGeneric * >
 
using GLiftWellStateMap = std::map< std::string, std::unique_ptr< GasLiftWellState > >
 

Public Member Functions

 BlackoilWellModel (Simulator &ebosSimulator)
 
void init ()
 
void initWellContainer (const int reportStepIdx) override
 
unsigned numDofs () const override
 
void addNeighbors (std::vector< NeighborSet > &neighbors) const override
 
void applyInitial () override
 
void linearize (SparseMatrixAdapter &jacobian, GlobalEqVector &res) override
 
void postSolve (GlobalEqVector &deltaX) override
 
template<class Restarter >
void deserialize (Restarter &)
 
template<class Restarter >
void serialize (Restarter &)
 This method writes the complete state of the well to the harddisk.
 
void beginEpisode ()
 
void beginTimeStep ()
 
void beginIteration ()
 
void endIteration ()
 
void endTimeStep ()
 
void endEpisode ()
 
void computeTotalRatesForDof (RateVector &rate, unsigned globalIdx) const
 
template<class Context >
void computeTotalRatesForDof (RateVector &rate, const Context &context, unsigned spaceIdx, unsigned timeIdx) const
 
void initFromRestartFile (const RestartValue &restartValues)
 
data::Wells wellData () const
 
void apply (BVector &r) const
 
void apply (const BVector &x, BVector &Ax) const
 
void getWellContributions (WellContributions &x) const
 
void applyScaleAdd (const Scalar alpha, const BVector &x, BVector &Ax) const
 
ConvergenceReport getWellConvergence (const std::vector< Scalar > &B_avg, const bool checkWellGroupControls=false) const
 
const SimulatorReportSinglelastReport () const
 
void addWellContributions (SparseMatrixAdapter &jacobian) const
 
void beginReportStep (const int time_step)
 
void updatePerforationIntensiveQuantities ()
 
void calculateExplicitQuantities (DeferredLogger &deferred_logger) const
 Calculating the explict quantities used in the well calculation. More...
 
void prepareTimeStep (DeferredLogger &deferred_logger)
 
void initPrimaryVariablesEvaluation () const
 
bool shouldBalanceNetwork (const int reportStepIndex, const int iterationIdx) const
 
std::tuple< bool, bool, double > updateWellControls (DeferredLogger &deferred_logger)
 
void updateAndCommunicate (const int reportStepIdx, const int iterationIdx, DeferredLogger &deferred_logger)
 
bool updateGroupControls (const Group &group, DeferredLogger &deferred_logger, const int reportStepIdx, const int iterationIdx)
 
WellInterfacePtr getWell (const std::string &well_name) const
 
bool hasWell (const std::string &well_name) const
 
int numLocalWellsEnd () const
 
void addWellPressureEquations (PressureMatrix &jacobian, const BVector &weights, const bool use_well_weights) const
 
std::vector< std::vector< int > > getMaxWellConnections () const
 
void addWellPressureEquationsStruct (PressureMatrix &jacobian) const
 
void initGliftEclWellMap (GLiftEclWells &ecl_well_map)
 
const std::vector< WellInterfacePtr > & localNonshutWells () const
 Get list of local nonshut wells.
 
int numLocalNonshutWells () const
 
void initFromRestartFile (const RestartValue &restartValues, WellTestState wtestState, const size_t numCells, bool handle_ms_well)
 
- Public Member Functions inherited from Opm::BlackoilWellModelGeneric
 BlackoilWellModelGeneric (Schedule &schedule, const SummaryState &summaryState, const EclipseState &eclState, const PhaseUsage &phase_usage, const Parallel::Communication &comm)
 
int numLocalWells () const
 
int numPhases () const
 
bool wellsActive () const
 return true if wells are available in the reservoir
 
bool hasWell (const std::string &wname)
 
bool anyMSWellOpenLocal () const
 
const Well & getWellEcl (const std::string &well_name) const
 
std::vector< Well > getLocalWells (const int timeStepIdx) const
 
const Schedule & schedule () const
 
const PhaseUsagephaseUsage () const
 
const GroupStategroupState () const
 
const WellStatewellState () const
 
WellStatewellState ()
 
GroupStategroupState ()
 
WellTestState & wellTestState ()
 
const WellTestState & wellTestState () const
 
double wellPI (const int well_index) const
 
double wellPI (const std::string &well_name) const
 
void updateEclWells (const int timeStepIdx, const std::unordered_set< std::string > &wells, const SummaryState &st)
 
void loadRestartData (const data::Wells &rst_wells, const data::GroupAndNetworkValues &grpNwrkValues, const PhaseUsage &phases, const bool handle_ms_well, WellState &well_state)
 
void initFromRestartFile (const RestartValue &restartValues, WellTestState wtestState, const size_t numCells, bool handle_ms_well)
 
void commitWGState ()
 
data::GroupAndNetworkValues groupAndNetworkData (const int reportStepIdx) const
 
bool hasTHPConstraints () const
 Return true if any well has a THP constraint.
 
bool forceShutWellByName (const std::string &wellname, const double simulation_time)
 Shut down any single well Returns true if the well was actually found and shut.
 

Static Public Attributes

constexpr static std::size_t pressureVarIndex = GetPropType<TypeTag, Properties::Indices>::pressureSwitchIdx
 
static const int numEq = Indices::numEq
 
static const int solventSaturationIdx = Indices::solventSaturationIdx
 
static constexpr bool has_solvent_ = getPropValue<TypeTag, Properties::EnableSolvent>()
 
static constexpr bool has_polymer_ = getPropValue<TypeTag, Properties::EnablePolymer>()
 
static constexpr bool has_energy_ = getPropValue<TypeTag, Properties::EnableEnergy>()
 
static constexpr bool has_micp_ = getPropValue<TypeTag, Properties::EnableMICP>()
 

Protected Member Functions

void initializeWellState (const int timeStepIdx, const SummaryState &summaryState)
 
void createWellContainer (const int time_step) override
 
WellInterfacePtr createWellPointer (const int wellID, const int time_step) const
 
template<typename WellType >
std::unique_ptr< WellType > createTypedWellPointer (const int wellID, const int time_step) const
 
WellInterfacePtr createWellForWellTest (const std::string &well_name, const int report_step, DeferredLogger &deferred_logger) const
 
const Grid & grid () const
 
const EquilGrid & equilGrid () const
 
const EclipseState & eclState () const
 
void assemble (const int iterationIdx, const double dt)
 
bool assembleImpl (const int iterationIdx, const double dt, const std::size_t recursion_level, DeferredLogger &local_deferredLogger)
 
void timeStepSucceeded (const double &simulationTime, const double dt)
 
void endReportStep ()
 
void recoverWellSolutionAndUpdateWellState (const BVector &x)
 
void updatePrimaryVariables (DeferredLogger &deferred_logger)
 
void updateAverageFormationFactor ()
 
void computePotentials (const std::size_t widx, const WellState &well_state_copy, std::string &exc_msg, ExceptionType::ExcEnum &exc_type, DeferredLogger &deferred_logger) override
 
const std::vector< double > & wellPerfEfficiencyFactors () const
 
void calculateProductivityIndexValuesShutWells (const int reportStepIdx, DeferredLogger &deferred_logger) override
 
void calculateProductivityIndexValues (DeferredLogger &deferred_logger) override
 
void calculateProductivityIndexValues (const WellInterface< TypeTag > *wellPtr, DeferredLogger &deferred_logger)
 
int numComponents () const
 
int reportStepIndex () const
 
void assembleWellEq (const double dt, DeferredLogger &deferred_logger)
 
bool maybeDoGasLiftOptimize (DeferredLogger &deferred_logger)
 
void gasLiftOptimizationStage1 (DeferredLogger &deferred_logger, GLiftProdWells &prod_wells, GLiftOptWells &glift_wells, GasLiftGroupInfo &group_info, GLiftWellStateMap &state_map)
 
void gasLiftOptimizationStage1SingleWell (WellInterface< TypeTag > *well, DeferredLogger &deferred_logger, GLiftProdWells &prod_wells, GLiftOptWells &glift_wells, GasLiftGroupInfo &group_info, GLiftWellStateMap &state_map, GLiftSyncGroups &groups_to_sync)
 
void extractLegacyCellPvtRegionIndex_ ()
 
void extractLegacyDepth_ ()
 
void updateWellTestState (const double &simulationTime, WellTestState &wellTestState) const
 upate the wellTestState related to economic limits
 
void wellTesting (const int timeStepIdx, const double simulationTime, DeferredLogger &deferred_logger)
 
void calcRates (const int fipnum, const int pvtreg, std::vector< double > &resv_coeff) override
 
void calcInjRates (const int fipnum, const int pvtreg, std::vector< double > &resv_coeff) override
 
void computeWellTemperature ()
 
void assignWellTracerRates (data::Wells &wsrpt) const
 
int compressedIndexForInterior (int cartesian_cell_idx) const override
 get compressed index for interior cells (-1, otherwise
 
- Protected Member Functions inherited from Opm::BlackoilWellModelGeneric
const WellStateprevWellState () const
 
const WGStateprevWGState () const
 
const WellStatenupcolWellState () const
 
void commitWGState (WGState wgstate)
 
void resetWGState ()
 
void updateNupcolWGState ()
 
std::vector< std::reference_wrapper< ParallelWellInfo > > createLocalParallelWellInfo (const std::vector< Well > &wells)
 Create the parallel well information. More...
 
void initializeWellProdIndCalculators ()
 
void initializeWellPerfData ()
 
bool wasDynamicallyShutThisTimeStep (const int well_index) const
 
std::pair< bool, double > updateNetworkPressures (const int reportStepIdx)
 
void updateWsolvent (const Group &group, const int reportStepIdx, const WellState &wellState)
 
void setWsolvent (const Group &group, const int reportStepIdx, double wsolvent)
 
data::GuideRateValue getGuideRateValues (const Group &group) const
 
data::GuideRateValue getGuideRateValues (const Well &well) const
 
data::GuideRateValue getGuideRateInjectionGroupValues (const Group &group) const
 
void getGuideRateValues (const GuideRate::RateVector &qs, const bool is_inj, const std::string &wgname, data::GuideRateValue &grval) const
 
void assignWellGuideRates (data::Wells &wsrpt, const int reportStepIdx) const
 
void assignShutConnections (data::Wells &wsrpt, const int reportStepIndex) const
 
void assignGroupControl (const Group &group, data::GroupData &gdata) const
 
void assignGroupGuideRates (const Group &group, const std::unordered_map< std::string, data::GroupGuideRates > &groupGuideRates, data::GroupData &gdata) const
 
void assignGroupValues (const int reportStepIdx, std::map< std::string, data::GroupData > &gvalues) const
 
void assignNodeValues (std::map< std::string, data::NodeData > &nodevalues) const
 
void loadRestartConnectionData (const std::vector< data::Rates::opt > &phs, const data::Well &rst_well, const std::vector< PerforationData > &old_perf_data, SingleWellState &ws)
 
void loadRestartSegmentData (const std::string &well_name, const std::vector< data::Rates::opt > &phs, const data::Well &rst_well, SingleWellState &ws)
 
void loadRestartWellData (const std::string &well_name, const bool handle_ms_well, const std::vector< data::Rates::opt > &phs, const data::Well &rst_well, const std::vector< PerforationData > &old_perf_data, SingleWellState &ws)
 
void loadRestartGroupData (const std::string &group, const data::GroupData &value)
 
void loadRestartGuideRates (const int report_step, const GuideRateModel::Target target, const data::Wells &rst_wells)
 
void loadRestartGuideRates (const int report_step, const GuideRateConfig &config, const std::map< std::string, data::GroupData > &rst_groups)
 
std::unordered_map< std::string, data::GroupGuideRates > calculateAllGroupGuiderates (const int reportStepIdx) const
 
void calculateEfficiencyFactors (const int reportStepIdx)
 
bool checkGroupConstraints (const Group &group, const int reportStepIdx, DeferredLogger &deferred_logger) const
 
std::pair< Group::InjectionCMode, double > checkGroupInjectionConstraints (const Group &group, const int reportStepIdx, const Phase &phase) const
 
std::pair< Group::ProductionCMode, double > checkGroupProductionConstraints (const Group &group, const int reportStepIdx, DeferredLogger &deferred_logger) const
 
void checkGconsaleLimits (const Group &group, WellState &well_state, const int reportStepIdx, DeferredLogger &deferred_logger)
 
bool checkGroupHigherConstraints (const Group &group, DeferredLogger &deferred_logger, const int reportStepIdx)
 
bool updateGroupIndividualControl (const Group &group, DeferredLogger &deferred_logger, const int reportStepIdx)
 
void actionOnBrokenConstraints (const Group &group, const Group::ExceedAction &exceed_action, const Group::ProductionCMode &newControl, DeferredLogger &deferred_logger)
 
void actionOnBrokenConstraints (const Group &group, const Group::InjectionCMode &newControl, const Phase &controlPhase, DeferredLogger &deferred_logger)
 
void updateAndCommunicateGroupData (const int reportStepIdx, const int iterationIdx)
 
void inferLocalShutWells ()
 
void setRepRadiusPerfLength ()
 
void gliftDebug (const std::string &msg, DeferredLogger &deferred_logger) const
 
void gliftDebugShowALQ (DeferredLogger &deferred_logger)
 
void gasLiftOptimizationStage2 (DeferredLogger &deferred_logger, GLiftProdWells &prod_wells, GLiftOptWells &glift_wells, GLiftWellStateMap &map, const int episodeIndex)
 
void updateWellPotentials (const int reportStepIdx, const bool onlyAfterEvent, const SummaryConfig &summaryConfig, DeferredLogger &deferred_logger)
 
bool guideRateUpdateIsNeeded (const int reportStepIdx) const
 
void runWellPIScaling (const int timeStepIdx, DeferredLogger &local_deferredLogger)
 

Protected Attributes

Simulator & ebosSimulator_
 
std::vector< WellInterfacePtr > well_container_ {}
 
std::vector< bool > is_cell_perforated_ {}
 
const ModelParameters param_
 
size_t global_num_cells_ {}
 
size_t local_num_cells_ {}
 
double gravity_ {}
 
std::vector< double > depth_ {}
 
bool alternative_well_rate_init_ {}
 
std::unique_ptr< RateConverterTyperateConverter_ {}
 
std::unique_ptr< AverageRegionalPressureTyperegionalAveragePressureCalculator_ {}
 
SimulatorReportSingle last_report_ {}
 
BVector scaleAddRes_ {}
 
std::vector< Scalar > B_avg_ {}
 
- Protected Attributes inherited from Opm::BlackoilWellModelGeneric
Schedule & schedule_
 
const SummaryState & summaryState_
 
const EclipseState & eclState_
 
const Parallel::Communication & comm_
 
PhaseUsage phase_usage_
 
bool terminal_output_ {false}
 
bool wells_active_ {false}
 
bool initial_step_ {}
 
bool report_step_starts_ {}
 
std::optional< int > last_run_wellpi_ {}
 
std::vector< Well > wells_ecl_
 
std::vector< std::vector< PerforationData > > well_perf_data_
 
std::function< bool(const Well &)> not_on_process_ {}
 
std::vector< WellInterfaceGeneric * > well_container_generic_ {}
 
std::vector< int > local_shut_wells_ {}
 
std::vector< ParallelWellInfoparallel_well_info_
 
std::vector< std::reference_wrapper< ParallelWellInfo > > local_parallel_well_info_
 
std::vector< WellProdIndexCalculatorprod_index_calc_
 
std::vector< int > pvt_region_idx_
 
std::unordered_set< std::string > closed_this_step_
 
GuideRate guideRate_
 
std::unique_ptr< VFPPropertiesvfp_properties_ {}
 
std::map< std::string, double > node_pressures_
 
WGState active_wgstate_
 
WGState last_valid_wgstate_
 
WGState nupcol_wgstate_
 
bool glift_debug = false
 
double last_glift_opt_time_ = -1.0
 
std::map< std::string, std::string > switched_prod_groups_
 
std::map< std::pair< std::string, Opm::Phase >, std::string > switched_inj_groups_
 

Detailed Description

template<typename TypeTag>
class Opm::BlackoilWellModel< TypeTag >

Class for handling the blackoil well model.

Member Function Documentation

◆ calculateExplicitQuantities()

template<typename TypeTag >
void Opm::BlackoilWellModel< TypeTag >::calculateExplicitQuantities ( DeferredLogger deferred_logger) const

Calculating the explict quantities used in the well calculation.

By explicit, we mean they are cacluated at the beginning of the time step and no derivatives are included in these quantities


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