50 bool operator==(
const GroupState& other)
const;
52 bool has_production_rates(
const std::string&
gname)
const;
53 void update_production_rates(
const std::string&
gname,
54 const std::vector<Scalar>& rates);
55 void update_network_leaf_node_production_rates(
const std::string&
gname,
56 const std::vector<Scalar>& rates);
57 const std::vector<Scalar>& production_rates(
const std::string&
gname)
const;
58 const std::vector<Scalar>& network_leaf_node_production_rates(
const std::string&
gname)
const;
60 void update_well_group_thp(
const std::string&
gname,
const double& thp);
61 Scalar well_group_thp(
const std::string&
gname)
const;
62 bool is_autochoke_group(
const std::string&
gname)
const;
64 bool has_production_reduction_rates(
const std::string&
gname)
const;
65 void update_production_reduction_rates(
const std::string&
gname,
66 const std::vector<Scalar>& rates);
67 const std::vector<Scalar>& production_reduction_rates(
const std::string&
gname)
const;
69 bool has_injection_reduction_rates(
const std::string&
gname)
const;
70 void update_injection_reduction_rates(
const std::string&
gname,
71 const std::vector<Scalar>& rates);
72 const std::vector<Scalar>& injection_reduction_rates(
const std::string&
gname)
const;
74 bool has_injection_reservoir_rates(
const std::string&
gname)
const;
75 void update_injection_reservoir_rates(
const std::string&
gname,
76 const std::vector<Scalar>& rates);
77 const std::vector<Scalar>& injection_reservoir_rates(
const std::string&
gname)
const;
79 bool has_injection_surface_rates(
const std::string&
gname)
const;
80 void update_injection_surface_rates(
const std::string&
gname,
81 const std::vector<Scalar>& rates);
82 const std::vector<Scalar>& injection_surface_rates(
const std::string&
gname)
const;
84 void update_injection_rein_rates(
const std::string&
gname,
85 const std::vector<Scalar>& rates);
86 const std::vector<Scalar>& injection_rein_rates(
const std::string&
gname)
const;
88 void update_injection_vrep_rate(
const std::string&
gname, Scalar rate);
89 Scalar injection_vrep_rate(
const std::string&
gname)
const;
91 void update_grat_sales_target(
const std::string&
gname, Scalar
target);
92 Scalar grat_sales_target(
const std::string&
gname)
const;
93 bool has_grat_sales_target(
const std::string&
gname)
const;
95 void update_gpmaint_target(
const std::string&
gname, Scalar
target);
96 Scalar gpmaint_target(
const std::string&
gname)
const;
97 bool has_gpmaint_target(
const std::string&
gname)
const;
99 bool has_production_control(
const std::string&
gname)
const;
100 void production_control(
const std::string&
gname, Group::ProductionCMode
cmode);
101 Group::ProductionCMode production_control(
const std::string&
gname)
const;
103 bool has_injection_control(
const std::string&
gname, Phase phase)
const;
104 void injection_control(
const std::string&
gname, Phase phase, Group::InjectionCMode
cmode);
105 Group::InjectionCMode injection_control(
const std::string&
gname, Phase phase)
const;
108 const std::pair<Scalar, Scalar>& gconsump_rates(
const std::string&
gname)
const;
111 std::size_t data_size()
const;
112 std::size_t collect(Scalar* data)
const;
113 std::size_t distribute(
const Scalar* data);
115 GPMaint::State& gpmaint(
const std::string&
gname);
118 void communicate_rates(
const Comm& comm)
150 sz += this->inj_vrep_rate.size();
153 std::vector<Scalar> data(
sz);
158 auto collect = [&data, &pos](
auto&
v) {
165 for (
const auto& x : this->inj_vrep_rate) {
166 data[pos++] = x.second;
169 throw std::logic_error(
"Internal size mismatch when collecting groupData");
172 comm.sum(data.data(), data.size());
176 auto distribute = [&data, &pos](
auto&
v) {
182 for (
auto& x : this->inj_vrep_rate) {
183 x.second = data[pos++];
186 throw std::logic_error(
"Internal size mismatch when distributing groupData");
189 template<
class Serializer>
194 serializer(m_network_leaf_node_production_rates);
211 std::size_t num_phases{};
212 std::map<std::string, std::vector<Scalar>> m_production_rates;
213 std::map<std::string, std::vector<Scalar>> m_network_leaf_node_production_rates;
214 std::map<std::string, Group::ProductionCMode> production_controls;
215 std::map<std::string, std::vector<Scalar>> prod_red_rates;
216 std::map<std::string, std::vector<Scalar>> inj_red_rates;
217 std::map<std::string, std::vector<Scalar>> inj_surface_rates;
218 std::map<std::string, std::vector<Scalar>> inj_resv_rates;
219 std::map<std::string, std::vector<Scalar>> inj_rein_rates;
220 std::map<std::string, Scalar> inj_vrep_rate;
221 std::map<std::string, Scalar> m_grat_sales_target;
222 std::map<std::string, Scalar> m_gpmaint_target;
223 std::map<std::string, Scalar> group_thp;
225 std::map<std::pair<Phase, std::string>, Group::InjectionCMode> injection_controls;
227 std::map<std::string, std::pair<Scalar, Scalar>> m_gconsump_rates;
228 static constexpr std::pair<Scalar, Scalar> zero_pair = {0.0, 0.0};