My Project
|
Class for handling the blackoil well model. More...
#include <BlackoilWellModel.hpp>
Public Types | |
typedef BlackoilModelParametersEbos< TypeTag > | ModelParameters |
using | Grid = GetPropType< TypeTag, Properties::Grid > |
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 | 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 Dune::FieldMatrix< Scalar, numEq, numEq > | MatrixBlockType |
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 | 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 () 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 () |
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 | applyScaleAdd (const Scalar alpha, const BVector &x, BVector &Ax) const |
ConvergenceReport | getWellConvergence (const std::vector< Scalar > &B_avg, const bool checkGroupConvergence=false) const |
const SimulatorReportSingle & | lastReport () 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 |
void | updateWellControls (DeferredLogger &deferred_logger, const bool checkGroupControls) |
void | updateAndCommunicate (const int reportStepIdx, const int iterationIdx, DeferredLogger &deferred_logger) |
WellInterfacePtr | getWell (const std::string &well_name) const |
bool | hasWell (const std::string &well_name) const |
void | initGliftEclWellMap (GLiftEclWells &ecl_well_map) |
const std::vector< WellInterfacePtr > & | localNonshutWells () |
Get list of local nonshut wells. | |
void | initFromRestartFile (const RestartValue &restartValues, WellTestState wtestState, const size_t numCells, bool handle_ms_well) |
![]() | |
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 | localWellsActive () const |
return true if wells are available on this process | |
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 PhaseUsage & | phaseUsage () const |
const GroupState & | groupState () const |
const WellState & | wellState () const |
WellState & | wellState () |
GroupState & | groupState () |
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) |
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 | setWellsActive (const bool wells_active) |
void | commitWGState () |
data::GroupAndNetworkValues | groupAndNetworkData (const int reportStepIdx) const |
bool | hasTHPConstraints () const |
Return true if any well has a THP constraint. | |
bool | forceShutWellByNameIfPredictionMode (const std::string &wellname, const double simulation_time) |
Shut down any single well, but only if it is in prediction mode. More... | |
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 EclipseState & | eclState () const |
void | assemble (const int iterationIdx, const double dt) |
void | timeStepSucceeded (const double &simulationTime, const double dt) |
void | endReportStep () |
void | recoverWellSolutionAndUpdateWellState (const BVector &x) |
void | updatePrimaryVariables (DeferredLogger &deferred_logger) |
void | setupCartesianToCompressed_ (const int *global_cell, int local_num__cells) |
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) |
void | maybeDoGasLiftOptimize (DeferredLogger &deferred_logger) |
void | gasLiftOptimizationStage1 (DeferredLogger &deferred_logger, GLiftProdWells &prod_wells, GLiftOptWells &glift_wells, GasLiftGroupInfo &group_info, GLiftWellStateMap &state_map) |
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 |
![]() | |
const WellState & | prevWellState () const |
const WGState & | prevWGState () const |
const WellState & | nupcolWellState () 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 |
void | 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 |
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 |
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, std::set< std::string > &switched_groups) |
bool | updateGroupIndividualControl (const Group &group, DeferredLogger &deferred_logger, const int reportStepIdx, std::set< std::string > &switched_groups) |
bool | updateGroupIndividualControls (DeferredLogger &deferred_logger, std::set< std::string > &switched_groups, const int reportStepIdx, const int iterationIdx) |
bool | updateGroupHigherControls (DeferredLogger &deferred_logger, const int reportStepIdx, std::set< std::string > &switched_groups) |
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) |
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< RateConverterType > | rateConverter_ {} |
std::unique_ptr< AverageRegionalPressureType > | regionalAveragePressureCalculator_ {} |
SimulatorReportSingle | last_report_ {} |
BVector | scaleAddRes_ {} |
std::vector< Scalar > | B_avg_ {} |
![]() | |
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< ParallelWellInfo > | parallel_well_info_ |
std::vector< std::reference_wrapper< ParallelWellInfo > > | local_parallel_well_info_ |
std::vector< WellProdIndexCalculator > | prod_index_calc_ |
std::vector< int > | cartesian_to_compressed_ |
std::vector< int > | pvt_region_idx_ |
std::unordered_set< std::string > | closed_this_step_ |
GuideRate | guideRate_ |
std::unique_ptr< VFPProperties > | vfp_properties_ {} |
std::map< std::string, double > | node_pressures_ |
WGState | active_wgstate_ |
WGState | last_valid_wgstate_ |
WGState | nupcol_wgstate_ |
bool | glift_debug = false |
Class for handling the blackoil well model.
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