Extract utility for loading input properties from file.

This commit is contained in:
Kristian Bendiksen
2019-10-30 11:05:32 +01:00
parent f222f73718
commit ce15aa1b5e
4 changed files with 233 additions and 116 deletions

View File

@@ -25,6 +25,7 @@
#include "RiaPreferences.h"
#include "RifEclipseInputFileTools.h"
#include "RifEclipseInputPropertyLoader.h"
#include "RifReaderEclipseInput.h"
#include "RifReaderInterface.h"
#include "RifReaderMockModel.h"
@@ -171,33 +172,10 @@ bool RimEclipseInputCase::openDataFileSet( const QStringList& fileNames )
}
}
for ( const QString& propertyFileName : filesToRead )
{
std::map<QString, QString> readProperties = RifEclipseInputFileTools::readProperties( propertyFileName,
this->eclipseCaseData() );
std::map<QString, QString>::iterator it;
for ( it = readProperties.begin(); it != readProperties.end(); ++it )
{
RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty;
inputProperty->resultName = it->first;
inputProperty->eclipseKeyword = it->second;
inputProperty->fileName = propertyFileName;
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
m_inputPropertyCollection->inputProperties.push_back( inputProperty );
}
if ( importFaults )
{
cvf::Collection<RigFault> faultCollection;
RifEclipseInputFileTools::parseAndReadFaults( propertyFileName, &faultCollection );
if ( !faultCollection.empty() )
{
this->eclipseCaseData()->mainGrid()->setFaults( faultCollection );
}
}
}
RifEclipseInputPropertyLoader::readInputPropertiesFromFiles( m_inputPropertyCollection,
this->eclipseCaseData(),
importFaults,
filesToRead );
return true;
}
@@ -261,7 +239,6 @@ void RimEclipseInputCase::reloadEclipseGridFile()
openReserviorCase();
}
#define for_all( stdVector, indexName ) for ( size_t indexName = 0; indexName < stdVector.size(); ++indexName )
//--------------------------------------------------------------------------------------------------
/// Loads input property data from the gridFile and additional files
/// Creates new InputProperties if necessary, and flags the unused ones as obsolete
@@ -282,93 +259,9 @@ void RimEclipseInputCase::loadAndSyncronizeInputProperties()
}
filenames.push_back( m_gridFileName );
size_t inputPropCount = this->m_inputPropertyCollection()->inputProperties.size();
caf::ProgressInfo progInfo( static_cast<int>( filenames.size() * inputPropCount ), "Reading Input properties" );
for_all( filenames, i )
{
int progress = static_cast<int>( i * inputPropCount );
// Find all the keywords present on the file
progInfo.setProgressDescription( filenames[i] );
QFileInfo fileNameInfo( filenames[i] );
bool isExistingFile = fileNameInfo.exists();
std::set<QString> fileKeywordSet;
if ( isExistingFile )
{
std::vector<RifKeywordAndFilePos> fileKeywords;
RifEclipseInputFileTools::findKeywordsOnFile( filenames[i], &fileKeywords );
for_all( fileKeywords, fkIt ) fileKeywordSet.insert( fileKeywords[fkIt].keyword );
}
// Find the input property objects referring to the file
std::vector<RimEclipseInputProperty*> ipsUsingThisFile = this->m_inputPropertyCollection()->findInputProperties(
filenames[i] );
// Read property data for each inputProperty
for_all( ipsUsingThisFile, ipIdx )
{
if ( !isExistingFile )
{
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::FILE_MISSING;
}
else
{
QString kw = ipsUsingThisFile[ipIdx]->eclipseKeyword();
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::KEYWORD_NOT_IN_FILE;
if ( fileKeywordSet.count( kw ) )
{
if ( RifEclipseInputFileTools::readProperty( filenames[i],
this->eclipseCaseData(),
kw,
ipsUsingThisFile[ipIdx]->resultName ) )
{
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::RESOLVED;
}
}
fileKeywordSet.erase( kw );
}
progInfo.setProgress( static_cast<int>( progress + ipIdx ) );
}
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
// Check if there are more known property keywords left on file. If it is, read them and create inputProperty objects
for ( const QString& fileKeyword : fileKeywordSet )
{
{
QString resultName =
this->eclipseCaseData()->results( RiaDefines::MATRIX_MODEL )->makeResultNameUnique( fileKeyword );
if ( RifEclipseInputFileTools::readProperty( filenames[i], this->eclipseCaseData(), fileKeyword, resultName ) )
{
RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty;
inputProperty->resultName = resultName;
inputProperty->eclipseKeyword = fileKeyword;
inputProperty->fileName = filenames[i];
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
m_inputPropertyCollection->inputProperties.push_back( inputProperty );
}
}
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
}
}
for_all( m_inputPropertyCollection->inputProperties, i )
{
if ( m_inputPropertyCollection->inputProperties[i]->resolvedState() == RimEclipseInputProperty::UNKNOWN )
{
m_inputPropertyCollection->inputProperties[i]->resolvedState = RimEclipseInputProperty::FILE_MISSING;
}
}
RifEclipseInputPropertyLoader::loadAndSyncronizeInputProperties( inputPropertyCollection(),
eclipseCaseData(),
filenames );
}
//--------------------------------------------------------------------------------------------------