21 #ifndef OPM_CONVERGENCEREPORT_HEADER_INCLUDED
22 #define OPM_CONVERGENCEREPORT_HEADER_INCLUDED
41 enum Status { AllGood = 0,
42 ReservoirFailed = 1 << 0,
43 WellFailed = 1 << 1 };
44 enum struct Severity { None = 0,
51 enum struct Type { Invalid, MassBalance, Cnv };
53 : type_(t), severity_(s), phase_(phase)
56 Type type()
const {
return type_; }
57 Severity severity()
const {
return severity_; }
58 int phase()
const {
return phase_; }
67 enum struct Type { Invalid, MassBalance, Pressure, ControlBHP, ControlTHP, ControlRate };
68 WellFailure(Type t, Severity s,
int phase,
const std::string& well_name)
69 : type_(t), severity_(s), phase_(phase), well_name_(well_name)
72 Type type()
const {
return type_; }
73 Severity severity()
const {
return severity_; }
74 int phase()
const {
return phase_; }
75 const std::string& wellName()
const {
return well_name_; }
80 std::string well_name_;
89 , groupConverged_(true)
96 res_failures_.clear();
97 well_failures_.clear();
98 groupConverged_ =
true;
101 void setReservoirFailed(
const ReservoirFailure& rf)
103 status_ =
static_cast<Status
>(status_ | ReservoirFailed);
104 res_failures_.push_back(rf);
107 void setWellFailed(
const WellFailure& wf)
109 status_ =
static_cast<Status
>(status_ | WellFailed);
110 well_failures_.push_back(wf);
113 void setGroupConverged(
const bool groupConverged)
115 groupConverged_ = groupConverged;
118 ConvergenceReport& operator+=(
const ConvergenceReport& other)
120 status_ =
static_cast<Status
>(status_ | other.status_);
121 res_failures_.insert(res_failures_.end(), other.res_failures_.begin(), other.res_failures_.end());
122 well_failures_.insert(well_failures_.end(), other.well_failures_.begin(), other.well_failures_.end());
123 assert(reservoirFailed() != res_failures_.empty());
124 assert(wellFailed() != well_failures_.empty());
130 bool converged()
const
132 return status_ == AllGood && groupConverged_;
135 bool reservoirFailed()
const
137 return status_ & ReservoirFailed;
140 bool wellFailed()
const
142 return status_ & WellFailed;
145 const std::vector<ReservoirFailure>& reservoirFailures()
const
147 return res_failures_;
150 const std::vector<WellFailure>& wellFailures()
const
152 return well_failures_;
155 Severity severityOfWorstFailure()
const
158 auto smax = [](Severity s1, Severity s2) {
159 return s1 < s2 ? s2 : s1;
161 auto s = Severity::None;
162 for (
const auto& f : res_failures_) {
163 s = smax(s, f.severity());
165 for (
const auto& f : well_failures_) {
166 s = smax(s, f.severity());
175 std::vector<ReservoirFailure> res_failures_;
176 std::vector<WellFailure> well_failures_;
177 bool groupConverged_;
Definition: ConvergenceReport.hpp:49
Definition: ConvergenceReport.hpp:65
Represents the convergence status of the whole simulator, to make it possible to query and store the ...
Definition: ConvergenceReport.hpp:36
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: BlackoilPhases.hpp:26