Merge pull request #2469 from atgeirr/optimize-for-large-nnc-case

Optimize further for large NNC case
This commit is contained in:
Joakim Hove 2021-05-11 20:46:35 +02:00 committed by GitHub
commit dc207ae8c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 17 deletions

View File

@ -34,7 +34,7 @@ namespace Opm {
typedef std::vector< DeckItem >::const_iterator const_iterator;
DeckRecord() = default;
DeckRecord( std::vector< DeckItem >&& );
DeckRecord( std::vector< DeckItem >&& items, const bool check_for_duplicate_names = true );
static DeckRecord serializeObject();

View File

@ -31,26 +31,28 @@
namespace Opm {
DeckRecord::DeckRecord( std::vector< DeckItem >&& items ) :
DeckRecord::DeckRecord( std::vector< DeckItem >&& items, const bool check_for_duplicate_names ) :
m_items( std::move( items ) ) {
std::unordered_set< std::string > names;
for( const auto& item : this->m_items )
names.insert( item.name() );
if (check_for_duplicate_names) {
std::unordered_set< std::string > names;
for( const auto& item : this->m_items )
names.insert( item.name() );
if( names.size() == this->m_items.size() )
return;
if( names.size() == this->m_items.size() )
return;
names.clear();
std::string msg = "Duplicate item names in DeckRecord:";
for( const auto& item : this->m_items ) {
if( names.count( item.name() ) != 0 )
msg += std::string( " " ) += item.name();
names.clear();
std::string msg = "Duplicate item names in DeckRecord:";
for( const auto& item : this->m_items ) {
if( names.count( item.name() ) != 0 )
msg += std::string( " " ) += item.name();
names.insert( item.name() );
names.insert( item.name() );
}
throw std::invalid_argument( msg );
}
throw std::invalid_argument( msg );
}
DeckRecord DeckRecord::serializeObject()

View File

@ -123,7 +123,7 @@ namespace {
DeckRecord ParserRecord::parse(const ParseContext& parseContext , ErrorGuard& errors , RawRecord& rawRecord, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem, const KeywordLocation& location) const {
std::vector< DeckItem > items;
items.reserve( this->size() + 20 );
items.reserve( this->size() );
for( const auto& parserItem : *this )
items.emplace_back( parserItem.scan( rawRecord, active_unitsystem, default_unitsystem ) );
@ -134,7 +134,7 @@ namespace {
parseContext.handleError(ParseContext::PARSE_EXTRA_DATA , msg_format, location, errors);
}
return { std::move( items ) };
return { std::move( items ), false };
}
bool ParserRecord::equal(const ParserRecord& other) const {