mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-25 22:50:25 -05:00
#12330 Improve summary stepping
Improves the handling of summary vector names by splitting the name and suffix (e.g., difference or history identifier) into separate components. Make sure the stepping works the same way both for "Step Next" and "Step Next and Add Plot"
This commit is contained in:
1 parent
8739def775
commit
3e0b2e600d
6 files changed
+58
-32
No files matched your search
@@ -138,8 +138,8 @@ std::string RiaSummaryAddressAnalyzer::quantityNameForTitle() const
|
||||
std::set<std::string> quantitiesNoExtension;
|
||||
for ( const auto& quantity : quantities() )
|
||||
{
|
||||
const auto [name, extension] = RifEclipseSummaryTools::vectorNameAndExtension( quantity );
|
||||
quantitiesNoExtension.insert( name );
|
||||
const auto [vectorName, suffix] = RifEclipseSummaryTools::splitVectorNameAndSuffix( quantity );
|
||||
quantitiesNoExtension.insert( vectorName );
|
||||
}
|
||||
if ( quantitiesNoExtension.size() == 1 )
|
||||
{
|
||||
|
||||
@@ -381,21 +381,40 @@ std::vector<time_t> RifEclipseSummaryTools::getTimeSteps( ecl_sum_type* ecl_sum
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::pair<std::string, std::string> RifEclipseSummaryTools::vectorNameAndExtension( const std::string& vectorName )
|
||||
std::pair<std::string, std::string> RifEclipseSummaryTools::splitVectorNameAndSuffix( const std::string& vectorName )
|
||||
{
|
||||
std::string vectorNameToUse = vectorName;
|
||||
std::string extension;
|
||||
std::string suffix;
|
||||
if ( RiaStdStringTools::endsWith( vectorNameToUse, RifEclipseSummaryAddressDefines::differenceIdentifier() ) )
|
||||
{
|
||||
extension = RifEclipseSummaryAddressDefines::differenceIdentifier();
|
||||
suffix = RifEclipseSummaryAddressDefines::differenceIdentifier();
|
||||
vectorNameToUse = vectorNameToUse.substr( 0, vectorNameToUse.size() - RifEclipseSummaryAddressDefines::differenceIdentifier().size() );
|
||||
}
|
||||
else if ( RiaStdStringTools::endsWith( vectorNameToUse, RifEclipseSummaryAddressDefines::historyIdentifier() ) )
|
||||
{
|
||||
extension = RifEclipseSummaryAddressDefines::historyIdentifier();
|
||||
suffix = RifEclipseSummaryAddressDefines::historyIdentifier();
|
||||
vectorNameToUse = vectorNameToUse.substr( 0, vectorNameToUse.size() - RifEclipseSummaryAddressDefines::historyIdentifier().size() );
|
||||
}
|
||||
return { vectorNameToUse, extension };
|
||||
return { vectorNameToUse, suffix };
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<std::string> RifEclipseSummaryTools::nativeVectorNames( const std::vector<std::string>& vectorNames )
|
||||
{
|
||||
std::vector<std::string> nativeNames;
|
||||
|
||||
for ( const auto& s : vectorNames )
|
||||
{
|
||||
const auto [vectorName, suffix] = RifEclipseSummaryTools::splitVectorNameAndSuffix( s );
|
||||
if ( std::find( nativeNames.begin(), nativeNames.end(), vectorName ) == nativeNames.end() )
|
||||
{
|
||||
nativeNames.push_back( vectorName );
|
||||
}
|
||||
}
|
||||
|
||||
return nativeNames;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -78,7 +78,8 @@ public:
|
||||
static RiaDefines::EclipseUnitSystem readUnitSystem( ecl_sum_type* ecl_sum );
|
||||
static std::vector<time_t> getTimeSteps( ecl_sum_type* ecl_sum );
|
||||
|
||||
static std::pair<std::string, std::string> vectorNameAndExtension( const std::string& vectorName );
|
||||
static std::pair<std::string, std::string> splitVectorNameAndSuffix( const std::string& vectorName );
|
||||
static std::vector<std::string> nativeVectorNames( const std::vector<std::string>& vectorNames );
|
||||
|
||||
private:
|
||||
static void findSummaryFiles( const QString& inputFile, QString* headerFile, QStringList* dataFiles );
|
||||
|
||||
@@ -192,10 +192,18 @@ bool RimDataSourceSteppingTools::updateAddressIfMatching( const QVariant&
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimDataSourceSteppingTools::updateQuantityIfMatching( const QVariant& oldValue, const QVariant& newValue, RifEclipseSummaryAddress& adr )
|
||||
bool RimDataSourceSteppingTools::updateQuantityIfMatching( const QVariant& previousName, const QVariant& newName, RifEclipseSummaryAddress& adr )
|
||||
{
|
||||
auto newQString = newValue.toString();
|
||||
return updateQuantityIfMatching( previousName.toString().toStdString(), newName.toString().toStdString(), adr );
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimDataSourceSteppingTools::updateQuantityIfMatching( const std::string& previousName,
|
||||
const std::string& newName,
|
||||
RifEclipseSummaryAddress& adr )
|
||||
{
|
||||
// Calculation ID < 0 means native summary vector
|
||||
int calculationId = -1;
|
||||
|
||||
@@ -205,10 +213,11 @@ bool RimDataSourceSteppingTools::updateQuantityIfMatching( const QVariant& oldVa
|
||||
// Parse the calculations and find ID if text is matching. This can cause issues if a calculation has the same name as a native
|
||||
// summary vector imported from file.
|
||||
|
||||
auto calculations = calculationColl->calculations();
|
||||
const auto qNewName = QString::fromStdString( newName );
|
||||
auto calculations = calculationColl->calculations();
|
||||
for ( auto c : calculations )
|
||||
{
|
||||
if ( c->shortName() == newQString )
|
||||
if ( c->shortName() == qNewName )
|
||||
{
|
||||
calculationId = c->id();
|
||||
break;
|
||||
@@ -216,14 +225,10 @@ bool RimDataSourceSteppingTools::updateQuantityIfMatching( const QVariant& oldVa
|
||||
}
|
||||
}
|
||||
|
||||
std::string newString = newQString.toStdString();
|
||||
std::string oldString = oldValue.toString().toStdString();
|
||||
|
||||
auto [nativeVectorName, extension] = RifEclipseSummaryTools::vectorNameAndExtension( adr.vectorName() );
|
||||
|
||||
if ( nativeVectorName == oldString )
|
||||
auto [vectorName, suffix] = RifEclipseSummaryTools::splitVectorNameAndSuffix( adr.vectorName() );
|
||||
if ( vectorName == previousName )
|
||||
{
|
||||
auto name = newString + extension;
|
||||
auto name = newName + suffix;
|
||||
adr.setVectorName( name );
|
||||
adr.setId( calculationId );
|
||||
|
||||
|
||||
@@ -41,5 +41,6 @@ public:
|
||||
RifEclipseSummaryAddressDefines::SummaryCategory category,
|
||||
RifEclipseSummaryAddress& adr );
|
||||
|
||||
static bool updateQuantityIfMatching( const QVariant& oldValue, const QVariant& newValue, RifEclipseSummaryAddress& adr );
|
||||
static bool updateQuantityIfMatching( const QVariant& previousName, const QVariant& newName, RifEclipseSummaryAddress& adr );
|
||||
static bool updateQuantityIfMatching( const std::string& previousName, const std::string& newName, RifEclipseSummaryAddress& adr );
|
||||
};
|
||||
@@ -1082,9 +1082,13 @@ RifEclipseSummaryAddress RimSummaryPlotSourceStepping::stepAddress( RifEclipseSu
|
||||
ids.push_back( it->second );
|
||||
}
|
||||
|
||||
auto searchString = QString::fromStdString( addr.vectorName() );
|
||||
auto found = getIdIterator( ids, searchString );
|
||||
if ( found != ids.end() ) addr.setVectorName( ( *found ).toStdString() );
|
||||
const auto [vectorName, suffix] = RifEclipseSummaryTools::splitVectorNameAndSuffix( addr.vectorName() );
|
||||
auto found = getIdIterator( ids, QString::fromStdString( vectorName ) );
|
||||
if ( found != ids.end() )
|
||||
{
|
||||
auto fullName = ( *found ).toStdString() + suffix;
|
||||
addr.setVectorName( fullName );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1245,8 +1249,8 @@ std::map<QString, QString> RimSummaryPlotSourceStepping::optionsForQuantity( std
|
||||
auto subset = RiaSummaryAddressAnalyzer::addressesForCategory( addresses, category );
|
||||
quantityAnalyzer.appendAddresses( subset );
|
||||
|
||||
auto quantities = quantityAnalyzer.quantities();
|
||||
for ( const auto& s : quantities )
|
||||
auto nativeVectorNames = RifEclipseSummaryTools::nativeVectorNames( quantityAnalyzer.quantities() );
|
||||
for ( const auto& s : nativeVectorNames )
|
||||
{
|
||||
QString valueString = QString::fromStdString( s );
|
||||
|
||||
@@ -1276,14 +1280,10 @@ std::map<QString, QString> RimSummaryPlotSourceStepping::optionsForQuantity( Ria
|
||||
{
|
||||
auto vectorNames = analyzser->vectorNamesForCategory( category );
|
||||
|
||||
std::set<std::string> vectorNamesNoExtension;
|
||||
for ( const auto& s : vectorNames )
|
||||
{
|
||||
const auto [vectorNameToUse, extension] = RifEclipseSummaryTools::vectorNameAndExtension( s );
|
||||
vectorNamesNoExtension.insert( vectorNameToUse );
|
||||
}
|
||||
std::vector<std::string> setNamesVec( vectorNames.begin(), vectorNames.end() );
|
||||
auto nativeVectorNames = RifEclipseSummaryTools::nativeVectorNames( setNamesVec );
|
||||
|
||||
for ( const auto& s : vectorNamesNoExtension )
|
||||
for ( const auto& s : nativeVectorNames )
|
||||
{
|
||||
QString valueString = QString::fromStdString( s );
|
||||
|
||||
|
||||
Reference in new issue
Block a user