Identify GCONINJE UDA Items
This commit adds UDA items for the GCONINJE keyword. This is in preparation of tracking UDA status in this context. While here, also add unit tests for the expected values of UDQ::keyword() and UDQ::udaCode().
This commit is contained in:
parent
cefc083135
commit
665a82b9cd
@ -17,10 +17,12 @@
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef UDQ_ENUMS_HPP
|
||||
#define UDQ_ENUMS_HPP
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
/*
|
||||
@ -69,8 +71,6 @@ enum class UDQVarType {
|
||||
GROUP_VAR = 9
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum class UDQTokenType{
|
||||
error = 0,
|
||||
number = 1,
|
||||
@ -139,7 +139,6 @@ enum class UDQUpdate {
|
||||
NEXT
|
||||
};
|
||||
|
||||
|
||||
enum class UDAControl {
|
||||
WCONPROD_ORAT,
|
||||
WCONPROD_GRAT,
|
||||
@ -157,10 +156,14 @@ enum class UDAControl {
|
||||
GCONPROD_OIL_TARGET,
|
||||
GCONPROD_WATER_TARGET,
|
||||
GCONPROD_GAS_TARGET,
|
||||
GCONPROD_LIQUID_TARGET
|
||||
GCONPROD_LIQUID_TARGET,
|
||||
//
|
||||
GCONINJE_SURFACE_MAX_RATE,
|
||||
GCONINJE_RESV_MAX_RATE,
|
||||
GCONINJE_TARGET_REINJ_FRACTION,
|
||||
GCONINJE_TARGET_VOID_FRACTION,
|
||||
};
|
||||
|
||||
|
||||
enum class UDAKeyword {
|
||||
WCONPROD,
|
||||
WCONINJE,
|
||||
@ -168,8 +171,6 @@ enum class UDAKeyword {
|
||||
GCONPROD
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace UDQ {
|
||||
|
||||
UDQVarType targetType(const std::string& keyword, const std::vector<std::string>& selector);
|
||||
@ -191,7 +192,7 @@ namespace UDQ {
|
||||
int uadCode(UDAControl control);
|
||||
|
||||
constexpr double restart_default = -0.3E+21;
|
||||
}
|
||||
}
|
||||
} // UDQ
|
||||
} // Opm
|
||||
|
||||
#endif
|
||||
#endif // UDQ_ENUMS_HPP
|
||||
|
@ -17,18 +17,17 @@
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp>
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp>
|
||||
namespace Opm { namespace UDQ {
|
||||
|
||||
|
||||
namespace Opm {
|
||||
namespace UDQ {
|
||||
namespace {
|
||||
|
||||
const std::set<UDQTokenType> cmp_func = {UDQTokenType::binary_cmp_eq,
|
||||
@ -364,54 +363,81 @@ std::string typeName(UDQVarType var_type) {
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
template <typename Value>
|
||||
Value lookup_control_map_value(const std::map<UDAControl, Value>& map, const UDAControl control)
|
||||
{
|
||||
auto pos = map.find(control);
|
||||
if (pos == map.end()) {
|
||||
throw std::logic_error {
|
||||
"Unrecognized enum type (" +
|
||||
std::to_string(static_cast<int>(control)) +
|
||||
"- internal error"
|
||||
};
|
||||
}
|
||||
|
||||
UDAKeyword keyword(UDAControl control) {
|
||||
const std::map<UDAControl, UDAKeyword> c2k = {{UDAControl::WCONPROD_ORAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_GRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_WRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_LRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_RESV, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_BHP, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_THP, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONINJE_RATE, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_RESV, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_BHP, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_THP, UDAKeyword::WCONINJE},
|
||||
{UDAControl::GCONPROD_OIL_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_WATER_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_GAS_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_LIQUID_TARGET, UDAKeyword::GCONPROD}};
|
||||
return pos->second;
|
||||
}
|
||||
} // Anonymous
|
||||
|
||||
auto it = c2k.find(control);
|
||||
if (it != c2k.end())
|
||||
return it->second;
|
||||
UDAKeyword keyword(UDAControl control)
|
||||
{
|
||||
static const auto c2k = std::map<UDAControl, UDAKeyword> {
|
||||
{UDAControl::WCONPROD_ORAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_GRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_WRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_LRAT, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_RESV, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_BHP, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONPROD_THP, UDAKeyword::WCONPROD},
|
||||
{UDAControl::WCONINJE_RATE, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_RESV, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_BHP, UDAKeyword::WCONINJE},
|
||||
{UDAControl::WCONINJE_THP, UDAKeyword::WCONINJE},
|
||||
{UDAControl::GCONPROD_OIL_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_WATER_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_GAS_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONPROD_LIQUID_TARGET, UDAKeyword::GCONPROD},
|
||||
{UDAControl::GCONINJE_SURFACE_MAX_RATE, UDAKeyword::GCONINJE},
|
||||
{UDAControl::GCONINJE_RESV_MAX_RATE, UDAKeyword::GCONINJE},
|
||||
{UDAControl::GCONINJE_TARGET_REINJ_FRACTION, UDAKeyword::GCONINJE},
|
||||
{UDAControl::GCONINJE_TARGET_VOID_FRACTION, UDAKeyword::GCONINJE},
|
||||
};
|
||||
|
||||
throw std::logic_error("Unrecognized enum type - internal error");
|
||||
return lookup_control_map_value(c2k, control);
|
||||
}
|
||||
|
||||
int uadCode(UDAControl control)
|
||||
{
|
||||
static const auto c2uad = std::map<UDAControl, int> {
|
||||
{UDAControl::WCONPROD_ORAT, 300004},
|
||||
{UDAControl::WCONPROD_GRAT, 500004},
|
||||
{UDAControl::WCONPROD_WRAT, 400004},
|
||||
{UDAControl::WCONPROD_LRAT, 600004},
|
||||
{UDAControl::WCONPROD_RESV, 999999},
|
||||
{UDAControl::WCONPROD_BHP, 999999},
|
||||
{UDAControl::WCONPROD_THP, 999999},
|
||||
|
||||
int uadCode(UDAControl control) {
|
||||
const std::map<UDAControl, int> c2uad = {{UDAControl::WCONPROD_ORAT, 300004},
|
||||
{UDAControl::WCONPROD_GRAT, 500004},
|
||||
{UDAControl::WCONPROD_WRAT, 400004},
|
||||
{UDAControl::WCONPROD_LRAT, 600004},
|
||||
{UDAControl::WCONPROD_RESV, 999999},
|
||||
{UDAControl::WCONPROD_BHP, 999999},
|
||||
{UDAControl::WCONPROD_THP, 999999},
|
||||
{UDAControl::WCONINJE_RATE, 400003},
|
||||
{UDAControl::WCONINJE_RESV, 500003},
|
||||
{UDAControl::WCONINJE_BHP, 999999},
|
||||
{UDAControl::WCONINJE_THP, 999999},
|
||||
{UDAControl::GCONPROD_OIL_TARGET, 200019},
|
||||
{UDAControl::GCONPROD_WATER_TARGET, 300019},
|
||||
{UDAControl::GCONPROD_GAS_TARGET, 400019},
|
||||
{UDAControl::GCONPROD_LIQUID_TARGET, 500019}};
|
||||
// --------------------------------------------------------------
|
||||
{UDAControl::WCONINJE_RATE, 400003},
|
||||
{UDAControl::WCONINJE_RESV, 500003},
|
||||
{UDAControl::WCONINJE_BHP, 999999},
|
||||
{UDAControl::WCONINJE_THP, 999999},
|
||||
|
||||
auto it = c2uad.find(control);
|
||||
if (it != c2uad.end())
|
||||
return it->second;
|
||||
// --------------------------------------------------------------
|
||||
{UDAControl::GCONPROD_OIL_TARGET, 200019},
|
||||
{UDAControl::GCONPROD_WATER_TARGET, 300019},
|
||||
{UDAControl::GCONPROD_GAS_TARGET, 400019},
|
||||
{UDAControl::GCONPROD_LIQUID_TARGET, 500019},
|
||||
|
||||
throw std::logic_error("Unrecognized enum type - internal error");
|
||||
}
|
||||
}
|
||||
// --------------------------------------------------------------
|
||||
{UDAControl::GCONINJE_SURFACE_MAX_RATE, 300017}, // Surface injection rate
|
||||
{UDAControl::GCONINJE_RESV_MAX_RATE, 400017}, // Reservoir volume injection rate
|
||||
{UDAControl::GCONINJE_TARGET_REINJ_FRACTION, 500017}, // Reinjection fraction
|
||||
{UDAControl::GCONINJE_TARGET_VOID_FRACTION, 600017}, // Voidage replacement fraction
|
||||
};
|
||||
|
||||
return lookup_control_map_value(c2uad, control);
|
||||
}
|
||||
|
||||
}} // Opm::UDQ
|
||||
|
@ -14,8 +14,11 @@ Copyright 2018 Statoil ASA.
|
||||
*/
|
||||
|
||||
#define BOOST_TEST_MODULE UDQTests
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include <limits>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <opm/common/utility/OpmInputError.hpp>
|
||||
#include <opm/parser/eclipse/Utility/Typetools.hpp>
|
||||
@ -1512,6 +1515,63 @@ BOOST_AUTO_TEST_CASE(UDQ_USAGE) {
|
||||
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UDQControl_Keyword)
|
||||
{
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_ORAT) == UDAKeyword::WCONPROD, "WCONPROD_ORAT control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_GRAT) == UDAKeyword::WCONPROD, "WCONPROD_GRAT control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_WRAT) == UDAKeyword::WCONPROD, "WCONPROD_WRAT control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_LRAT) == UDAKeyword::WCONPROD, "WCONPROD_LRAT control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_RESV) == UDAKeyword::WCONPROD, "WCONPROD_RESV control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_BHP) == UDAKeyword::WCONPROD, "WCONPROD_BHP control keyword must be WCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONPROD_THP) == UDAKeyword::WCONPROD, "WCONPROD_THP control keyword must be WCONPROD");
|
||||
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONINJE_RATE) == UDAKeyword::WCONINJE, "WCONINJE_RATE control keyword must be WCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONINJE_RESV) == UDAKeyword::WCONINJE, "WCONINJE_RESV control keyword must be WCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONINJE_BHP) == UDAKeyword::WCONINJE, "WCONINJE_BHP control keyword must be WCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::WCONINJE_THP) == UDAKeyword::WCONINJE, "WCONINJE_THP control keyword must be WCONINJE");
|
||||
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONPROD_OIL_TARGET) == UDAKeyword::GCONPROD, "GCONPROD_OIL_TARGET control keyword must be GCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONPROD_WATER_TARGET) == UDAKeyword::GCONPROD, "GCONPROD_WATER_TARGET control keyword must be GCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONPROD_GAS_TARGET) == UDAKeyword::GCONPROD, "GCONPROD_GAS_TARGET control keyword must be GCONPROD");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONPROD_LIQUID_TARGET) == UDAKeyword::GCONPROD, "GCONPROD_LIQUID_TARGET control keyword must be GCONPROD");
|
||||
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONINJE_SURFACE_MAX_RATE) == UDAKeyword::GCONINJE, "GCONINJE_SURFACE_MAX_RATE control keyword must be GCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONINJE_RESV_MAX_RATE) == UDAKeyword::GCONINJE, "GCONINJE_RESV_MAX_RATE control keyword must be GCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONINJE_TARGET_REINJ_FRACTION) == UDAKeyword::GCONINJE, "GCONINJE_TARGET_REINJ_FRACTION control keyword must be GCONINJE");
|
||||
BOOST_CHECK_MESSAGE(UDQ::keyword(UDAControl::GCONINJE_TARGET_VOID_FRACTION) == UDAKeyword::GCONINJE, "GCONINJE_TARGET_VOID_FRACTION control keyword must be GCONINJE");
|
||||
|
||||
BOOST_CHECK_THROW(UDQ::keyword(static_cast<UDAControl>(1729)),
|
||||
std::logic_error);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UDAControl_IUAD_0)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_ORAT), 300004);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_GRAT), 500004);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_WRAT), 400004);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_LRAT), 600004);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_RESV), 999999);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_BHP), 999999);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONPROD_THP), 999999);
|
||||
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONINJE_RATE), 400003);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONINJE_RESV), 500003);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONINJE_BHP), 999999);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::WCONINJE_THP), 999999);
|
||||
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONPROD_OIL_TARGET), 200019);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONPROD_WATER_TARGET), 300019);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONPROD_GAS_TARGET), 400019);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONPROD_LIQUID_TARGET), 500019);
|
||||
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONINJE_SURFACE_MAX_RATE), 300017);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONINJE_RESV_MAX_RATE), 400017);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONINJE_TARGET_REINJ_FRACTION), 500017);
|
||||
BOOST_CHECK_EQUAL(UDQ::uadCode(UDAControl::GCONINJE_TARGET_VOID_FRACTION), 600017);
|
||||
|
||||
BOOST_CHECK_THROW(UDQ::uadCode(static_cast<UDAControl>(1729)),
|
||||
std::logic_error);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(IntegrationTest) {
|
||||
#include "data/integration_tests/udq.data"
|
||||
|
Loading…
Reference in New Issue
Block a user