InitConfig: Internalize FILLEPS Keyword

This commit extends the InitConfig class to support querying whether
or not the FILLEPS keyword is present in the PROPS section.  Note
that we only look for the keyword in PROPS (not the whole input
deck), since the keyword is only permitted in PROPS.

Add unit tests to exercise the new ability.
This commit is contained in:
Bård Skaflestad
2019-06-24 13:23:13 +02:00
parent 763702fd0f
commit ffecc035c0
3 changed files with 315 additions and 3 deletions

View File

@@ -233,4 +233,306 @@ BOOST_AUTO_TEST_CASE(RestartCWD) {
test_work_area_free(work_area);
}
// --------------------------------------------------------------------
BOOST_AUTO_TEST_SUITE (FILLEPS)
BOOST_AUTO_TEST_CASE(WrongSection)
{
// FILLEPS in GRID section (should ideally be caught at load time)
auto input = std::string { R"(
RUNSPEC
DIMENS
5 5 3 /
TITLE
Break FILLEPS Keyword
START
24 'JUN' 2019 /
GAS
OIL
WATER
DISGAS
METRIC
TABDIMS
/
GRID
INIT
DXV
5*100 /
DYV
5*100 /
DZV
3*10 /
TOPS
25*2000 /
EQUALS
PERMX 100 /
/
COPY
PERMX PERMY /
PERMX PERMZ /
/
MULTIPLY
PERMZ 0.1 /
/
PORO
75*0.3 /
-- Wrong section (should be in PROPS)
FILLEPS
PROPS
SWOF
0 0 1 0
1 1 0 0 /
SGOF
0 0 1 0
1 1 0 0 /
DENSITY
900 1000 1 /
PVTW
400 1 1.0E-06 1 0 /
PVDG
30 0.04234 0.01344
530 0.003868 0.02935
/
PVTO
0.000 1.0 1.07033 0.645
500.0 1.02339 1.029 /
17.345 25.0 1.14075 0.484
500.0 1.07726 0.834 /
31.462 50.0 1.18430 0.439
500.0 1.11592 0.757 /
45.089 75.0 1.22415 0.402
500.0 1.15223 0.689 /
/
END
)" };
const auto es = ::Opm::EclipseState {
::Opm::Parser{}.parseString(input)
};
// Keyword present but placed in wrong section => treat as absent
BOOST_CHECK(! es.cfg().init().filleps());
}
BOOST_AUTO_TEST_CASE(Present)
{
auto input = std::string { R"(
RUNSPEC
DIMENS
5 5 3 /
TITLE
Break FILLEPS Keyword
START
24 'JUN' 2019 /
GAS
OIL
WATER
DISGAS
METRIC
TABDIMS
/
GRID
INIT
DXV
5*100 /
DYV
5*100 /
DZV
3*10 /
TOPS
25*2000 /
EQUALS
PERMX 100 /
/
COPY
PERMX PERMY /
PERMX PERMZ /
/
MULTIPLY
PERMZ 0.1 /
/
PORO
75*0.3 /
PROPS
SWOF
0 0 1 0
1 1 0 0 /
SGOF
0 0 1 0
1 1 0 0 /
DENSITY
900 1000 1 /
PVTW
400 1 1.0E-06 1 0 /
PVDG
30 0.04234 0.01344
530 0.003868 0.02935
/
PVTO
0.000 1.0 1.07033 0.645
500.0 1.02339 1.029 /
17.345 25.0 1.14075 0.484
500.0 1.07726 0.834 /
31.462 50.0 1.18430 0.439
500.0 1.11592 0.757 /
45.089 75.0 1.22415 0.402
500.0 1.15223 0.689 /
/
FILLEPS
END
)" };
const auto es = ::Opm::EclipseState {
::Opm::Parser{}.parseString(input)
};
BOOST_CHECK(es.cfg().init().filleps());
}
BOOST_AUTO_TEST_CASE(Absent)
{
auto input = std::string { R"(
RUNSPEC
DIMENS
5 5 3 /
TITLE
Break FILLEPS Keyword
START
24 'JUN' 2019 /
GAS
OIL
WATER
DISGAS
METRIC
TABDIMS
/
GRID
INIT
DXV
5*100 /
DYV
5*100 /
DZV
3*10 /
TOPS
25*2000 /
EQUALS
PERMX 100 /
/
COPY
PERMX PERMY /
PERMX PERMZ /
/
MULTIPLY
PERMZ 0.1 /
/
PORO
75*0.3 /
PROPS
SWOF
0 0 1 0
1 1 0 0 /
SGOF
0 0 1 0
1 1 0 0 /
DENSITY
900 1000 1 /
PVTW
400 1 1.0E-06 1 0 /
PVDG
30 0.04234 0.01344
530 0.003868 0.02935
/
PVTO
0.000 1.0 1.07033 0.645
500.0 1.02339 1.029 /
17.345 25.0 1.14075 0.484
500.0 1.07726 0.834 /
31.462 50.0 1.18430 0.439
500.0 1.11592 0.757 /
45.089 75.0 1.22415 0.402
500.0 1.15223 0.689 /
/
-- No FILLEPS here
-- FILLEPS
END
)" };
const auto es = ::Opm::EclipseState {
::Opm::Parser{}.parseString(input)
};
BOOST_CHECK(! es.cfg().init().filleps());
}
BOOST_AUTO_TEST_SUITE_END()