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:
Andreas Lauser 2014-08-25 12:04:29 +02:00
parent 0b01c2d65f
commit b690d9add8
7 changed files with 40 additions and 34 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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"));

View File

@ -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) {

View File

@ -44,6 +44,8 @@ The title
START
8 MAR 1998 /
PROPS
REGIONS
FLUXNUM
@ -189,11 +191,7 @@ ADD
EQLNUM 9 /
/
SOLUTION
SCHEDULE

View File

@ -28,6 +28,8 @@ The title
START
8 MAR 1998 /
PROPS
REGIONS
FLUXNUM
@ -49,5 +51,7 @@ COPY
ENDBOX
SOLUTION
SCHEDULE