Public Member Functions | |
WellsGroupInterface (const std::string &name, const double efficiency_factor, const ProductionSpecification &prod_spec, const InjectionSpecification &inj_spec, const PhaseUsage &phase_usage) | |
const std::string & | name () const |
The unique identifier for the well or well group. | |
const ProductionSpecification & | prodSpec () const |
Production specifications for the well or well group. | |
const InjectionSpecification & | injSpec () const |
Injection specifications for the well or well group. | |
ProductionSpecification & | prodSpec () |
Production specifications for the well or well group. | |
InjectionSpecification & | injSpec () |
Injection specifications for the well or well group. | |
const PhaseUsage & | phaseUsage () const |
Phase usage information. | |
virtual bool | isLeafNode () const |
virtual WellsGroupInterface * | findGroup (const std::string &name_of_node)=0 |
void | setParent (WellsGroupInterface *parent) |
Sets the parent. More... | |
const WellsGroupInterface * | getParent () const |
Gets the parent of the group, NULL if no parent. | |
WellsGroupInterface * | getParent () |
virtual int | numberOfLeafNodes ()=0 |
Calculates the number of leaf nodes in the given group. More... | |
virtual bool | conditionsMet (const std::vector< double > &well_bhp, const std::vector< double > &well_reservoirrates_phase, const std::vector< double > &well_surfacerates_phase, WellPhasesSummed &summed_phases)=0 |
Checks if each condition is met, applies well controls where needed (that is, it either changes the active control of violating wells, or shuts down wells). More... | |
virtual void | applyInjGroupControl (const InjectionSpecification::ControlMode control_mode, const InjectionSpecification::InjectorType injector_type, const double target, const bool only_group)=0 |
Sets the current active control to the provided one for all injectors within the group. More... | |
virtual void | applyProdGroupControl (const ProductionSpecification::ControlMode control_mode, const double target, const bool only_group)=0 |
Sets the current active control to the provided one for all producers within the group. More... | |
virtual std::pair< WellNode *, double > | getWorstOffending (const std::vector< double > &well_reservoirrates_phase, const std::vector< double > &well_surfacerates_phase, ProductionSpecification::ControlMode mode)=0 |
Gets the worst offending well based on the input. More... | |
double | getTarget (ProductionSpecification::ControlMode mode) const |
Gets the target rate for the given mode. | |
double | getTarget (InjectionSpecification::ControlMode mode) const |
Gets the target rate for the given mode. | |
virtual void | applyProdGroupControls ()=0 |
Applies any production group control relevant to all children nodes. More... | |
virtual void | applyInjGroupControls ()=0 |
Applies any injection group control relevant to all children nodes. More... | |
virtual double | productionGuideRate (bool only_group)=0 |
Calculates the production guide rate for the group. More... | |
virtual double | injectionGuideRate (bool only_group)=0 |
Calculates the injection guide rate for the group. More... | |
virtual double | getTotalProductionFlow (const std::vector< double > &phase_flows, const BlackoilPhases::PhaseIndex phase) const =0 |
Gets the total production flow of the given phase. More... | |
virtual void | applyExplicitReinjectionControls (const std::vector< double > &well_reservoirrates_phase, const std::vector< double > &well_surfacerates_phase)=0 |
Applies explicit reinjection controls. More... | |
virtual void | applyVREPGroupControls (const std::vector< double > &well_voidage_rates, const std::vector< double > &conversion_coeffs)=0 |
TODO: prototyping a VREP enforcement function. | |
virtual void | applyVREPGroupControl (const double target, const InjectionSpecification::InjectorType injector_type, const std::vector< double > &well_voidage_rates, const std::vector< double > &conversion_coeffs, const bool only_group)=0 |
virtual double | getTotalVoidageRate (const std::vector< double > &well_voidage_rates)=0 |
bool | individualControl () const |
Return whether the well is running under group control target or under their own limit. More... | |
void | setIndividualControl (const bool) |
Update the status for individual contrl. | |
virtual double | getProductionRate (const std::vector< double > &well_rates, const ProductionSpecification::ControlMode prod_mode) const =0 |
virtual void | updateWellProductionTargets (const std::vector< double > &well_rates)=0 |
virtual void | updateWellInjectionTargets (const std::vector< double > &well_rates)=0 |
virtual void | setTargetUpdated (const bool flag)=0 |
virtual bool | canProduceMore () const =0 |
virtual bool | groupProdTargetConverged (const std::vector< double > &well_rates) const =0 |
double | efficiencyFactor () const |
void | setEfficiencyFactor (const double efficiency_factor) |
Protected Member Functions | |
double | rateByMode (const double *res_rates, const double *surf_rates, const ProductionSpecification::ControlMode mode) |
Calculates the correct rate for the given ProductionSpecification::ControlMode. | |
double | rateByMode (const double *res_rates, const double *surf_rates, const InjectionSpecification::ControlMode mode) |
Calculates the correct rate for the given InjectionSpecification::ControlMode. | |
Protected Attributes | |
WellsGroupInterface * | parent_ |
bool | individual_control_ |
double | efficiency_factor_ |
|
pure virtual |
Applies explicit reinjection controls.
This must be called at each timestep to be correct.
[in] | well_reservoirrates_phase | A vector containing reservoir rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[in] | well_surfacerates_phase | A vector containing surface rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Sets the current active control to the provided one for all injectors within the group.
After this call, the combined rate (which rate depending on control_mode) of the group shall be equal to target.
[in] | only_group | if true, only children that are under group control will be changed. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Applies any injection group control relevant to all children nodes.
If no group control is set, this is called recursively to the children.
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Sets the current active control to the provided one for all producers within the group.
After this call, the combined rate (which rate depending on control_mode) of the group shall be equal to target.
[in] | only_group | if true, only children that are under group control will be changed. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Applies any production group control relevant to all children nodes.
If no group control is set, this is called recursively to the children.
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Checks if each condition is met, applies well controls where needed (that is, it either changes the active control of violating wells, or shuts down wells).
Only one change is applied per invocation. Typical use will be
[in] | well_bhp | A vector containing the bhp for each well. Is assumed to be ordered the same way as the related Wells-struct. |
[in] | well_reservoirrates_phase | A vector containing reservoir rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[in] | well_surfacerates_phase | A vector containing surface rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[out] | summed_phases | Will at end of invocation contain the summed phase rates (rate ,etc.) for the group. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Gets the total production flow of the given phase.
[in] | phase_flows | A vector containing rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[in] | phase | The phase for which to sum up. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Gets the worst offending well based on the input.
[in] | well_reservoirrates_phase | A vector containing reservoir rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[in] | well_surfacerates_phase | A vector containing surface rates by phase for each well. Is assumed to be ordered the same way as the related Wells-struct, with all phase rates of a single well adjacent in the array. |
[in] | mode | The relevant control mode to find the maximum over. |
Implemented in Opm::WellNode, and Opm::WellsGroup.
bool Opm::WellsGroupInterface::individualControl | ( | ) | const |
Return whether the well is running under group control target or under their own limit.
True under their own limit. False running under group control target
|
pure virtual |
Calculates the injection guide rate for the group.
[in] | only_group | If true, will only accumelate guide rates for wells under group control |
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
virtual |
Reimplemented in Opm::WellNode.
|
pure virtual |
Calculates the number of leaf nodes in the given group.
A leaf node is defined to have one leaf node in its group.
Implemented in Opm::WellNode, and Opm::WellsGroup.
|
pure virtual |
Calculates the production guide rate for the group.
[in] | only_group | If true, will only accumelate guide rates for wells under group control |
Implemented in Opm::WellNode, and Opm::WellsGroup.
void Opm::WellsGroupInterface::setParent | ( | WellsGroupInterface * | parent | ) |
Sets the parent.
[in] | parent | the pointer to the parent |