20#ifndef OPM_SINGLE_WELL_STATE_HEADER_INCLUDED
21#define OPM_SINGLE_WELL_STATE_HEADER_INCLUDED
26#include <opm/input/eclipse/Schedule/Well/WellEnums.hpp>
27#include <opm/input/eclipse/Schedule/Events.hpp>
29#include <opm/simulators/wells/SegmentState.hpp>
30#include <opm/simulators/wells/PerfData.hpp>
31#include <opm/simulators/wells/ParallelWellInfo.hpp>
33#include <opm/simulators/utils/BlackoilPhases.hpp>
37template<
class Scalar>
struct PerforationData;
42class SingleWellState {
44 SingleWellState(
const std::string& name,
45 const ParallelWellInfo<Scalar>& pinfo,
47 Scalar presssure_first_connection,
48 const std::vector<PerforationData<Scalar>>& perf_input,
52 static SingleWellState serializationTestObject(
const ParallelWellInfo<Scalar>& pinfo);
54 template<
class Serializer>
55 void serializeOp(Serializer& serializer)
62 serializer(temperature);
63 serializer(phase_mixing_rates);
64 serializer(well_potentials);
65 serializer(productivity_index);
66 serializer(implicit_ipr_a);
67 serializer(implicit_ipr_b);
68 serializer(surface_rates);
69 serializer(reservoir_rates);
70 serializer(prev_surface_rates);
71 serializer(trivial_target);
74 serializer(injection_cmode);
75 serializer(production_cmode);
76 serializer(filtrate_conc);
77 serializer(perf_data);
80 bool operator==(
const SingleWellState&)
const;
83 std::reference_wrapper<const ParallelWellInfo<Scalar>> parallel_info;
85 WellStatus status{WellStatus::OPEN};
90 Scalar temperature{0};
93 Scalar filtrate_conc{0};
95 std::array<Scalar,4> phase_mixing_rates{};
98 dissolved_gas_in_water = 1,
103 std::vector<Scalar> well_potentials;
104 std::vector<Scalar> productivity_index;
105 std::vector<Scalar> implicit_ipr_a;
106 std::vector<Scalar> implicit_ipr_b;
107 std::vector<Scalar> surface_rates;
108 std::vector<Scalar> reservoir_rates;
109 std::vector<Scalar> prev_surface_rates;
110 PerfData<Scalar> perf_data;
112 SegmentState<Scalar> segments;
114 WellInjectorCMode injection_cmode{WellInjectorCMode::CMODE_UNDEFINED};
115 WellProducerCMode production_cmode{WellProducerCMode::CMODE_UNDEFINED};
125 void update_producer_targets(
const Well& ecl_well,
const SummaryState& st);
126 void update_injector_targets(
const Well& ecl_well,
const SummaryState& st);
127 void update_targets(
const Well& ecl_well,
const SummaryState& st);
128 void updateStatus(WellStatus status);
129 void init_timestep(
const SingleWellState& other);
137 Scalar sum_solvent_rates()
const;
138 Scalar sum_polymer_rates()
const;
139 Scalar sum_brine_rates()
const;
141 Scalar sum_filtrate_rate()
const;
142 Scalar sum_filtrate_total()
const;
145 Scalar sum_connection_rates(
const std::vector<Scalar>& connection_rates)
const;
void reset_connection_factors(const std::vector< PerforationData< Scalar > > &new_perf_data)
Special purpose method to support dynamically rescaling a well's CTFs through WELPI.
Definition SingleWellState.cpp:141
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37