RawKeywordPtr Parser::createRawKeyword(const DeckConstPtr deck, const std::string& filename , size_t lineNR , const std::string& keywordString, bool strictParsing) const { if (hasKeyword(keywordString)) { ParserKeywordConstPtr parserKeyword = m_parserKeywords.find(keywordString)->second; ParserKeywordActionEnum action = parserKeyword->getAction(); if (action == THROW_EXCEPTION) throw std::invalid_argument("Parsing terminated by fatal keyword: " + keywordString); if (parserKeyword->getSizeType() == SLASH_TERMINATED) return RawKeywordPtr(new RawKeyword(keywordString , filename , lineNR)); else { size_t targetSize; if (parserKeyword->hasFixedSize()) targetSize = parserKeyword->getFixedSize(); else { const std::pair<std::string, std::string> sizeKeyword = parserKeyword->getSizeDefinitionPair(); DeckKeywordConstPtr sizeDefinitionKeyword = deck->getKeyword(sizeKeyword.first); DeckItemConstPtr sizeDefinitionItem; { DeckRecordConstPtr record = sizeDefinitionKeyword->getRecord(0); sizeDefinitionItem = record->getItem(sizeKeyword.second); } targetSize = sizeDefinitionItem->getInt(0); } return RawKeywordPtr(new RawKeyword(keywordString, filename , lineNR , targetSize , parserKeyword->isTableCollection())); } } else { if (strictParsing) { throw std::invalid_argument("Keyword " + keywordString + " not recognized "); } else { return RawKeywordPtr(new RawKeyword(keywordString, filename , lineNR , 0)); } } }
std::pair<std::string , std::vector<CompletionPtr> > Completion::completionsFromCOMPDATRecord( DeckRecordConstPtr compdatRecord ) { std::vector<CompletionPtr> completions; std::string well = compdatRecord->getItem("WELL")->getTrimmedString(0); // We change from eclipse's 1 - n, to a 0 - n-1 solution int I = compdatRecord->getItem("I")->getInt(0) - 1; int J = compdatRecord->getItem("J")->getInt(0) - 1; int K1 = compdatRecord->getItem("K1")->getInt(0) - 1; int K2 = compdatRecord->getItem("K2")->getInt(0) - 1; CompletionStateEnum state = CompletionStateEnumFromString( compdatRecord->getItem("STATE")->getTrimmedString(0) ); { DeckItemConstPtr CFItem = compdatRecord->getItem("CF"); if (CFItem->defaultApplied()) throw std::invalid_argument("The connection factor item can not be defaulted"); } double CF = compdatRecord->getItem("CF")->getSIDouble(0); double diameter = compdatRecord->getItem("DIAMETER")->getSIDouble(0); double skinFactor = compdatRecord->getItem("SKIN")->getRawDouble(0); for (int k = K1; k <= K2; k++) { CompletionPtr completion(new Completion(I , J , k , state , CF, diameter, skinFactor )); completions.push_back( completion ); } return std::pair<std::string , std::vector<CompletionPtr> >( well , completions ); }
void TimeMap::addFromTSTEPKeyword( DeckKeywordConstPtr TSTEPKeyword ) { if (TSTEPKeyword->name() != "TSTEP") throw std::invalid_argument("Method requires TSTEP keyword input."); { DeckRecordConstPtr record = TSTEPKeyword->getRecord( 0 ); DeckItemConstPtr item = record->getItem( 0 ); for (size_t itemIndex = 0; itemIndex < item->size(); itemIndex++) { double days = item->getRawDouble( 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 ); } } }
boost::posix_time::ptime TimeMap::timeFromEclipse(DeckRecordConstPtr dateRecord) { static const std::string errorMsg("The datarecord must consist of the for values " "\"DAY(int), MONTH(string), YEAR(int), TIME(string)\".\n"); if (dateRecord->size() != 4) { throw std::invalid_argument( errorMsg); } DeckItemConstPtr dayItem = dateRecord->getItem( 0 ); DeckItemConstPtr monthItem = dateRecord->getItem( 1 ); DeckItemConstPtr yearItem = dateRecord->getItem( 2 ); DeckItemConstPtr timeItem = dateRecord->getItem( 3 ); try { int day = dayItem->getInt(0); const std::string& month = monthItem->getString(0); int year = yearItem->getInt(0); std::string eclipseTimeString = timeItem->getString(0); return TimeMap::timeFromEclipse(day, month, year, eclipseTimeString); } catch (...) { throw std::invalid_argument( errorMsg ); } }