clean up code - correct unit tests
This commit is contained in:
parent
ec976db684
commit
862b7b7591
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2018 Statoil ASA
|
Copyright 2018 Statoil ASA
|
||||||
|
|
||||||
This file is part of the Open Porous Media project (OPM).
|
This file is part of the|| Open Porous Media project (OPM).
|
||||||
|
|
||||||
OPM is free software: you can redistribute it and/or modify
|
OPM is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -323,45 +323,7 @@ int higherLevelInjControlGroupSeqIndex(const Opm::Schedule& sched,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int higherLevelInjControlMode(const Opm::Schedule& sched,
|
|
||||||
const Opm::SummaryState& sumState,
|
|
||||||
const Opm::Group& group,
|
|
||||||
const std::string curInjCtrlKey,
|
|
||||||
const size_t simStep)
|
|
||||||
//
|
|
||||||
// returns the sequence number of higher (highest) level group with active control different from (NONE or FLD)
|
|
||||||
//
|
|
||||||
{
|
|
||||||
int ctrl_mode = -1;
|
|
||||||
if (group.defined( simStep )) {
|
|
||||||
auto current = group;
|
|
||||||
double cur_inj_ctrl = -1.;
|
|
||||||
while (current.name() != "FIELD" && ctrl_mode < 0) {
|
|
||||||
current = sched.getGroup(current.parent(), simStep);
|
|
||||||
cur_inj_ctrl = -1.;
|
|
||||||
std::string group_key = gf_key(curInjCtrlKey, current.name());
|
|
||||||
if (sumState.has(group_key)) {
|
|
||||||
cur_inj_ctrl = sumState.get(group_key);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
std::cout << "Current injection group control: " << curInjCtrlKey << " is not defined for group: " << current.name() << " at timestep: " << simStep << std::endl;
|
|
||||||
cur_inj_ctrl = 0.;
|
|
||||||
}
|
|
||||||
if (cur_inj_ctrl > 0. && ctrl_mode < 0) {
|
|
||||||
ctrl_mode = static_cast<int>(cur_inj_ctrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ctrl_mode;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
std::stringstream str;
|
|
||||||
str << "actual group has not been defined at report time: " << simStep;
|
|
||||||
throw std::invalid_argument(str.str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::size_t> groupParentSeqIndex(const Opm::Schedule& sched,
|
std::vector<std::size_t> groupParentSeqIndex(const Opm::Schedule& sched,
|
||||||
const Opm::SummaryState& sumState,
|
|
||||||
const Opm::Group& group,
|
const Opm::Group& group,
|
||||||
const size_t simStep)
|
const size_t simStep)
|
||||||
//
|
//
|
||||||
@ -479,10 +441,8 @@ void staticContrib(const Opm::Schedule& sched,
|
|||||||
const int ngmaxz,
|
const int ngmaxz,
|
||||||
const std::size_t simStep,
|
const std::size_t simStep,
|
||||||
const Opm::SummaryState& sumState,
|
const Opm::SummaryState& sumState,
|
||||||
const std::map<int, Opm::Group::InjectionCMode>& iCtrlToICMode,
|
|
||||||
const std::map<int, Opm::Group::ProductionCMode>& pCtrlToPCmode,
|
const std::map<int, Opm::Group::ProductionCMode>& pCtrlToPCmode,
|
||||||
const std::map<Opm::Group::InjectionCMode, int>& cmodeToNum,
|
const std::map<Opm::Group::InjectionCMode, int>& cmodeToNum,
|
||||||
const Opm::UnitSystem& units,
|
|
||||||
IGrpArray& iGrp)
|
IGrpArray& iGrp)
|
||||||
{
|
{
|
||||||
if (group.wellgroup()) {
|
if (group.wellgroup()) {
|
||||||
@ -743,7 +703,8 @@ void staticContrib(const Opm::Schedule& sched,
|
|||||||
iGrp[nwgmax + 10] = 5;
|
iGrp[nwgmax + 10] = 5;
|
||||||
break;
|
break;
|
||||||
case Opm::Group::ProductionCMode::FLD:
|
case Opm::Group::ProductionCMode::FLD:
|
||||||
iGrp[nwgmax + 10] = 0; // need to be checked!!
|
iGrp[nwgmax + 10] = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
iGrp[nwgmax + 10] = 0;
|
iGrp[nwgmax + 10] = 0;
|
||||||
}
|
}
|
||||||
@ -753,7 +714,7 @@ void staticContrib(const Opm::Schedule& sched,
|
|||||||
iGrp[nwgmax + 17] = -1;
|
iGrp[nwgmax + 17] = -1;
|
||||||
iGrp[nwgmax + 22] = -1;
|
iGrp[nwgmax + 22] = -1;
|
||||||
if (group.isInjectionGroup() || (group.getGroupType() == Opm::Group::GroupType::MIXED) || (group.getGroupType() == Opm::Group::GroupType::NONE)) {
|
if (group.isInjectionGroup() || (group.getGroupType() == Opm::Group::GroupType::MIXED) || (group.getGroupType() == Opm::Group::GroupType::NONE)) {
|
||||||
auto group_parent_list = groupParentSeqIndex(sched, sumState, group, simStep);
|
auto group_parent_list = groupParentSeqIndex(sched, group, simStep);
|
||||||
|
|
||||||
//set "default value" in case a group is only injection group
|
//set "default value" in case a group is only injection group
|
||||||
if (group.isInjectionGroup() && !group.isProductionGroup()) {
|
if (group.isInjectionGroup() && !group.isProductionGroup()) {
|
||||||
@ -768,13 +729,8 @@ void staticContrib(const Opm::Schedule& sched,
|
|||||||
double cur_winj_ctrl = -1.;
|
double cur_winj_ctrl = -1.;
|
||||||
const auto& winj_cmode = (group.hasInjectionControl(Opm::Phase::WATER))?
|
const auto& winj_cmode = (group.hasInjectionControl(Opm::Phase::WATER))?
|
||||||
group.injectionControls(Opm::Phase::WATER, sumState).cmode : Opm::Group::InjectionCMode::NONE;
|
group.injectionControls(Opm::Phase::WATER, sumState).cmode : Opm::Group::InjectionCMode::NONE;
|
||||||
Opm::Group::InjectionCMode wictl_mode = Opm::Group::InjectionCMode::NONE;
|
|
||||||
if (sumState.has(group_key_w)) {
|
if (sumState.has(group_key_w)) {
|
||||||
cur_winj_ctrl = sumState.get(group_key_w);
|
cur_winj_ctrl = sumState.get(group_key_w);
|
||||||
const auto it_ctrl = iCtrlToICMode.find(cur_winj_ctrl);
|
|
||||||
if (it_ctrl != iCtrlToICMode.end()) {
|
|
||||||
wictl_mode = it_ctrl->second;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << "Current group water injection control is not defined for group: " << group.name() << " at timestep: " << simStep << std::endl;
|
std::cout << "Current group water injection control is not defined for group: " << group.name() << " at timestep: " << simStep << std::endl;
|
||||||
@ -865,13 +821,8 @@ void staticContrib(const Opm::Schedule& sched,
|
|||||||
double cur_ginj_ctrl = -1.;
|
double cur_ginj_ctrl = -1.;
|
||||||
const auto& ginj_cmode = (group.hasInjectionControl(Opm::Phase::GAS))?
|
const auto& ginj_cmode = (group.hasInjectionControl(Opm::Phase::GAS))?
|
||||||
group.injectionControls(Opm::Phase::GAS, sumState).cmode : Opm::Group::InjectionCMode::NONE;
|
group.injectionControls(Opm::Phase::GAS, sumState).cmode : Opm::Group::InjectionCMode::NONE;
|
||||||
Opm::Group::InjectionCMode gictl_mode = Opm::Group::InjectionCMode::NONE;
|
|
||||||
if (sumState.has(group_key_g)) {
|
if (sumState.has(group_key_g)) {
|
||||||
cur_ginj_ctrl = sumState.get(group_key_g);
|
cur_ginj_ctrl = sumState.get(group_key_g);
|
||||||
const auto it_ctrl = iCtrlToICMode.find(cur_ginj_ctrl);
|
|
||||||
if (it_ctrl != iCtrlToICMode.end()) {
|
|
||||||
gictl_mode = it_ctrl->second;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << "Current group gas injection control is not defined for group: " << group.name() << " at timestep: " << simStep << std::endl;
|
std::cout << "Current group gas injection control is not defined for group: " << group.name() << " at timestep: " << simStep << std::endl;
|
||||||
@ -1286,13 +1237,13 @@ captureDeclaredGroupData(const Opm::Schedule& sched,
|
|||||||
curGroups[ind] = std::addressof(group);
|
curGroups[ind] = std::addressof(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
groupLoop(curGroups, [&sched, &units, simStep, sumState, this]
|
groupLoop(curGroups, [&sched, simStep, sumState, this]
|
||||||
(const Group& group, const std::size_t groupID) -> void
|
(const Group& group, const std::size_t groupID) -> void
|
||||||
{
|
{
|
||||||
auto ig = this->iGroup_[groupID];
|
auto ig = this->iGroup_[groupID];
|
||||||
|
|
||||||
IGrp::staticContrib(sched, group, this->nWGMax_, this->nGMaxz_,
|
IGrp::staticContrib(sched, group, this->nWGMax_, this->nGMaxz_,
|
||||||
simStep, sumState, this->ICntlModeToiCMode, this->PCntlModeToPCMode, this->cmodeToNum, units, ig);
|
simStep, sumState, this->PCntlModeToPCMode, this->cmodeToNum, ig);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Define Static Contributions to SGrp Array.
|
// Define Static Contributions to SGrp Array.
|
||||||
|
@ -316,7 +316,6 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto& udq_par = rspec.udqParams();
|
const auto& udq_par = rspec.udqParams();
|
||||||
const auto& udqActive = sched.udqActive(simStep);
|
|
||||||
const auto r_seed = udq_par.rand_seed();
|
const auto r_seed = udq_par.rand_seed();
|
||||||
const auto no_wudq = noWellUdqs(sched, rptStep, simStep);
|
const auto no_wudq = noWellUdqs(sched, rptStep, simStep);
|
||||||
const auto no_gudq = noGroupUdqs(sched, rptStep, simStep);
|
const auto no_gudq = noGroupUdqs(sched, rptStep, simStep);
|
||||||
|
@ -323,8 +323,8 @@ RPTREGS
|
|||||||
SOLUTION ============================================================
|
SOLUTION ============================================================
|
||||||
|
|
||||||
EQUIL
|
EQUIL
|
||||||
7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 /
|
7020.00 2700.00 7990.00 .00000 7200.00 .00000 0 0 5 /
|
||||||
7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 /
|
7200.00 3700.00 7300.00 .00000 7100.00 .00000 1 0 5 /
|
||||||
|
|
||||||
RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83
|
RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83
|
||||||
7000.0 1.0000
|
7000.0 1.0000
|
||||||
|
@ -92,30 +92,178 @@ OIL
|
|||||||
GAS
|
GAS
|
||||||
WATER
|
WATER
|
||||||
DISGAS
|
DISGAS
|
||||||
VAPOIL
|
|
||||||
UNIFOUT
|
UNIFOUT
|
||||||
UNIFIN
|
UNIFIN
|
||||||
DIMENS
|
DIMENS
|
||||||
10 10 10 /
|
10 10 10 /
|
||||||
|
WELLDIMS
|
||||||
|
6 20 1 6 /
|
||||||
|
TABDIMS
|
||||||
|
1 1 15 15 2 15 /
|
||||||
|
FIELD
|
||||||
|
EQLDIMS
|
||||||
|
1 /
|
||||||
|
|
||||||
GRID
|
GRID
|
||||||
DXV
|
DXV
|
||||||
10*0.25 /
|
10*100. /
|
||||||
DYV
|
DYV
|
||||||
10*0.25 /
|
10*100. /
|
||||||
DZV
|
DZV
|
||||||
10*0.25 /
|
10*100. /
|
||||||
TOPS
|
TOPS
|
||||||
100*0.25 /
|
100*7000. /
|
||||||
|
|
||||||
PORO
|
PORO
|
||||||
1000*0.2 /
|
1000*0.2 /
|
||||||
|
|
||||||
SOLUTION
|
PERMX
|
||||||
|
1000*100. /
|
||||||
|
|
||||||
|
PERMY
|
||||||
|
1000*100. /
|
||||||
|
|
||||||
|
PERMZ
|
||||||
|
1000*10. /
|
||||||
|
|
||||||
|
|
||||||
START -- 0
|
PROPS ==========================================================
|
||||||
1 NOV 1979 /
|
|
||||||
|
-- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS
|
||||||
|
-- A FUNCTION OF WATER SATURATION.
|
||||||
|
--
|
||||||
|
-- SWAT KRW PCOW
|
||||||
|
SWFN
|
||||||
|
|
||||||
|
0.12 0 0
|
||||||
|
1.0 0.00001 0 /
|
||||||
|
|
||||||
|
-- SIMILARLY FOR GAS
|
||||||
|
--
|
||||||
|
-- SGAS KRG PCOG
|
||||||
|
SGFN
|
||||||
|
|
||||||
|
0 0 0
|
||||||
|
0.02 0 0
|
||||||
|
0.05 0.005 0
|
||||||
|
0.12 0.025 0
|
||||||
|
0.2 0.075 0
|
||||||
|
0.25 0.125 0
|
||||||
|
0.3 0.19 0
|
||||||
|
0.4 0.41 0
|
||||||
|
0.45 0.6 0
|
||||||
|
0.5 0.72 0
|
||||||
|
0.6 0.87 0
|
||||||
|
0.7 0.94 0
|
||||||
|
0.85 0.98 0
|
||||||
|
1.0 1.0 0
|
||||||
|
/
|
||||||
|
|
||||||
|
-- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION
|
||||||
|
-- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES
|
||||||
|
--
|
||||||
|
-- SOIL KROW KROG
|
||||||
|
SOF3
|
||||||
|
|
||||||
|
0 0 0
|
||||||
|
0.18 0 0
|
||||||
|
0.28 0.0001 0.0001
|
||||||
|
0.38 0.001 0.001
|
||||||
|
0.43 0.01 0.01
|
||||||
|
0.48 0.021 0.021
|
||||||
|
0.58 0.09 0.09
|
||||||
|
0.63 0.2 0.2
|
||||||
|
0.68 0.35 0.35
|
||||||
|
0.76 0.7 0.7
|
||||||
|
0.83 0.98 0.98
|
||||||
|
0.86 0.997 0.997
|
||||||
|
0.879 1 1
|
||||||
|
0.88 1 1 /
|
||||||
|
|
||||||
|
|
||||||
|
-- PVT PROPERTIES OF WATER
|
||||||
|
--
|
||||||
|
-- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY
|
||||||
|
PVTW
|
||||||
|
4014.7 1.029 3.13D-6 0.31 0 /
|
||||||
|
|
||||||
|
-- ROCK COMPRESSIBILITY
|
||||||
|
--
|
||||||
|
-- REF. PRES COMPRESSIBILITY
|
||||||
|
ROCK
|
||||||
|
14.7 3.0D-6 /
|
||||||
|
|
||||||
|
-- SURFACE DENSITIES OF RESERVOIR FLUIDS
|
||||||
|
--
|
||||||
|
-- OIL WATER GAS
|
||||||
|
DENSITY
|
||||||
|
49.1 64.79 0.06054 /
|
||||||
|
|
||||||
|
-- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL)
|
||||||
|
-- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS
|
||||||
|
--
|
||||||
|
-- PGAS BGAS VISGAS
|
||||||
|
PVDG
|
||||||
|
14.7 166.666 0.008
|
||||||
|
264.7 12.093 0.0096
|
||||||
|
514.7 6.274 0.0112
|
||||||
|
1014.7 3.197 0.014
|
||||||
|
2014.7 1.614 0.0189
|
||||||
|
2514.7 1.294 0.0208
|
||||||
|
3014.7 1.080 0.0228
|
||||||
|
4014.7 0.811 0.0268
|
||||||
|
5014.7 0.649 0.0309
|
||||||
|
9014.7 0.386 0.047 /
|
||||||
|
|
||||||
|
-- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS)
|
||||||
|
-- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL
|
||||||
|
--
|
||||||
|
-- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY
|
||||||
|
-- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF
|
||||||
|
-- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA
|
||||||
|
-- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE
|
||||||
|
-- SUPPLIED FOR THE HIGHEST RS (1.618).
|
||||||
|
--
|
||||||
|
-- RS POIL FVFO VISO
|
||||||
|
PVTO
|
||||||
|
0.001 14.7 1.062 1.04 /
|
||||||
|
0.0905 264.7 1.15 0.975 /
|
||||||
|
0.18 514.7 1.207 0.91 /
|
||||||
|
0.371 1014.7 1.295 0.83 /
|
||||||
|
0.636 2014.7 1.435 0.695 /
|
||||||
|
0.775 2514.7 1.5 0.641 /
|
||||||
|
0.93 3014.7 1.565 0.594 /
|
||||||
|
1.270 4014.7 1.695 0.51
|
||||||
|
5014.7 1.671 0.549
|
||||||
|
9014.7 1.579 0.74 /
|
||||||
|
1.618 5014.7 1.827 0.449
|
||||||
|
9014.7 1.726 0.605 /
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
REGIONS ===========================================================
|
||||||
|
|
||||||
|
|
||||||
|
FIPNUM
|
||||||
|
|
||||||
|
1000*1
|
||||||
|
/
|
||||||
|
|
||||||
|
EQLNUM
|
||||||
|
|
||||||
|
1000*1
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
SOLUTION ============================================================
|
||||||
|
|
||||||
|
EQUIL
|
||||||
|
7020.00 2700.00 7990.00 .00000 7200.00 .00000 0 0 5 /
|
||||||
|
|
||||||
|
RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83
|
||||||
|
7000.0 1.0000
|
||||||
|
7990.0 1.0000
|
||||||
|
/
|
||||||
|
|
||||||
SCHEDULE
|
SCHEDULE
|
||||||
RPTRST
|
RPTRST
|
||||||
@ -511,7 +659,7 @@ BOOST_AUTO_TEST_CASE (Declared_Well_Data)
|
|||||||
// No THP limit
|
// No THP limit
|
||||||
BOOST_CHECK_CLOSE(swell[i0 + Ix::THPTarget] , 0.0f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i0 + Ix::THPTarget] , 0.0f, 1.0e-7f);
|
||||||
BOOST_CHECK_CLOSE(swell[i0 + Ix::BHPTarget] , 1000.0f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i0 + Ix::BHPTarget] , 1000.0f, 1.0e-7f);
|
||||||
BOOST_CHECK_CLOSE(swell[i0 + Ix::DatumDepth], 0.375f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i0 + Ix::DatumDepth], 7050.00049f, 1.0e-7f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SWEL (OP_2)
|
// SWEL (OP_2)
|
||||||
@ -524,7 +672,7 @@ BOOST_AUTO_TEST_CASE (Declared_Well_Data)
|
|||||||
BOOST_CHECK_CLOSE(swell[i1 + Ix::THPTarget], 1.0e20f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i1 + Ix::THPTarget], 1.0e20f, 1.0e-7f);
|
||||||
BOOST_CHECK_CLOSE(swell[i1 + Ix::BHPTarget], 400.0f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i1 + Ix::BHPTarget], 400.0f, 1.0e-7f);
|
||||||
|
|
||||||
BOOST_CHECK_CLOSE(swell[i1 + Ix::DatumDepth], 0.625f, 1.0e-7f);
|
BOOST_CHECK_CLOSE(swell[i1 + Ix::DatumDepth], 7150.0f, 1.0e-7f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// XWEL (OP_1)
|
// XWEL (OP_1)
|
||||||
|
Loading…
Reference in New Issue
Block a user