Changes in Tabdims construction:

1. Removed Tabdims(int,int,int, ....) constructor and added
    Tabdims(Deck) constructor.

 2. Added Tabdims member to Runspec( ) object.

 3. Changed std_shared_ptr<Tabdims> to Tabdims member in TableManager.
This commit is contained in:
Joakim Hove
2016-11-17 16:15:18 +01:00
parent b13ec43635
commit 5ebddba40e
9 changed files with 126 additions and 98 deletions

View File

@@ -77,7 +77,7 @@ namespace Opm {
enum class limit { min, max };
static std::vector< double > findMinWaterSaturation( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -98,7 +98,7 @@ namespace Opm {
}
static std::vector< double > findMaxWaterSaturation( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -119,7 +119,7 @@ namespace Opm {
}
static std::vector< double > findMinGasSaturation( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& slgofTables = tm->getSlgofTables();
const auto& sgfnTables = tm->getSgfnTables();
@@ -159,7 +159,7 @@ namespace Opm {
}
static std::vector< double > findMaxGasSaturation( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& slgofTables = tm->getSlgofTables();
const auto& sgfnTables = tm->getSgfnTables();
@@ -227,7 +227,7 @@ namespace Opm {
static std::vector< double > findCriticalWater( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -270,7 +270,7 @@ namespace Opm {
static std::vector< double > findCriticalGas( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgfnTables = tm->getSgfnTables();
const auto& sgofTables = tm->getSgofTables();
const auto& slgofTables = tm->getSlgofTables();
@@ -329,7 +329,7 @@ namespace Opm {
}
static std::vector< double > findCriticalOilWater( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& sof3Tables= tm->getSof3Tables();
@@ -380,7 +380,7 @@ namespace Opm {
static std::vector< double > findCriticalOilGas( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& slgofTables = tm->getSlgofTables();
const auto& sof3Tables = tm->getSof3Tables();
@@ -417,7 +417,7 @@ namespace Opm {
}
static std::vector< double > findMaxKrg( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& sgfnTables = tm->getSgfnTables();
@@ -440,7 +440,7 @@ namespace Opm {
}
static std::vector< double > findKrgr( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& sgfnTables = tm->getSgfnTables();
@@ -463,7 +463,7 @@ namespace Opm {
}
static std::vector< double > findKrwr( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -486,7 +486,7 @@ namespace Opm {
}
static std::vector< double > findKrorw( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& sof3Tables = tm->getSof3Tables();
@@ -520,7 +520,7 @@ namespace Opm {
}
static std::vector< double > findKrorg( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& sof3Tables = tm->getSof3Tables();
@@ -563,7 +563,7 @@ namespace Opm {
* scaled.
*/
static std::vector< double > findMaxPcog( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& sgofTables = tm->getSgofTables();
const auto& sgfnTables = tm->getSgfnTables();
@@ -586,7 +586,7 @@ namespace Opm {
}
static std::vector< double > findMaxPcow( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -609,7 +609,7 @@ namespace Opm {
}
static std::vector< double > findMaxKro( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& sof3Tables = tm->getSof3Tables();
@@ -632,7 +632,7 @@ namespace Opm {
}
static std::vector< double > findMaxKrw( const TableManager* tm ) {
const auto num_tables = tm->getTabdims()->getNumSatTables();
const auto num_tables = tm->getTabdims().getNumSatTables();
const auto& swofTables = tm->getSwofTables();
const auto& swfnTables = tm->getSwfnTables();
@@ -692,7 +692,7 @@ namespace Opm {
const auto& satnum = intGridProperties->getKeyword("SATNUM");
const auto& endnum = intGridProperties->getKeyword("ENDNUM");
int numSatTables = tabdims->getNumSatTables();
int numSatTables = tabdims.getNumSatTables();
satnum.checkLimits( 1 , numSatTables );
@@ -736,7 +736,7 @@ namespace Opm {
const auto& endnum = intGridProperties->getKeyword("ENDNUM");
auto tabdims = tableManager->getTabdims();
const int numSatTables = tabdims->getNumSatTables();
const int numSatTables = tabdims.getNumSatTables();
imbnum.checkLimits( 1 , numSatTables );
// acctually assign the defaults. if the ENPVD keyword was specified in the deck,

View File

@@ -59,16 +59,21 @@ size_t Phases::size() const noexcept {
return this->bits.count();
}
Runspec::Runspec( const Deck& deck ) :
Runspec( Phases{ deck.hasKeyword( "OIL" ),
deck.hasKeyword( "GAS" ),
deck.hasKeyword( "WATER" ) } )
{}
Runspec::Runspec( const Phases& p ) noexcept : active_phases( p ) {}
Runspec::Runspec( const Deck& deck ) :
active_phases( Phases{ deck.hasKeyword( "OIL" ),
deck.hasKeyword( "GAS" ),
deck.hasKeyword( "WATER" ) } ),
m_tabdims( deck )
{}
const Phases& Runspec::phases() const noexcept {
return this->active_phases;
}
const Tabdims& Runspec::tabdims() const noexcept {
return this->m_tabdims;
}
}

View File

@@ -23,6 +23,8 @@
#include <iosfwd>
#include <string>
#include <opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp>
namespace Opm {
class Deck;
@@ -51,12 +53,12 @@ class Phases {
class Runspec {
public:
explicit Runspec( const Deck& );
explicit Runspec( const Phases& ) noexcept;
const Phases& phases() const noexcept;
const Tabdims& tabdims() const noexcept;
private:
Phases active_phases;
Tabdims m_tabdims;
};
}

View File

@@ -26,6 +26,9 @@
*/
#include <opm/parser/eclipse/Parser/ParserKeywords/T.hpp>
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
namespace Opm {
class Tabdims {
@@ -46,13 +49,19 @@ namespace Opm {
{ }
Tabdims(size_t ntsfun, size_t ntpvt, size_t nssfun , size_t nppvt, size_t ntfip , size_t nrpvt) :
m_ntsfun( ntsfun ),
m_ntpvt( ntpvt ),
m_nssfun( nssfun ),
m_nppvt( nppvt ),
m_ntfip( ntfip ),
m_nrpvt( nrpvt ) {}
Tabdims(const Deck& deck) :
Tabdims()
{
if (deck.hasKeyword("TABDIMS")) {
const auto& record = deck.getKeyword( "TABDIMS" , 0 ).getRecord( 0 );
m_ntsfun = record.getItem("NTSFUN").get<int>(0);
m_ntpvt = record.getItem("NTPVT").get<int>(0);
m_nssfun = record.getItem("NSSFUN").get<int>(0);
m_nppvt = record.getItem("NPPVT").get<int>(0);
m_ntfip = record.getItem("NTFIP").get<int>(0);
m_nrpvt = record.getItem("NRPVT").get<int>(0);
}
}
size_t getNumSatTables() const {

View File

@@ -75,6 +75,7 @@ namespace Opm {
TableManager::TableManager( const Deck& deck )
:
m_tabdims( Tabdims(deck)),
hasImptvd (deck.hasKeyword("IMPTVD")),
hasEnptvd (deck.hasKeyword("ENPTVD")),
hasEqlnum (deck.hasKeyword("EQLNUM"))
@@ -90,19 +91,6 @@ namespace Opm {
void TableManager::initDims(const Deck& deck) {
using namespace Opm::ParserKeywords;
if (deck.hasKeyword<TABDIMS>()) {
const auto& keyword = deck.getKeyword<TABDIMS>();
const auto& record = keyword.getRecord(0);
int ntsfun = record.getItem<TABDIMS::NTSFUN>().get< int >(0);
int ntpvt = record.getItem<TABDIMS::NTPVT>().get< int >(0);
int nssfun = record.getItem<TABDIMS::NSSFUN>().get< int >(0);
int nppvt = record.getItem<TABDIMS::NPPVT>().get< int >(0);
int ntfip = record.getItem<TABDIMS::NTFIP>().get< int >(0);
int nrpvt = record.getItem<TABDIMS::NRPVT>().get< int >(0);
m_tabdims = std::make_shared<Tabdims>(ntsfun , ntpvt , nssfun , nppvt , ntfip , nrpvt);
} else
m_tabdims = std::make_shared<Tabdims>();
if (deck.hasKeyword<EQLDIMS>()) {
const auto& keyword = deck.getKeyword<EQLDIMS>();
@@ -170,29 +158,29 @@ namespace Opm {
}
void TableManager::initSimpleTables(const Deck& deck) {
addTables( "SWOF" , m_tabdims->getNumSatTables() );
addTables( "SGWFN", m_tabdims->getNumSatTables() );
addTables( "SGOF", m_tabdims->getNumSatTables() );
addTables( "SLGOF", m_tabdims->getNumSatTables() );
addTables( "SOF2", m_tabdims->getNumSatTables() );
addTables( "SOF3", m_tabdims->getNumSatTables() );
addTables( "SWFN", m_tabdims->getNumSatTables() );
addTables( "SGFN", m_tabdims->getNumSatTables() );
addTables( "SSFN", m_tabdims->getNumSatTables() );
addTables( "MSFN", m_tabdims->getNumSatTables() );
addTables( "SWOF" , m_tabdims.getNumSatTables() );
addTables( "SGWFN", m_tabdims.getNumSatTables() );
addTables( "SGOF", m_tabdims.getNumSatTables() );
addTables( "SLGOF", m_tabdims.getNumSatTables() );
addTables( "SOF2", m_tabdims.getNumSatTables() );
addTables( "SOF3", m_tabdims.getNumSatTables() );
addTables( "SWFN", m_tabdims.getNumSatTables() );
addTables( "SGFN", m_tabdims.getNumSatTables() );
addTables( "SSFN", m_tabdims.getNumSatTables() );
addTables( "MSFN", m_tabdims.getNumSatTables() );
addTables( "PLYADS", m_tabdims->getNumSatTables() );
addTables( "PLYROCK", m_tabdims->getNumSatTables());
addTables( "PLYVISC", m_tabdims->getNumPVTTables());
addTables( "PLYDHFLF", m_tabdims->getNumPVTTables());
addTables( "PLYADS", m_tabdims.getNumSatTables() );
addTables( "PLYROCK", m_tabdims.getNumSatTables());
addTables( "PLYVISC", m_tabdims.getNumPVTTables());
addTables( "PLYDHFLF", m_tabdims.getNumPVTTables());
addTables( "PVDG", m_tabdims->getNumPVTTables());
addTables( "PVDO", m_tabdims->getNumPVTTables());
addTables( "PVDS", m_tabdims->getNumPVTTables());
addTables( "PVDG", m_tabdims.getNumPVTTables());
addTables( "PVDO", m_tabdims.getNumPVTTables());
addTables( "PVDS", m_tabdims.getNumPVTTables());
addTables( "OILVISCT", m_tabdims->getNumPVTTables());
addTables( "WATVISCT", m_tabdims->getNumPVTTables());
addTables( "GASVISCT", m_tabdims->getNumPVTTables());
addTables( "OILVISCT", m_tabdims.getNumPVTTables());
addTables( "WATVISCT", m_tabdims.getNumPVTTables());
addTables( "GASVISCT", m_tabdims.getNumPVTTables());
addTables( "PLYMAX", m_regdims->getNPLMIX());
addTables( "RSVD", m_eqldims->getNumEquilRegions());
@@ -237,16 +225,16 @@ namespace Opm {
addTables( "ROCKTAB", numRocktabTables);
}
initSimpleTableContainer<SwofTable>(deck, "SWOF" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SgwfnTable>(deck, "SGWFN", m_tabdims->getNumSatTables());
initSimpleTableContainer<SgofTable>(deck, "SGOF" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SlgofTable>(deck, "SLGOF" , m_tabdims->getNumSatTables());
initSimpleTableContainer<Sof2Table>(deck, "SOF2" , m_tabdims->getNumSatTables());
initSimpleTableContainer<Sof3Table>(deck, "SOF3" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SwfnTable>(deck, "SWFN" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SgfnTable>(deck, "SGFN" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SsfnTable>(deck, "SSFN" , m_tabdims->getNumSatTables());
initSimpleTableContainer<MsfnTable>(deck, "MSFN" , m_tabdims->getNumSatTables());
initSimpleTableContainer<SwofTable>(deck, "SWOF" , m_tabdims.getNumSatTables());
initSimpleTableContainer<SgwfnTable>(deck, "SGWFN", m_tabdims.getNumSatTables());
initSimpleTableContainer<SgofTable>(deck, "SGOF" , m_tabdims.getNumSatTables());
initSimpleTableContainer<SlgofTable>(deck, "SLGOF" , m_tabdims.getNumSatTables());
initSimpleTableContainer<Sof2Table>(deck, "SOF2" , m_tabdims.getNumSatTables());
initSimpleTableContainer<Sof3Table>(deck, "SOF3" , m_tabdims.getNumSatTables());
initSimpleTableContainer<SwfnTable>(deck, "SWFN" , m_tabdims.getNumSatTables());
initSimpleTableContainer<SgfnTable>(deck, "SGFN" , m_tabdims.getNumSatTables());
initSimpleTableContainer<SsfnTable>(deck, "SSFN" , m_tabdims.getNumSatTables());
initSimpleTableContainer<MsfnTable>(deck, "MSFN" , m_tabdims.getNumSatTables());
initSimpleTableContainer<RsvdTable>(deck, "RSVD" , m_eqldims->getNumEquilRegions());
@@ -281,15 +269,15 @@ namespace Opm {
}
initSimpleTableContainer<PvdgTable>(deck, "PVDG", m_tabdims->getNumPVTTables());
initSimpleTableContainer<PvdoTable>(deck, "PVDO", m_tabdims->getNumPVTTables());
initSimpleTableContainer<PvdsTable>(deck, "PVDS", m_tabdims->getNumPVTTables());
initSimpleTableContainer<OilvisctTable>(deck, "OILVISCT", m_tabdims->getNumPVTTables());
initSimpleTableContainer<WatvisctTable>(deck, "WATVISCT", m_tabdims->getNumPVTTables());
initSimpleTableContainer<PvdgTable>(deck, "PVDG", m_tabdims.getNumPVTTables());
initSimpleTableContainer<PvdoTable>(deck, "PVDO", m_tabdims.getNumPVTTables());
initSimpleTableContainer<PvdsTable>(deck, "PVDS", m_tabdims.getNumPVTTables());
initSimpleTableContainer<OilvisctTable>(deck, "OILVISCT", m_tabdims.getNumPVTTables());
initSimpleTableContainer<WatvisctTable>(deck, "WATVISCT", m_tabdims.getNumPVTTables());
initSimpleTableContainer<PlyadsTable>(deck, "PLYADS", m_tabdims->getNumSatTables());
initSimpleTableContainer<PlyviscTable>(deck, "PLYVISC", m_tabdims->getNumPVTTables());
initSimpleTableContainer<PlydhflfTable>(deck, "PLYDHFLF", m_tabdims->getNumPVTTables());
initSimpleTableContainer<PlyadsTable>(deck, "PLYADS", m_tabdims.getNumSatTables());
initSimpleTableContainer<PlyviscTable>(deck, "PLYVISC", m_tabdims.getNumPVTTables());
initSimpleTableContainer<PlydhflfTable>(deck, "PLYDHFLF", m_tabdims.getNumPVTTables());
initPlyrockTables(deck);
initPlymaxTables(deck);
initGasvisctTables(deck);
@@ -316,7 +304,7 @@ namespace Opm {
void TableManager::initGasvisctTables(const Deck& deck) {
const std::string keywordName = "GASVISCT";
size_t numTables = m_tabdims->getNumPVTTables();
size_t numTables = m_tabdims.getNumPVTTables();
if (!deck.hasKeyword(keywordName))
return; // the table is not featured by the deck...
@@ -351,7 +339,7 @@ namespace Opm {
complainAboutAmbiguousKeyword(deck, keywordName);
return;
}
size_t numTables = m_tabdims->getNumPVTTables();
size_t numTables = m_tabdims.getNumPVTTables();
auto& container = forceGetTables(keywordName , numTables);
const auto& tableKeyword = deck.getKeyword(keywordName);
@@ -373,7 +361,7 @@ namespace Opm {
void TableManager::initPlyrockTables(const Deck& deck) {
size_t numTables = m_tabdims->getNumSatTables();
size_t numTables = m_tabdims.getNumSatTables();
const std::string keywordName = "PLYROCK";
if (!deck.hasKeyword(keywordName)) {
return;
@@ -505,7 +493,7 @@ namespace Opm {
}
}
std::shared_ptr<const Tabdims> TableManager::getTabdims() const {
const Tabdims& TableManager::getTabdims() const {
return m_tabdims;
}

View File

@@ -38,6 +38,7 @@
#include <opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/VFPInjTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/VFPProdTable.hpp>
@@ -46,7 +47,6 @@
namespace Opm {
class Tabdims;
class Eqldims;
class Regdims;
@@ -59,7 +59,7 @@ namespace Opm {
bool hasTables( const std::string& tableName ) const;
std::shared_ptr<const Tabdims> getTabdims() const;
const Tabdims& getTabdims() const;
const TableContainer& getSwofTables() const;
const TableContainer& getSgwfnTables() const;
@@ -230,8 +230,8 @@ namespace Opm {
std::vector<PvtgTable> m_pvtgTables;
std::vector<PvtoTable> m_pvtoTables;
Tabdims m_tabdims;
std::shared_ptr<Regdims> m_regdims;
std::shared_ptr<Tabdims> m_tabdims;
std::shared_ptr<Eqldims> m_eqldims;
const bool hasImptvd;// if deck has keyword IMPTVD

View File

@@ -22,9 +22,7 @@
#include <opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp>
BOOST_AUTO_TEST_CASE(TEST_CREATE) {
Opm::Tabdims tabdims1(1,2,3,4,5,6);
Opm::Tabdims tabdims2;
Opm::Tabdims tabdims;
BOOST_CHECK_EQUAL( tabdims1.getNumSatNodes() , 3U );
BOOST_CHECK_EQUAL( tabdims2.getNumSatNodes() , 20U );
BOOST_CHECK_EQUAL( tabdims.getNumSatNodes() , 20U );
}

View File

@@ -96,7 +96,7 @@ BOOST_AUTO_TEST_CASE( CreateTables ) {
auto deck = createSingleRecordDeck();
Opm::TableManager tables(deck);
auto tabdims = tables.getTabdims();
BOOST_CHECK_EQUAL( tabdims->getNumSatTables() , 2 );
BOOST_CHECK_EQUAL( tabdims.getNumSatTables() , 2 );
BOOST_CHECK( !tables.useImptvd() );
BOOST_CHECK( !tables.useEnptvd() );
}
@@ -105,7 +105,7 @@ BOOST_AUTO_TEST_CASE( CreateTablesWithVd ) {
auto deck = createSingleRecordDeckWithVd();
Opm::TableManager tables(deck);
auto tabdims = tables.getTabdims();
BOOST_CHECK_EQUAL( tabdims->getNumSatTables() , 2 );
BOOST_CHECK_EQUAL( tabdims.getNumSatTables() , 2 );
BOOST_CHECK( tables.useImptvd() );
BOOST_CHECK( tables.useEnptvd() );
}

View File

@@ -81,3 +81,29 @@ BOOST_AUTO_TEST_CASE(ThreePhase) {
}
BOOST_AUTO_TEST_CASE(TABDIMS) {
const std::string input = R"(
RUNSPEC
TABDIMS
1 * 3 * 5 * /
OIL
GAS
WATER
)";
Parser parser;
ParseContext parseContext;
auto deck = parser.parseString(input, parseContext);
Runspec runspec( deck );
const auto& tabdims = runspec.tabdims();
BOOST_CHECK_EQUAL( tabdims.getNumSatTables( ) , 1 );
BOOST_CHECK_EQUAL( tabdims.getNumPVTTables( ) , 1 );
BOOST_CHECK_EQUAL( tabdims.getNumSatNodes( ) , 3 );
BOOST_CHECK_EQUAL( tabdims.getNumPressureNodes( ) , 20 );
BOOST_CHECK_EQUAL( tabdims.getNumFIPRegions( ) , 5 );
BOOST_CHECK_EQUAL( tabdims.getNumRSNodes( ) , 20 );
}