static bool isSectionDelimiter( const DeckKeyword& keyword ) { const auto& name = keyword.name(); for( const auto& x : { "RUNSPEC", "GRID", "EDIT", "PROPS", "REGIONS", "SOLUTION", "SUMMARY", "SCHEDULE" } ) if( name == x ) return true; return false; }
bool DeckView::hasKeyword( const DeckKeyword& keyword ) const { auto key = this->keywordMap.find( keyword.name() ); if( key == this->keywordMap.end() ) return false; for( auto index : key->second ) if( &this->getKeyword( index ) == &keyword ) return true; return false; }
void TimeMap::addFromDATESKeyword( const DeckKeyword& DATESKeyword ) { if (DATESKeyword.name() != "DATES") throw std::invalid_argument("Method requires DATES keyword input."); for (size_t recordIndex = 0; recordIndex < DATESKeyword.size(); recordIndex++) { const auto& record = DATESKeyword.getRecord( recordIndex ); boost::posix_time::ptime nextTime = TimeMap::timeFromEclipse( record ); addTime( nextTime ); } }
void checkOptions(const DeckKeyword& keyword, std::multimap<std::string , PartiallySupported<T> >& map, const ParseContext& parseContext, ErrorGuard& errorGuard) { // check for partially supported keywords. typename std::multimap<std::string, PartiallySupported<T> >::iterator it, itlow, itup; itlow = map.lower_bound(keyword.name()); itup = map.upper_bound(keyword.name()); for (it = itlow; it != itup; ++it) { const auto& record = keyword.getRecord(0); if (record.getItem(it->second.item).template get<T>(0) != it->second.item_value) { std::string msg = "For keyword '" + it->first + "' only value " + boost::lexical_cast<std::string>(it->second.item_value) + " in item " + it->second.item + " is supported by flow.\n" + "In file " + keyword.getFileName() + ", line " + std::to_string(keyword.getLineNumber()) + "\n"; parseContext.handleError(ParseContext::SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED, msg, errorGuard); } } }
void TimeMap::addFromTSTEPKeyword( const DeckKeyword& TSTEPKeyword ) { if (TSTEPKeyword.name() != "TSTEP") throw std::invalid_argument("Method requires TSTEP keyword input."); { const auto& item = TSTEPKeyword.getRecord( 0 ).getItem( 0 ); for (size_t itemIndex = 0; itemIndex < item.size(); itemIndex++) { double days = item.get< double >( itemIndex ); long int wholeSeconds = static_cast<long int>(days * 24*60*60); long int milliSeconds = static_cast<long int>((days * 24*60*60 - wholeSeconds)*1000); boost::posix_time::time_duration step = boost::posix_time::seconds(wholeSeconds) + boost::posix_time::milliseconds(milliSeconds); addTStep( step ); } } }
bool DeckKeyword::equal(const DeckKeyword& other, bool cmp_default, bool cmp_numeric) const { if (this->name() != other.name()) return false; return this->equal_data(other, cmp_default, cmp_numeric); }
void PvtxTable::init( const DeckKeyword& keyword, size_t tableIdx) { auto ranges = recordRanges( keyword ); if (tableIdx >= ranges.size()) throw std::invalid_argument("Asked for table: " + std::to_string( tableIdx ) + " in keyword + " + keyword.name() + " which only has " + std::to_string( ranges.size() ) + " tables"); { auto range = ranges[ tableIdx ]; for (size_t rowIdx = range.first; rowIdx < range.second; rowIdx++) { const auto& deckRecord = keyword.getRecord(rowIdx); m_outerColumn.addValue( deckRecord.getItem( 0 ).getSIDouble( 0 )); const auto& dataItem = deckRecord.getItem(1); std::shared_ptr<SimpleTable> underSaturatedTable = std::make_shared<SimpleTable>(m_underSaturatedSchema , dataItem); m_underSaturatedTables.push_back( underSaturatedTable ); } m_saturatedTable = std::make_shared<SimpleTable>(m_saturatedSchema); for (size_t sat_index = 0; sat_index < size(); sat_index++) { const auto& underSaturatedTable = getUnderSaturatedTable( sat_index ); std::vector<double> row(4); row[0] = m_outerColumn[sat_index]; for (size_t col_index = 0; col_index < m_underSaturatedSchema->size(); col_index++) row[col_index + 1] = underSaturatedTable.get( col_index , 0 ); m_saturatedTable->addRow( row ); } } }