Add severity (normal, too large, nan) to failure objects.

This commit is contained in:
Atgeirr Flø Rasmussen
2018-10-23 10:52:34 +02:00
parent 892b24c435
commit 34afb0b254
2 changed files with 14 additions and 3 deletions

View File

@@ -40,10 +40,12 @@ namespace Opm
enum Status { AllGood = 0,
ReservoirFailed = 1 << 0,
WellFailed = 1 << 1 };
enum struct Severity { Normal, TooLarge, NotANumber };
struct ReservoirFailure
{
enum struct Type { Mb, Cnv };
Type type;
Severity severity;
int phase;
int cell_index;
};
@@ -51,6 +53,7 @@ namespace Opm
{
enum struct Type { Mb, CtrlBHP, CtrlTHP, CtrlRate };
Type type;
Severity severity;
int phase;
std::string well_name;
};

View File

@@ -36,7 +36,7 @@ BOOST_AUTO_TEST_CASE(Failures)
{
using CS = Opm::ConvergenceStatus;
Opm::ConvergenceStatus s1;
s1.setReservoirFailed({CS::ReservoirFailure::Type::Cnv, 2, 100});
s1.setReservoirFailed({CS::ReservoirFailure::Type::Cnv, CS::Severity::Normal, 2, 100});
{
BOOST_CHECK(!s1.converged());
BOOST_CHECK(s1.reservoirFailed());
@@ -44,14 +44,15 @@ BOOST_AUTO_TEST_CASE(Failures)
BOOST_REQUIRE(s1.reservoirFailures().size() == 1);
const auto f = s1.reservoirFailures()[0];
BOOST_CHECK(f.type == CS::ReservoirFailure::Type::Cnv);
BOOST_CHECK(f.severity == CS::Severity::Normal);
BOOST_CHECK(f.phase == 2);
BOOST_CHECK(f.cell_index == 100);
BOOST_CHECK(s1.wellFailures().empty());
}
Opm::ConvergenceStatus s2;
s2.setWellFailed({CS::WellFailure::Type::CtrlTHP, -1, "PRODUCER-123"});
s2.setWellFailed({CS::WellFailure::Type::Mb, 2, "INJECTOR-XYZ"});
s2.setWellFailed({CS::WellFailure::Type::CtrlTHP, CS::Severity::Normal, -1, "PRODUCER-123"});
s2.setWellFailed({CS::WellFailure::Type::Mb, CS::Severity::TooLarge, 2, "INJECTOR-XYZ"});
{
BOOST_CHECK(!s2.converged());
BOOST_CHECK(!s2.reservoirFailed());
@@ -60,10 +61,12 @@ BOOST_AUTO_TEST_CASE(Failures)
BOOST_REQUIRE(s2.wellFailures().size() == 2);
const auto f0 = s2.wellFailures()[0];
BOOST_CHECK(f0.type == CS::WellFailure::Type::CtrlTHP);
BOOST_CHECK(f0.severity == CS::Severity::Normal);
BOOST_CHECK(f0.phase == -1);
BOOST_CHECK(f0.well_name == "PRODUCER-123");
const auto f1 = s2.wellFailures()[1];
BOOST_CHECK(f1.type == CS::WellFailure::Type::Mb);
BOOST_CHECK(f1.severity == CS::Severity::TooLarge);
BOOST_CHECK(f1.phase == 2);
BOOST_CHECK(f1.well_name == "INJECTOR-XYZ");
}
@@ -76,15 +79,18 @@ BOOST_AUTO_TEST_CASE(Failures)
BOOST_REQUIRE(s1.reservoirFailures().size() == 1);
const auto f = s1.reservoirFailures()[0];
BOOST_CHECK(f.type == CS::ReservoirFailure::Type::Cnv);
BOOST_CHECK(f.severity == CS::Severity::Normal);
BOOST_CHECK(f.phase == 2);
BOOST_CHECK(f.cell_index == 100);
BOOST_REQUIRE(s1.wellFailures().size() == 2);
const auto f0 = s1.wellFailures()[0];
BOOST_CHECK(f0.type == CS::WellFailure::Type::CtrlTHP);
BOOST_CHECK(f0.severity == CS::Severity::Normal);
BOOST_CHECK(f0.phase == -1);
BOOST_CHECK(f0.well_name == "PRODUCER-123");
const auto f1 = s1.wellFailures()[1];
BOOST_CHECK(f1.type == CS::WellFailure::Type::Mb);
BOOST_CHECK(f1.severity == CS::Severity::TooLarge);
BOOST_CHECK(f1.phase == 2);
BOOST_CHECK(f1.well_name == "INJECTOR-XYZ");
}
@@ -105,10 +111,12 @@ BOOST_AUTO_TEST_CASE(Failures)
BOOST_REQUIRE(s1.wellFailures().size() == 2);
const auto f0 = s1.wellFailures()[0];
BOOST_CHECK(f0.type == CS::WellFailure::Type::CtrlTHP);
BOOST_CHECK(f0.severity == CS::Severity::Normal);
BOOST_CHECK(f0.phase == -1);
BOOST_CHECK(f0.well_name == "PRODUCER-123");
const auto f1 = s1.wellFailures()[1];
BOOST_CHECK(f1.type == CS::WellFailure::Type::Mb);
BOOST_CHECK(f1.severity == CS::Severity::TooLarge);
BOOST_CHECK(f1.phase == 2);
BOOST_CHECK(f1.well_name == "INJECTOR-XYZ");
}