21#ifndef OPM_CONVERGENCEREPORT_HEADER_INCLUDED
22#define OPM_CONVERGENCEREPORT_HEADER_INCLUDED
59 enum struct Type { Invalid, MassBalance, Cnv };
62 : type_(t), severity_(s), phase_(
phase)
67 int phase()
const {
return phase_; }
83 int phase()
const {
return phase_; }
84 double value()
const {
return value_; }
107 : type_(t), severity_(s), phase_(
phase), well_name_(well_name)
112 int phase()
const {
return phase_; }
113 const std::string&
wellName()
const {
return well_name_; }
119 std::string well_name_;
133 , wellGroupTargetsViolated_(false)
139 res_failures_.clear();
140 well_failures_.clear();
141 wellGroupTargetsViolated_ =
false;
147 res_failures_.push_back(rf);
153 well_failures_.push_back(wf);
156 template <
typename... Args>
159 this->res_convergence_.emplace_back(std::forward<Args>(args)...);
164 wellGroupTargetsViolated_ = wellGroupTargetsViolated;
168 const double cnvErrorPvFractionDenom)
170 this->pvFracCnvViol_ = cnvErrorPvFraction;
171 this->pvFracCnvViolDenom_ = cnvErrorPvFractionDenom;
176 reportTime_ = std::max(reportTime_, other.reportTime_);
177 status_ =
static_cast<Status>(status_ | other.status_);
178 res_failures_.insert(res_failures_.end(), other.res_failures_.begin(), other.res_failures_.end());
179 well_failures_.insert(well_failures_.end(), other.well_failures_.begin(), other.well_failures_.end());
180 res_convergence_.insert(res_convergence_.end(), other.res_convergence_.begin(), other.res_convergence_.end());
182 assert(
wellFailed() != well_failures_.empty());
183 wellGroupTargetsViolated_ = (wellGroupTargetsViolated_ || other.wellGroupTargetsViolated_);
185 if ((this->pvFracCnvViolDenom_ > 0.0) ||
186 (other.pvFracCnvViolDenom_ > 0.0))
188 this->pvFracCnvViol_ = (this->pvFracCnvViol_ * this->pvFracCnvViolDenom_ +
189 other.pvFracCnvViol_ * other.pvFracCnvViolDenom_)
190 / (this->pvFracCnvViolDenom_ + other.pvFracCnvViolDenom_);
192 this->pvFracCnvViolDenom_ += other.pvFracCnvViolDenom_;
195 this->pvFracCnvViol_ = 0.0;
196 this->pvFracCnvViolDenom_ = 0.0;
211 return this->pvFracCnvViol_;
216 return { this->pvFracCnvViol_, this->pvFracCnvViolDenom_ };
221 return (status_ ==
AllGood) && !wellGroupTargetsViolated_;
236 return res_failures_;
241 return res_convergence_;
246 return well_failures_;
253 return s1 < s2 ? s2 : s1;
256 for (
const auto& f : res_failures_) {
257 s = smax(s, f.severity());
259 for (
const auto& f : well_failures_) {
260 s = smax(s, f.severity());
269 std::vector<ReservoirFailure> res_failures_;
270 std::vector<WellFailure> well_failures_;
271 std::vector<ReservoirConvergenceMetric> res_convergence_;
272 bool wellGroupTargetsViolated_;
273 double pvFracCnvViol_{};
274 double pvFracCnvViolDenom_{};
Definition: ConvergenceReport.hpp:76
int phase() const
Definition: ConvergenceReport.hpp:83
double value() const
Definition: ConvergenceReport.hpp:84
ReservoirFailure::Type type() const
Definition: ConvergenceReport.hpp:82
ReservoirConvergenceMetric(ReservoirFailure::Type t, int phase, double value)
Definition: ConvergenceReport.hpp:78
Definition: ConvergenceReport.hpp:57
int phase() const
Definition: ConvergenceReport.hpp:67
Type
Definition: ConvergenceReport.hpp:59
ReservoirFailure(Type t, Severity s, int phase)
Definition: ConvergenceReport.hpp:61
Type type() const
Definition: ConvergenceReport.hpp:65
Severity severity() const
Definition: ConvergenceReport.hpp:66
Definition: ConvergenceReport.hpp:93
const std::string & wellName() const
Definition: ConvergenceReport.hpp:113
Type
Definition: ConvergenceReport.hpp:95
int phase() const
Definition: ConvergenceReport.hpp:112
Severity severity() const
Definition: ConvergenceReport.hpp:111
WellFailure(Type t, Severity s, int phase, const std::string &well_name)
Definition: ConvergenceReport.hpp:106
Type type() const
Definition: ConvergenceReport.hpp:110
Definition: ConvergenceReport.hpp:38
ConvergenceReport()
Definition: ConvergenceReport.hpp:124
Severity severityOfWorstFailure() const
Definition: ConvergenceReport.hpp:249
const std::vector< ReservoirConvergenceMetric > & reservoirConvergence() const
Definition: ConvergenceReport.hpp:239
void setWellFailed(const WellFailure &wf)
Definition: ConvergenceReport.hpp:150
void setWellGroupTargetsViolated(const bool wellGroupTargetsViolated)
Definition: ConvergenceReport.hpp:162
bool reservoirFailed() const
Definition: ConvergenceReport.hpp:224
void setReservoirConvergenceMetric(Args &&... args)
Definition: ConvergenceReport.hpp:157
Severity
Definition: ConvergenceReport.hpp:49
double reportTime() const
Definition: ConvergenceReport.hpp:204
std::pair< double, double > cnvViolatedPvFractionPack() const
Definition: ConvergenceReport.hpp:214
void clear()
Definition: ConvergenceReport.hpp:136
double cnvViolatedPvFraction() const
Definition: ConvergenceReport.hpp:209
ConvergenceReport(const double reportTime)
Definition: ConvergenceReport.hpp:128
bool converged() const
Definition: ConvergenceReport.hpp:219
Status
Definition: ConvergenceReport.hpp:43
@ ReservoirFailed
Definition: ConvergenceReport.hpp:45
@ AllGood
Definition: ConvergenceReport.hpp:44
@ WellFailed
Definition: ConvergenceReport.hpp:46
const std::vector< ReservoirFailure > & reservoirFailures() const
Definition: ConvergenceReport.hpp:234
const std::vector< WellFailure > & wellFailures() const
Definition: ConvergenceReport.hpp:244
void setPoreVolCnvViolationFraction(const double cnvErrorPvFraction, const double cnvErrorPvFractionDenom)
Definition: ConvergenceReport.hpp:167
void setReservoirFailed(const ReservoirFailure &rf)
Definition: ConvergenceReport.hpp:144
ConvergenceReport & operator+=(const ConvergenceReport &other)
Definition: ConvergenceReport.hpp:174
bool wellFailed() const
Definition: ConvergenceReport.hpp:229
Definition: BlackoilPhases.hpp:27
std::string to_string(const ConvergenceReport::ReservoirFailure::Type t)
Definition: ConvergenceReport.hpp:278
std::vector< ConvergenceReport > report
Definition: ConvergenceReport.hpp:281
int report_step
Definition: ConvergenceReport.hpp:279
int current_step
Definition: ConvergenceReport.hpp:280