From 3af1d464eb43e65b5834d983840f93c79b3e8dba Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Mon, 13 Jun 2022 12:13:01 +0200 Subject: [PATCH 1/2] changed: avoid duplicating code --- .../EclipseState/Tables/SimpleTable.hpp | 6 ++-- .../EclipseState/Tables/SimpleTable.cpp | 33 ++++--------------- 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/opm/input/eclipse/EclipseState/Tables/SimpleTable.hpp b/opm/input/eclipse/EclipseState/Tables/SimpleTable.hpp index bdb444d87..c9c5c14e6 100644 --- a/opm/input/eclipse/EclipseState/Tables/SimpleTable.hpp +++ b/opm/input/eclipse/EclipseState/Tables/SimpleTable.hpp @@ -42,8 +42,10 @@ namespace Opm { static SimpleTable serializeObject(); void addColumns(); - void init(const DeckItem& deckItem ); - void init( const DeckItem& deckItem, double scaling_factor); + //! \brief Initialize deck item. + //! \param deckItem item to initialize + //! \param scaling_factor If zero use SI value, else use value scaled by scaling factor + void init( const DeckItem& deckItem, double scaling_factor = 0.0); size_t numColumns() const; size_t numRows() const; void addRow( const std::vector& row); diff --git a/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp b/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp index 1f4e77a20..a1922c9ac 100644 --- a/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp +++ b/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp @@ -82,31 +82,6 @@ namespace Opm { return col[row]; } - void SimpleTable::init( const DeckItem& deckItem ) { - this->addColumns(); - - if ( (deckItem.data_size() % numColumns()) != 0) - throw std::runtime_error("Number of columns in the data file is" - "inconsistent with the ones specified"); - - size_t rows = deckItem.data_size() / numColumns(); - for (size_t colIdx = 0; colIdx < numColumns(); ++colIdx) { - auto& column = getColumn( colIdx ); - for (size_t rowIdx = 0; rowIdx < rows; rowIdx++) { - size_t deckItemIdx = rowIdx*numColumns() + colIdx; - if (deckItem.defaultApplied(deckItemIdx)) - column.addDefault( ); - else if (m_jfunc) { - column.addValue( deckItem.getData()[deckItemIdx] ); - } - else - column.addValue( deckItem.getSIDouble(deckItemIdx) ); - } - if (colIdx > 0) - column.applyDefaults(getColumn( 0 )); - } - } - void SimpleTable::init( const DeckItem& deckItem, double scaling_factor) { this->addColumns(); @@ -124,8 +99,12 @@ namespace Opm { else if (m_jfunc) { column.addValue( deckItem.getData()[deckItemIdx] ); } - else - column.addValue( scaling_factor * deckItem.get(deckItemIdx) ); + else { + if (scaling_factor > 0.0) + column.addValue( scaling_factor * deckItem.get(deckItemIdx) ); + else + column.addValue( deckItem.getSIDouble(deckItemIdx) ); + } } if (colIdx > 0) column.applyDefaults(getColumn( 0 )); From 050540525f585c2fef8ff5881fc52746aa498ebc Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Mon, 13 Jun 2022 12:13:50 +0200 Subject: [PATCH 2/2] changed: log keyword location when parsing a table failed --- .../eclipse/EclipseState/Tables/SimpleTable.cpp | 13 ++++++++++--- .../eclipse/EclipseState/Tables/TableManager.cpp | 8 ++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp b/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp index a1922c9ac..5d3b55e2e 100644 --- a/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp +++ b/src/opm/input/eclipse/EclipseState/Tables/SimpleTable.cpp @@ -23,6 +23,8 @@ #include #include +#include + namespace Opm { SimpleTable::SimpleTable( TableSchema schema, const DeckItem& deckItem) : @@ -85,9 +87,14 @@ namespace Opm { void SimpleTable::init( const DeckItem& deckItem, double scaling_factor) { this->addColumns(); - if ( (deckItem.data_size() % numColumns()) != 0) - throw std::runtime_error("Number of columns in the data file is" - "inconsistent with the ones specified"); + if ( (deckItem.data_size() % numColumns()) != 0) { + throw std::runtime_error { + fmt::format("Number of input table elements ({}) is " + "not a multiple of table's specified number " + "of columns ({})", + deckItem.data_size(), this->numColumns()) + }; + } size_t rows = deckItem.data_size() / numColumns(); for (size_t colIdx = 0; colIdx < numColumns(); ++colIdx) { diff --git a/src/opm/input/eclipse/EclipseState/Tables/TableManager.cpp b/src/opm/input/eclipse/EclipseState/Tables/TableManager.cpp index 46e34ed50..069ca1a12 100644 --- a/src/opm/input/eclipse/EclipseState/Tables/TableManager.cpp +++ b/src/opm/input/eclipse/EclipseState/Tables/TableManager.cpp @@ -1562,8 +1562,12 @@ DensityTable make_density_table(const GravityTable& gravity) { for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) { const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem("DATA"); if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared( dataItem, useJFunc() ); - container.addTable( tableIdx , table ); + try { + std::shared_ptr table = std::make_shared( dataItem, useJFunc() ); + container.addTable( tableIdx , table ); + } catch (const std::runtime_error& err) { + throw OpmInputError(err, tableKeyword.location()); + } } } }