45 bool operator==(
const GroupState& other)
const;
47 bool has_production_rates(
const std::string&
gname)
const;
48 void update_production_rates(
const std::string&
gname,
49 const std::vector<Scalar>& rates);
50 const std::vector<Scalar>& production_rates(
const std::string&
gname)
const;
52 void update_well_group_thp(
const std::string&
gname,
const double& thp);
53 Scalar well_group_thp(
const std::string&
gname)
const;
55 bool has_production_reduction_rates(
const std::string&
gname)
const;
56 void update_production_reduction_rates(
const std::string&
gname,
57 const std::vector<Scalar>& rates);
58 const std::vector<Scalar>& production_reduction_rates(
const std::string&
gname)
const;
60 bool has_injection_reduction_rates(
const std::string&
gname)
const;
61 void update_injection_reduction_rates(
const std::string&
gname,
62 const std::vector<Scalar>& rates);
63 const std::vector<Scalar>& injection_reduction_rates(
const std::string&
gname)
const;
65 bool has_injection_reservoir_rates(
const std::string&
gname)
const;
66 void update_injection_reservoir_rates(
const std::string&
gname,
67 const std::vector<Scalar>& rates);
68 const std::vector<Scalar>& injection_reservoir_rates(
const std::string&
gname)
const;
70 bool has_injection_surface_rates(
const std::string&
gname)
const;
71 void update_injection_surface_rates(
const std::string&
gname,
72 const std::vector<Scalar>& rates);
73 const std::vector<Scalar>& injection_surface_rates(
const std::string&
gname)
const;
75 void update_injection_rein_rates(
const std::string&
gname,
76 const std::vector<Scalar>& rates);
77 const std::vector<Scalar>& injection_rein_rates(
const std::string&
gname)
const;
79 void update_injection_vrep_rate(
const std::string&
gname, Scalar
rate);
80 Scalar injection_vrep_rate(
const std::string&
gname)
const;
82 void update_grat_sales_target(
const std::string&
gname, Scalar
target);
83 Scalar grat_sales_target(
const std::string&
gname)
const;
84 bool has_grat_sales_target(
const std::string&
gname)
const;
86 void update_gpmaint_target(
const std::string&
gname, Scalar
target);
87 Scalar gpmaint_target(
const std::string&
gname)
const;
88 bool has_gpmaint_target(
const std::string&
gname)
const;
90 bool has_production_control(
const std::string&
gname)
const;
91 void production_control(
const std::string&
gname, Group::ProductionCMode
cmode);
92 Group::ProductionCMode production_control(
const std::string&
gname)
const;
94 bool has_injection_control(
const std::string&
gname, Phase phase)
const;
95 void injection_control(
const std::string&
gname, Phase phase, Group::InjectionCMode
cmode);
96 Group::InjectionCMode injection_control(
const std::string&
gname, Phase phase)
const;
98 std::size_t data_size()
const;
99 std::size_t collect(Scalar* data)
const;
100 std::size_t distribute(
const Scalar* data);
102 GPMaint::State& gpmaint(
const std::string&
gname);
105 void communicate_rates(
const Comm& comm)
136 sz += this->inj_vrep_rate.size();
139 std::vector<Scalar> data(
sz);
144 auto collect = [&data, &pos](
auto&
v) {
151 for (
const auto& x : this->inj_vrep_rate) {
152 data[pos++] = x.second;
155 throw std::logic_error(
"Internal size mismatch when collecting groupData");
158 comm.sum(data.data(), data.size());
162 auto distribute = [&data, &pos](
auto&
v) {
168 for (
auto& x : this->inj_vrep_rate) {
169 x.second = data[pos++];
172 throw std::logic_error(
"Internal size mismatch when distributing groupData");
175 template<
class Serializer>
195 std::size_t num_phases{};
196 std::map<std::string, std::vector<Scalar>> m_production_rates;
197 std::map<std::string, Group::ProductionCMode> production_controls;
198 std::map<std::string, std::vector<Scalar>> prod_red_rates;
199 std::map<std::string, std::vector<Scalar>> inj_red_rates;
200 std::map<std::string, std::vector<Scalar>> inj_surface_rates;
201 std::map<std::string, std::vector<Scalar>> inj_resv_rates;
202 std::map<std::string, std::vector<Scalar>> inj_rein_rates;
203 std::map<std::string, Scalar> inj_vrep_rate;
204 std::map<std::string, Scalar> m_grat_sales_target;
205 std::map<std::string, Scalar> m_gpmaint_target;
206 std::map<std::string, Scalar> group_thp;
208 std::map<std::pair<Phase, std::string>, Group::InjectionCMode> injection_controls;