Refactor enum for GuideRate target

This commit is contained in:
Joakim Hove 2019-09-02 12:49:20 +02:00
parent e026660c80
commit af72086db8
6 changed files with 52 additions and 49 deletions

View File

@ -26,8 +26,20 @@ namespace Opm {
class GuideRateModel {
public:
enum class Target {
OIL = 0,
LIQ = 1,
GAS = 2,
RES = 3,
COMB = 4,
NONE = 5
};
static Target TargetFromString(const std::string& s);
GuideRateModel(double time_interval_arg,
GuideRateTarget phase_arg,
Target target_arg,
double A_arg,
double B_arg,
double C_arg,
@ -50,7 +62,7 @@ private:
be evaluated, due to a division by zero problem.
*/
double time_interval = 0;
GuideRateTarget phase = GuideRateTarget::NONE;
Target target = Target::NONE;
double A = 0;
double B = 0;
double C = 0;

View File

@ -29,16 +29,6 @@ namespace Opm {
enum class GuideRateTarget {
OIL = 0,
LIQ = 1,
GAS = 2,
RES = 3,
COMB = 4,
NONE = 5
};
GuideRateTarget GuideRateTargetFromString(const std::string& s);
namespace GroupProduction {

View File

@ -24,18 +24,18 @@
namespace Opm {
GuideRateModel::GuideRateModel(double time_interval_arg,
GuideRateTarget phase_arg,
double A_arg,
double B_arg,
double C_arg,
double D_arg,
double E_arg,
double F_arg,
bool allow_increase_arg,
double damping_factor_arg,
bool use_free_gas_arg) :
Target target_arg,
double A_arg,
double B_arg,
double C_arg,
double D_arg,
double E_arg,
double F_arg,
bool allow_increase_arg,
double damping_factor_arg,
bool use_free_gas_arg) :
time_interval(time_interval_arg),
phase(phase_arg),
target(target_arg),
A(A_arg),
B(B_arg),
C(C_arg),
@ -84,7 +84,7 @@ double GuideRateModel::eval(double pot, double R1, double R2) const {
bool GuideRateModel::operator==(const GuideRateModel& other) const {
return (this->time_interval == other.time_interval) &&
(this->phase == other.phase) &&
(this->target == other.target) &&
(this->A == other.A) &&
(this->B == other.B) &&
(this->C == other.C) &&
@ -100,4 +100,27 @@ bool GuideRateModel::operator!=(const GuideRateModel& other) const {
return !(*this == other);
}
GuideRateModel::Target GuideRateModel::TargetFromString(const std::string& s) {
if (s == "OIL")
return Target::OIL;
if (s == "LIQ")
return Target::LIQ;
if (s == "GAS")
return Target::GAS;
if (s == "RES")
return Target::RES;
if (s == "COMB")
return Target::COMB;
if (s == "NONE")
return Target::NONE;
throw std::invalid_argument("Could not convert: " + s + " to a valid Target enum value");
}
}

View File

@ -1588,7 +1588,7 @@ namespace {
const auto& record = keyword.getRecord(0);
double min_calc_delay = record.getItem<ParserKeywords::GUIDERAT::MIN_CALC_TIME>().getSIDouble(0);
auto phase = GuideRateTargetFromString(record.getItem<ParserKeywords::GUIDERAT::NOMINATED_PHASE>().getTrimmedString(0));
auto phase = GuideRateModel::TargetFromString(record.getItem<ParserKeywords::GUIDERAT::NOMINATED_PHASE>().getTrimmedString(0));
double A = record.getItem<ParserKeywords::GUIDERAT::A>().get<double>(0);
double B = record.getItem<ParserKeywords::GUIDERAT::B>().get<double>(0);
double C = record.getItem<ParserKeywords::GUIDERAT::C>().get<double>(0);

View File

@ -137,26 +137,4 @@ namespace Opm {
}
GuideRateTarget GuideRateTargetFromString(const std::string& s) {
if (s == "OIL")
return GuideRateTarget::OIL;
if (s == "LIQ")
return GuideRateTarget::LIQ;
if (s == "GAS")
return GuideRateTarget::GAS;
if (s == "RES")
return GuideRateTarget::RES;
if (s == "COMB")
return GuideRateTarget::COMB;
if (s == "NONE")
return GuideRateTarget::NONE;
throw std::invalid_argument("Could not convert: " + s + " to a valid GuideRateTarget enum value");
}
}

View File

@ -299,9 +299,9 @@ BOOST_AUTO_TEST_CASE(createDeckWithGCONPROD) {
BOOST_AUTO_TEST_CASE(TESTGuideRateModel) {
Opm::GuideRateModel grc_default;
BOOST_CHECK_THROW(Opm::GuideRateModel(0.0,GuideRateTarget::NONE, -5,0,0,0,0,0,true,1,true), std::invalid_argument);
BOOST_CHECK_THROW(Opm::GuideRateModel(0.0,GuideRateModel::Target::NONE, -5,0,0,0,0,0,true,1,true), std::invalid_argument);
BOOST_CHECK_THROW(grc_default.eval(1,0.50,0.50), std::invalid_argument);
Opm::GuideRateModel grc_delay(10, GuideRateTarget::NONE, 1,1,0,0,0,0,true,1,true);
Opm::GuideRateModel grc_delay(10, GuideRateModel::Target::NONE, 1,1,0,0,0,0,true,1,true);
BOOST_CHECK_NO_THROW(grc_delay.eval(1.0, 0.5, 0.5));
}