#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 ""; 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: public:
static QString locate( const QString& modelPath ); 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 ) void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString modelFolderOrFile )
{ {
std::shared_ptr<RigCaseRealizationParameters> parameters;
QString parametersFile = RifCaseRealizationParametersFileLocator::locate( modelFolderOrFile ); QString parametersFile = RifCaseRealizationParametersFileLocator::locate( modelFolderOrFile );
if ( !parametersFile.isEmpty() ) if ( !parametersFile.isEmpty() )
{ {
@@ -51,13 +52,23 @@ void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString
try try
{ {
reader->parse(); reader->parse();
sumCase.setCaseRealizationParameters( reader->parameters() ); parameters = reader->parameters();
} }
catch ( ... ) 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; 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() RigCaseRealizationParameters()
: m_parametersHash( 0 ) : m_parametersHash( 0 )
, m_realizationNumber( -1 )
{ {
} }
@@ -79,10 +80,14 @@ public:
size_t parameterHash( const QString& name ) const; size_t parameterHash( const QString& name ) const;
size_t parametersHash(); size_t parametersHash();
int realizationNumber() const;
void setRealizationNumber( int realization );
void clearParametersHash(); void clearParametersHash();
void calculateParametersHash( const std::set<QString>& paramNames = std::set<QString>() ); void calculateParametersHash( const std::set<QString>& paramNames = std::set<QString>() );
private: private:
std::map<QString, Value> m_parameters; std::map<QString, Value> m_parameters;
size_t m_parametersHash; size_t m_parametersHash;
int m_realizationNumber;
}; };

View File

@@ -62,3 +62,16 @@ TEST( RifCaseRealizationParametersReaderTest, SuccessfulParsing )
EXPECT_TRUE( false ); 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 );
}