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> 28 #include <opm/input/eclipse/Schedule/Group/Group.hpp> 30 #include <opm/material/fluidsystems/PhaseUsageInfo.hpp> 32 #include <opm/simulators/wells/SegmentState.hpp> 33 #include <opm/simulators/wells/PerfData.hpp> 34 #include <opm/simulators/wells/ParallelWellInfo.hpp> 35 #include <opm/simulators/wells/ALQState.hpp> 39 template<
class Scalar>
struct PerforationData;
43 template<
typename Scalar,
typename IndexTraits>
44 class SingleWellState {
46 static const int waterPhaseIdx = PhaseUsageInfo<IndexTraits>::waterPhaseIdx;
47 static const int oilPhaseIdx = PhaseUsageInfo<IndexTraits>::oilPhaseIdx;
48 static const int gasPhaseIdx = PhaseUsageInfo<IndexTraits>::gasPhaseIdx;
50 SingleWellState(
const std::string& name,
51 const ParallelWellInfo<Scalar>& pinfo,
52 const PhaseUsageInfo<IndexTraits>& pu,
54 Scalar pressure_first_connection,
55 const std::vector<PerforationData<Scalar>>& perf_input,
58 static SingleWellState serializationTestObject(
const ParallelWellInfo<Scalar>& pinfo);
60 template<
class Serializer>
61 void serializeOp(Serializer& serializer)
68 serializer(pressure_first_connection);
69 serializer(temperature);
70 serializer(energy_rate);
71 serializer(efficiency_scaling_factor);
72 serializer(phase_mixing_rates);
73 serializer(well_potentials);
74 serializer(productivity_index);
75 serializer(implicit_ipr_a);
76 serializer(implicit_ipr_b);
77 serializer(surface_rates);
78 serializer(reservoir_rates);
79 serializer(prev_surface_rates);
80 serializer(trivial_group_target);
83 serializer(injection_cmode);
84 serializer(production_cmode);
85 serializer(filtrate_conc);
86 serializer(perf_data);
87 serializer(primaryvar);
88 serializer(alq_state);
89 serializer(group_target);
90 serializer(group_target_fallback);
91 serializer(use_group_target_fallback);
92 serializer(was_shut_before_action_applied);
95 bool operator==(
const SingleWellState&)
const;
98 std::reference_wrapper<const ParallelWellInfo<Scalar>> parallel_info;
100 WellStatus status{WellStatus::OPEN};
102 PhaseUsageInfo<IndexTraits> pu;
105 Scalar pressure_first_connection{0};
108 Scalar temperature{0};
109 Scalar energy_rate{0.};
111 Scalar efficiency_scaling_factor{1.0};
114 Scalar filtrate_conc{0};
116 std::array<Scalar,4> phase_mixing_rates{};
119 dissolved_gas_in_water = 1,
125 std::string group_name;
126 Scalar target_value{0.0};
127 Group::ProductionCMode production_cmode {Group::ProductionCMode::NONE};
128 Group::InjectionCMode injection_cmode {Group::InjectionCMode::NONE};
129 Scalar guiderate_ratio{1.0};
132 return (group_name == other.group_name
133 && target_value == other.target_value
134 && production_cmode == other.production_cmode
135 && injection_cmode == other.injection_cmode
136 && guiderate_ratio == other.guiderate_ratio);
139 template<
class Serializer>
140 void serializeOp(Serializer& serializer) {
141 serializer(group_name);
142 serializer(target_value);
143 serializer(production_cmode);
144 serializer(injection_cmode);
145 serializer(guiderate_ratio);
149 std::vector<Scalar> well_potentials;
150 std::vector<Scalar> productivity_index;
151 std::vector<Scalar> implicit_ipr_a;
152 std::vector<Scalar> implicit_ipr_b;
153 std::vector<Scalar> surface_rates;
154 std::vector<Scalar> reservoir_rates;
155 std::vector<Scalar> prev_surface_rates;
157 bool trivial_group_target;
158 std::optional<GroupTarget> group_target;
159 std::optional<GroupTarget> group_target_fallback;
160 bool use_group_target_fallback;
163 WellInjectorCMode injection_cmode{WellInjectorCMode::CMODE_UNDEFINED};
164 WellProducerCMode production_cmode{WellProducerCMode::CMODE_UNDEFINED};
165 std::vector<Scalar> primaryvar;
166 ALQState<Scalar> alq_state;
170 bool was_shut_before_action_applied {
false};
179 void update_producer_targets(
const Well& ecl_well,
const SummaryState& st);
180 void update_injector_targets(
const Well& ecl_well,
const SummaryState& st);
187 bool updateStatus(WellStatus status);
188 void init_timestep(
const SingleWellState& other);
196 Scalar sum_solvent_rates()
const;
197 Scalar sum_polymer_rates()
const;
198 Scalar sum_brine_rates()
const;
199 Scalar sum_microbial_rates()
const;
200 Scalar sum_oxygen_rates()
const;
201 Scalar sum_urea_rates()
const;
202 Scalar sum_wat_mass_rates()
const;
204 Scalar sum_filtrate_rate()
const;
205 Scalar sum_filtrate_total()
const;
208 Scalar sum_connection_rates(
const std::vector<Scalar>& connection_rates)
const;
Definition: SingleWellState.hpp:124
void update_type_and_targets(const Well &ecl_well, const SummaryState &st)
update the type of the well and the targets.
Definition: SingleWellState.cpp:361
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:153
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
Definition: PerfData.hpp:33
Definition: MultisegmentWellSegments.hpp:34