Changed Deck::getKeywordList:

The method will return an empty vector - instead of throwing, if you ask
for a missing keyword.
This commit is contained in:
Joakim Hove 2015-06-11 23:09:23 +02:00
parent 97a9f25260
commit f8bc617894
4 changed files with 43 additions and 43 deletions

View File

@ -60,16 +60,22 @@ namespace Opm {
DeckKeywordConstPtr Deck::getKeyword(const std::string& keyword, size_t index) const {
const std::vector<DeckKeywordConstPtr>& keywordList = getKeywordList( keyword );
if (index < keywordList.size())
return keywordList[index];
else
throw std::out_of_range("Keyword index is out of range.");
if (hasKeyword(keyword)) {
const std::vector<DeckKeywordConstPtr>& keywordList = getKeywordList( keyword );
if (index < keywordList.size())
return keywordList[index];
else
throw std::out_of_range("Keyword index is out of range.");
} else
throw std::invalid_argument("Keyword not in deck.");
}
DeckKeywordConstPtr Deck::getKeyword(const std::string& keyword) const {
const std::vector<DeckKeywordConstPtr>& keywordList = getKeywordList( keyword );
return keywordList.back();
if (hasKeyword(keyword)) {
const std::vector<DeckKeywordConstPtr>& keywordList = getKeywordList( keyword );
return keywordList.back();
} else
throw std::invalid_argument("Keyword not in deck.");
}
DeckKeywordConstPtr Deck::getKeyword(size_t index) const {
@ -92,7 +98,7 @@ namespace Opm {
const std::vector<DeckKeywordConstPtr>& keywordList = m_keywordMap.find(keyword)->second;
return keywordList;
} else
throw std::invalid_argument("Keyword: " + keyword + " is not found in the container");
return m_emptyList;
}
std::vector<DeckKeywordConstPtr>::const_iterator Deck::begin() const {

View File

@ -76,6 +76,7 @@ namespace Opm {
std::shared_ptr<UnitSystem> m_defaultUnits;
std::shared_ptr<UnitSystem> m_activeUnits;
std::vector<DeckKeywordConstPtr> m_emptyList;
std::vector<DeckKeywordConstPtr> m_keywordList;
std::map<std::string, std::vector<DeckKeywordConstPtr> > m_keywordMap;
std::map<const DeckKeyword *, size_t> m_keywordIndex;

View File

@ -39,6 +39,7 @@ BOOST_AUTO_TEST_CASE(Initialize) {
BOOST_AUTO_TEST_CASE(hasKeyword_empty_returnFalse) {
Deck deck;
BOOST_CHECK_EQUAL(false, deck.hasKeyword("Bjarne"));
BOOST_CHECK_THROW( deck.getKeyword("Bjarne") , std::invalid_argument);
}
BOOST_AUTO_TEST_CASE(addKeyword_singlekeyword_keywordAdded) {
@ -47,14 +48,11 @@ BOOST_AUTO_TEST_CASE(addKeyword_singlekeyword_keywordAdded) {
BOOST_CHECK_NO_THROW(deck.addKeyword(keyword));
}
BOOST_AUTO_TEST_CASE(getKeyword_nosuchkeyword_throws) {
Deck deck;
BOOST_CHECK_THROW(deck.getKeyword("TRULS" , 0), std::invalid_argument);
}
BOOST_AUTO_TEST_CASE(getKeywordList_nosuchkeyword_throws) {
BOOST_AUTO_TEST_CASE(getKeywordList_empty_list) {
Deck deck;
BOOST_CHECK_THROW(deck.getKeywordList("TRULS"), std::invalid_argument);
auto kw_list = deck.getKeywordList("TRULS");
BOOST_CHECK_EQUAL( kw_list.size() , 0 );
}
BOOST_AUTO_TEST_CASE(getKeyword_singlekeyword_keywordreturned) {
@ -146,12 +144,6 @@ BOOST_AUTO_TEST_CASE(getKeyword_outOfRange_throws) {
}
BOOST_AUTO_TEST_CASE(getKeywordList_notFound_throws) {
Deck deck;
DeckKeywordPtr keyword = DeckKeywordPtr(new DeckKeyword("TRULS"));
deck.addKeyword(keyword);
BOOST_CHECK_THROW( deck.getKeywordList("TRULSX") , std::invalid_argument)
}
BOOST_AUTO_TEST_CASE(getKeywordList_OK) {
Deck deck;

View File

@ -16,35 +16,36 @@
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#include "NNC.hpp"
#include <array>
#include <opm/parser/eclipse/EclipseState/Grid/NNC.hpp>
#include <opm/parser/eclipse/Parser/ParserKeywords.hpp>
namespace Opm
{
NNC::NNC(Opm::DeckConstPtr deck, EclipseGridConstPtr eclipseGrid)
{
if (deck->hasKeyword("NNC")) {
const std::vector<DeckKeywordConstPtr>& nncs = deck->getKeywordList("NNC");
for (size_t idx_nnc = 0; idx_nnc<nncs.size(); ++idx_nnc) {
Opm::DeckKeywordConstPtr nnc = nncs[idx_nnc];
size_t numNNC = nnc->size();
for (size_t i = 0; i<numNNC; ++i) {
std::array<size_t, 3> ijk1;
ijk1[0] = static_cast<size_t>(nnc->getRecord(i)->getItem(0)->getInt(0)-1);
ijk1[1] = static_cast<size_t>(nnc->getRecord(i)->getItem(1)->getInt(0)-1);
ijk1[2] = static_cast<size_t>(nnc->getRecord(i)->getItem(2)->getInt(0)-1);
size_t global_index1 = eclipseGrid->getGlobalIndex(ijk1[0],ijk1[1],ijk1[2]);
std::array<size_t, 3> ijk2;
ijk2[0] = static_cast<size_t>(nnc->getRecord(i)->getItem(3)->getInt(0)-1);
ijk2[1] = static_cast<size_t>(nnc->getRecord(i)->getItem(4)->getInt(0)-1);
ijk2[2] = static_cast<size_t>(nnc->getRecord(i)->getItem(5)->getInt(0)-1);
size_t global_index2 = eclipseGrid->getGlobalIndex(ijk2[0],ijk2[1],ijk2[2]);
const double trans = nnc->getRecord(i)->getItem(6)->getSIDouble(0);
addNNC(global_index1,global_index2,trans);
}
const std::vector<DeckKeywordConstPtr>& nncs = deck->getKeywordList<ParserKeywords::NNC>();
for (size_t idx_nnc = 0; idx_nnc<nncs.size(); ++idx_nnc) {
Opm::DeckKeywordConstPtr nnc = nncs[idx_nnc];
size_t numNNC = nnc->size();
for (size_t i = 0; i<numNNC; ++i) {
std::array<size_t, 3> ijk1;
ijk1[0] = static_cast<size_t>(nnc->getRecord(i)->getItem(0)->getInt(0)-1);
ijk1[1] = static_cast<size_t>(nnc->getRecord(i)->getItem(1)->getInt(0)-1);
ijk1[2] = static_cast<size_t>(nnc->getRecord(i)->getItem(2)->getInt(0)-1);
size_t global_index1 = eclipseGrid->getGlobalIndex(ijk1[0],ijk1[1],ijk1[2]);
std::array<size_t, 3> ijk2;
ijk2[0] = static_cast<size_t>(nnc->getRecord(i)->getItem(3)->getInt(0)-1);
ijk2[1] = static_cast<size_t>(nnc->getRecord(i)->getItem(4)->getInt(0)-1);
ijk2[2] = static_cast<size_t>(nnc->getRecord(i)->getItem(5)->getInt(0)-1);
size_t global_index2 = eclipseGrid->getGlobalIndex(ijk2[0],ijk2[1],ijk2[2]);
const double trans = nnc->getRecord(i)->getItem(6)->getSIDouble(0);
addNNC(global_index1,global_index2,trans);
}
}
}