#4763 Ensemble Parameters : Add realization number

This commit is contained in:
Magne Sjaastad 2020-03-06 15:00:55 +01:00
parent 66cbc198c4
commit 7c9a09a40c
6 changed files with 76 additions and 1 deletions

View File

@ -276,3 +276,32 @@ QString RifCaseRealizationParametersFileLocator::locate( const QString& modelPat
return "";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RifCaseRealizationParametersFileLocator::realizationNumber( const QString& modelPath )
{
QDir dir( modelPath );
QString absolutePath = dir.absolutePath();
int resultIndex = -1;
// Use parenthesis to indicate capture of sub string
QString pattern = "(realization-\\d+)";
QRegExp regexp( pattern, Qt::CaseInsensitive );
if ( regexp.indexIn( absolutePath ) )
{
QString tempText = regexp.cap( 1 );
QRegExp rx( "(\\d+)" ); // Find number
int digitPos = rx.indexIn( tempText );
if ( digitPos > -1 )
{
resultIndex = rx.cap( 0 ).toInt();
}
}
return resultIndex;
}

View File

@ -95,4 +95,5 @@ class RifCaseRealizationParametersFileLocator
{
public:
static QString locate( const QString& modelPath );
static int realizationNumber( const QString& modelPath );
};

View File

@ -41,6 +41,7 @@ CAF_PDM_SOURCE_INIT( RimSummaryCaseMainCollection, "SummaryCaseCollection" );
//--------------------------------------------------------------------------------------------------
void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString modelFolderOrFile )
{
std::shared_ptr<RigCaseRealizationParameters> parameters;
QString parametersFile = RifCaseRealizationParametersFileLocator::locate( modelFolderOrFile );
if ( !parametersFile.isEmpty() )
{
@ -51,13 +52,23 @@ void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString
try
{
reader->parse();
sumCase.setCaseRealizationParameters( reader->parameters() );
parameters = reader->parameters();
}
catch ( ... )
{
}
}
}
else
{
parameters = std::shared_ptr<RigCaseRealizationParameters>( new RigCaseRealizationParameters() );
}
int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile );
parameters->setRealizationNumber( realizationNumber );
parameters->addParameter( "REALIZATION_NUM", realizationNumber );
sumCase.setCaseRealizationParameters( parameters );
}
//--------------------------------------------------------------------------------------------------

View File

@ -168,6 +168,22 @@ size_t RigCaseRealizationParameters::parametersHash()
return m_parametersHash;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RigCaseRealizationParameters::realizationNumber() const
{
return m_realizationNumber;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigCaseRealizationParameters::setRealizationNumber( int realization )
{
m_realizationNumber = realization;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -66,6 +66,7 @@ public:
RigCaseRealizationParameters()
: m_parametersHash( 0 )
, m_realizationNumber( -1 )
{
}
@ -79,10 +80,14 @@ public:
size_t parameterHash( const QString& name ) const;
size_t parametersHash();
int realizationNumber() const;
void setRealizationNumber( int realization );
void clearParametersHash();
void calculateParametersHash( const std::set<QString>& paramNames = std::set<QString>() );
private:
std::map<QString, Value> m_parameters;
size_t m_parametersHash;
int m_realizationNumber;
};

View File

@ -62,3 +62,16 @@ TEST( RifCaseRealizationParametersReaderTest, SuccessfulParsing )
EXPECT_TRUE( false );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RifCaseRealizationParametersReaderTest, FindRealizationNumber )
{
QString filePath = "d:/gitroot-ceesol/ResInsight-regression-test/ModelData/ensemble_reek_with_params/realization-"
"7/iter-0/eclipse/model/3_R001_REEK-7.SMSPEC";
int realisationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( filePath );
EXPECT_EQ( 7, realisationNumber );
}