EclipseState: check the canonical section topology
at least if the "beStrict" parameter for the constructor is set to true. by default nothing changes...
This commit is contained in:
parent
0b01c2d65f
commit
b690d9add8
@ -26,14 +26,23 @@
|
||||
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <boost/algorithm/string/join.hpp>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
EclipseState::EclipseState(DeckConstPtr deck)
|
||||
EclipseState::EclipseState(DeckConstPtr deck, bool beStrict)
|
||||
{
|
||||
m_unitSystem = deck->getActiveUnitSystem();
|
||||
|
||||
if (beStrict) {
|
||||
// make sure all mandatory sections are present and that their order is correct
|
||||
std::ostringstream oss;
|
||||
if (!Section::checkSectionTopology(deck, oss))
|
||||
throw std::invalid_argument("Section topology of deck is invalid: "
|
||||
+ oss.str());
|
||||
}
|
||||
|
||||
initPhases(deck);
|
||||
initEclipseGrid(deck);
|
||||
initSchedule(deck);
|
||||
|
@ -37,7 +37,7 @@ namespace Opm {
|
||||
|
||||
class EclipseState {
|
||||
public:
|
||||
EclipseState(DeckConstPtr deck);
|
||||
EclipseState(DeckConstPtr deck, bool beStrict = false);
|
||||
ScheduleConstPtr getSchedule() const;
|
||||
EclipseGridConstPtr getEclipseGrid() const;
|
||||
EclipseGridPtr getEclipseGridCopy() const;
|
||||
|
@ -28,11 +28,8 @@
|
||||
|
||||
namespace Opm {
|
||||
|
||||
Schedule::Schedule(DeckConstPtr deck) {
|
||||
if (deck->hasKeyword("SCHEDULE")) {
|
||||
initFromDeck(deck);
|
||||
} else
|
||||
throw std::invalid_argument("Deck does not contain SCHEDULE section.\n");
|
||||
Schedule::Schedule(DeckConstPtr deck) {
|
||||
initFromDeck(deck);
|
||||
}
|
||||
|
||||
void Schedule::initFromDeck(DeckConstPtr deck) {
|
||||
@ -58,10 +55,9 @@ namespace Opm {
|
||||
|
||||
void Schedule::iterateScheduleSection(DeckConstPtr deck) {
|
||||
size_t currentStep = 0;
|
||||
SCHEDULESection section(deck);
|
||||
for (auto iter=section.begin(); iter != section.end(); ++iter) {
|
||||
|
||||
DeckKeywordConstPtr keyword = (*iter);
|
||||
for (size_t keywordIdx = 0; keywordIdx < deck->size(); ++keywordIdx) {
|
||||
DeckKeywordConstPtr keyword = deck->getKeyword(keywordIdx);
|
||||
|
||||
if (keyword->name() == "DATES") {
|
||||
handleDATES(keyword);
|
||||
|
@ -85,14 +85,6 @@ static DeckPtr createDeckWithWellsOrdered() {
|
||||
return parser.parseString(input);
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingSCHEDULE_Throws) {
|
||||
DeckPtr deck(new Deck());
|
||||
BOOST_CHECK_THROW(Schedule schedule(deck) , std::invalid_argument);
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) {
|
||||
DeckPtr deck(new Deck());
|
||||
DeckKeywordPtr keyword(new DeckKeyword("SCHEDULE"));
|
||||
|
@ -73,12 +73,12 @@ static DeckPtr createDeck() {
|
||||
"START\n"
|
||||
"8 MAR 1998 /\n"
|
||||
"\n"
|
||||
"PROPS\n"
|
||||
"REGIONS\n"
|
||||
"FLUXNUM\n"
|
||||
"1000*1 /\n"
|
||||
"SATNUM\n"
|
||||
"1000*2 /\n"
|
||||
"SCHEDULE\n"
|
||||
"\n";
|
||||
|
||||
ParserPtr parser(new Parser());
|
||||
@ -100,6 +100,7 @@ static DeckPtr createDeckNoFaults() {
|
||||
"1000*0.25 /\n"
|
||||
"TOPS\n"
|
||||
"1000*0.25 /\n"
|
||||
"PROPS\n"
|
||||
"-- multiply one layer for each face\n"
|
||||
"MULTX\n"
|
||||
" 100*1 100*10 800*1 /\n"
|
||||
@ -113,16 +114,22 @@ static DeckPtr createDeckNoFaults() {
|
||||
" 500*1 100*14 400*1 /\n"
|
||||
"MULTZ-\n"
|
||||
" 600*1 100*15 300*1 /\n"
|
||||
"SCHEDULE\n"
|
||||
"\n";
|
||||
|
||||
ParserPtr parser(new Parser());
|
||||
return parser->parseString(deckData) ;
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(StrictSemantics) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
|
||||
BOOST_CHECK_THROW(EclipseState(deck, /*beStrict=*/true), std::invalid_argument);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreatSchedule) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
ScheduleConstPtr schedule = state.getSchedule();
|
||||
EclipseGridConstPtr eclipseGrid = state.getEclipseGrid();
|
||||
|
||||
@ -133,7 +140,7 @@ BOOST_AUTO_TEST_CASE(CreatSchedule) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(PhasesCorrect) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
|
||||
BOOST_CHECK( state.hasPhase( Phase::PhaseEnum::OIL ));
|
||||
BOOST_CHECK( state.hasPhase( Phase::PhaseEnum::GAS ));
|
||||
@ -143,7 +150,7 @@ BOOST_AUTO_TEST_CASE(PhasesCorrect) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(TitleCorrect) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
|
||||
BOOST_CHECK_EQUAL( state.getTitle(), "The title");
|
||||
}
|
||||
@ -151,7 +158,7 @@ BOOST_AUTO_TEST_CASE(TitleCorrect) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(IntProperties) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
|
||||
BOOST_CHECK_EQUAL( false , state.supportsGridProperty("NONO"));
|
||||
BOOST_CHECK_EQUAL( true , state.supportsGridProperty("SATNUM"));
|
||||
@ -162,7 +169,7 @@ BOOST_AUTO_TEST_CASE(IntProperties) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(PropertiesNotSupportedThrows) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
DeckKeywordConstPtr fluxNUM = deck->getKeyword("FLUXNUM");
|
||||
BOOST_CHECK_EQUAL( false , state.supportsGridProperty("FLUXNUM"));
|
||||
BOOST_CHECK_THROW( state.loadGridPropertyFromDeckKeyword( std::make_shared<const Box>(10,10,10) , fluxNUM ) , std::invalid_argument)
|
||||
@ -171,7 +178,7 @@ BOOST_AUTO_TEST_CASE(PropertiesNotSupportedThrows) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetProperty) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
|
||||
std::shared_ptr<GridProperty<int> > satNUM = state.getIntGridProperty( "SATNUM" );
|
||||
|
||||
@ -185,7 +192,7 @@ BOOST_AUTO_TEST_CASE(GetProperty) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetTransMult) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
std::shared_ptr<const TransMult> transMult = state.getTransMult();
|
||||
|
||||
|
||||
@ -197,7 +204,7 @@ BOOST_AUTO_TEST_CASE(GetTransMult) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetFaults) {
|
||||
DeckPtr deck = createDeck();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
std::shared_ptr<const FaultCollection> faults = state.getFaults();
|
||||
|
||||
BOOST_CHECK( faults->hasFault("F1") );
|
||||
@ -218,7 +225,7 @@ BOOST_AUTO_TEST_CASE(GetFaults) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(FaceTransMults) {
|
||||
DeckPtr deck = createDeckNoFaults();
|
||||
EclipseState state(deck);
|
||||
EclipseState state(deck, /*beStrict=*/false);
|
||||
std::shared_ptr<const TransMult> transMult = state.getTransMult();
|
||||
|
||||
for (int i = 0; i < 10; ++ i) {
|
||||
|
8
testdata/integration_tests/BOX/BOXTEST1
vendored
8
testdata/integration_tests/BOX/BOXTEST1
vendored
@ -44,6 +44,8 @@ The title
|
||||
START
|
||||
8 MAR 1998 /
|
||||
|
||||
PROPS
|
||||
|
||||
REGIONS
|
||||
|
||||
FLUXNUM
|
||||
@ -189,11 +191,7 @@ ADD
|
||||
EQLNUM 9 /
|
||||
/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SOLUTION
|
||||
|
||||
SCHEDULE
|
||||
|
||||
|
4
testdata/integration_tests/BOX/BOXTEST2
vendored
4
testdata/integration_tests/BOX/BOXTEST2
vendored
@ -28,6 +28,8 @@ The title
|
||||
START
|
||||
8 MAR 1998 /
|
||||
|
||||
PROPS
|
||||
|
||||
REGIONS
|
||||
|
||||
FLUXNUM
|
||||
@ -49,5 +51,7 @@ COPY
|
||||
|
||||
ENDBOX
|
||||
|
||||
SOLUTION
|
||||
|
||||
SCHEDULE
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user