Change contourmap default name and menu entry

Look for formation names in multiple locations
Skip realizations with missing formation names, if used
This commit is contained in:
jonjenssen authored and jonjenssen committed 2025-03-24 07:53:27 +01:00
1 parent c5ef75e368
commit 41af091511
8 files changed
+72 -34

No files matched your search

@@ -128,8 +128,8 @@ RimEclipseCaseEnsemble* RicCreateGridCaseEnsemblesFromFilesFeature::importSingle
rimResultCase->setCaseInfo( caseName, caseFileName );
eclipseCaseEnsemble->addCase( rimResultCase );
auto folderName = RimFormationTools::formationFolderFromCaseFileName( caseFileName );
RimFormationNames* formations = RimFormationTools::loadFormationNamesFromFolder( folderName );
auto folderNames = RimFormationTools::formationFoldersFromCaseFileName( caseFileName );
RimFormationNames* formations = RimFormationTools::loadFormationNamesFromFolder( folderNames );
if ( formations != nullptr ) rimResultCase->setFormationNames( formations );
}
@@ -39,7 +39,7 @@ void RicNewStatisticsContourMapFeature::addStatisticsContourMap( RimEclipseCaseE
std::vector<RimEclipseCase*> cases = eclipseCaseEnsemble->cases();
if ( cases.empty() ) return;
RimStatisticsContourMap* statisticsContourMap = new RimStatisticsContourMap;
auto statisticsContourMap = new RimStatisticsContourMap();
statisticsContourMap->setEclipseCase( cases[0] );
eclipseCaseEnsemble->addStatisticsContourMap( statisticsContourMap );
eclipseCaseEnsemble->updateConnectedEditors();
@@ -69,8 +69,8 @@ void RicNewStatisticsContourMapFeature::onActionTriggered( bool isChecked )
//--------------------------------------------------------------------------------------------------
void RicNewStatisticsContourMapFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "New Statistics Contour Map" );
actionToSetup->setIcon( QIcon( ":/3DView16x16.png" ) );
actionToSetup->setText( "New Ensemble Contour Map" );
actionToSetup->setIcon( QIcon( ":/Histogram16x16.png" ) );
}
//--------------------------------------------------------------------------------------------------
@@ -82,7 +82,7 @@ void caf::AppEnum<RimStatisticsContourMap::StatisticsType>::setUp()
//--------------------------------------------------------------------------------------------------
RimStatisticsContourMap::RimStatisticsContourMap()
{
CAF_PDM_InitObject( "Statistics Contour Map", ":/Histogram16x16.png" );
CAF_PDM_InitObject( "Ensemble Contour Map", ":/Histogram16x16.png" );
CAF_PDM_InitField( &m_boundingBoxExpPercent,
"BoundingBoxExpPercent",
@@ -376,7 +376,7 @@ QList<caf::PdmOptionItemInfo> RimStatisticsContourMap::calculateValueOptions( co
{
if ( formations->formationNamesData() )
{
for ( auto f : formations->formationNamesData()->formationNames() )
for ( auto& f : formations->formationNamesData()->formationNames() )
{
options.push_back( caf::PdmOptionItemInfo( f, f, false ) );
}
@@ -559,31 +559,53 @@ void RimStatisticsContourMap::computeStatistics()
std::set<int> usedKLayers;
auto formationNames = selectedFormations();
bool formationNamesOk = true;
if ( formationNames.size() > 0 )
{
usedKLayers = eCase->activeFormationNames()->formationNamesData()->findKLayers( formationNames );
if ( auto names = eCase->activeFormationNames() )
{
if ( auto fData = names->formationNamesData() )
{
usedKLayers = fData->findKLayers( formationNames );
}
else
{
formationNamesOk = false;
}
}
else
{
formationNamesOk = false;
}
}
contourMapProjection.generateGridMapping( resultAggregation, {}, usedKLayers, selectedPolygons() );
if ( m_resultDefinition()->hasDynamicResult() )
if ( formationNamesOk )
{
std::vector<std::pair<int, int>> timeSteps = mapLocalToGlobalTimeSteps( eCase->timeStepDates() );
contourMapProjection.generateGridMapping( resultAggregation, {}, usedKLayers, selectedPolygons() );
for ( auto [localTs, globalTs] : timeSteps )
if ( m_resultDefinition()->hasDynamicResult() )
{
std::vector<double> result = contourMapProjection.generateResults( m_resultDefinition()->eclipseResultAddress(),
resultAggregation,
localTs,
floodSettings );
timestep_results[globalTs].push_back( result );
std::vector<std::pair<int, int>> timeSteps = mapLocalToGlobalTimeSteps( eCase->timeStepDates() );
for ( auto [localTs, globalTs] : timeSteps )
{
std::vector<double> result = contourMapProjection.generateResults( m_resultDefinition()->eclipseResultAddress(),
resultAggregation,
localTs,
floodSettings );
timestep_results[globalTs].push_back( result );
}
}
else
{
std::vector<double> result =
contourMapProjection.generateResults( m_resultDefinition()->eclipseResultAddress(), resultAggregation, 0, floodSettings );
timestep_results[0].push_back( result );
}
}
else
{
std::vector<double> result =
contourMapProjection.generateResults( m_resultDefinition()->eclipseResultAddress(), resultAggregation, 0, floodSettings );
timestep_results[0].push_back( result );
RiaLogging::warning( QString( "Formation names are missing for case %1, skipping case." ).arg( eCase->caseUserDescription() ) );
}
}
eCase->setReaderSettings( oldSettings );
@@ -32,32 +32,45 @@
//--------------------------------------------------------------------------------------------------
/// look for formation file two levels up from the egrid file
//--------------------------------------------------------------------------------------------------
QString RimFormationTools::formationFolderFromCaseFileName( const QString caseFileName )
QStringList RimFormationTools::formationFoldersFromCaseFileName( const QString caseFileName )
{
QStringList folders;
QFileInfo fi( caseFileName );
auto formationFolder = QDir( fi.dir().path() + "/../../" );
return formationFolder.absolutePath();
auto rmsFolder = QDir( fi.dir().path() + "/../../rms/output/zone/" );
folders.push_back( rmsFolder.absolutePath() ); // rms folder is 1st pri.
folders.push_back( formationFolder.absolutePath() );
return folders;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFormationNames* RimFormationTools::loadFormationNamesFromFolder( const QString folderName )
RimFormationNames* RimFormationTools::loadFormationNamesFromFolder( const QStringList& folderNames )
{
QStringList filters;
filters << "*.lyr";
QStringList fileList = caf::Utils::getFilesInDirectory( folderName, filters, true /*absolute filename*/ );
QStringList fileList;
for ( auto& folder : folderNames )
{
fileList.append( caf::Utils::getFilesInDirectory( folder, filters, true /*absolute filename*/ ) );
if ( !fileList.isEmpty() ) break;
}
if ( fileList.isEmpty() ) return nullptr;
RimFormationNamesCollection* fomNameColl = new RimFormationNamesCollection();
RimFormationNamesCollection* fomNameColl = new RimFormationNamesCollection();
std::vector<RimFormationNames*> formationNames = fomNameColl->importFiles( fileList );
if ( formationNames.size() > 1 )
{
RiaLogging::warning( QString( "Multiple formation name files found in ensemble folder %1" ).arg( folderName ) );
RiaLogging::warning( QString( "Multiple formation name files found in ensemble folders." ) );
}
return formationNames.back();
return formationNames.front();
}
@@ -18,14 +18,15 @@
#pragma once
#include <QString>
#include <QStringList>
class RimFormationNames;
class RimFormationTools
{
public:
static QString formationFolderFromCaseFileName( const QString caseFileName );
static RimFormationNames* loadFormationNamesFromFolder( const QString folderName );
static QStringList formationFoldersFromCaseFileName( const QString caseFileName );
static RimFormationNames* loadFormationNamesFromFolder( const QStringList& folderNames );
private:
RimFormationTools(){};
@@ -224,7 +224,7 @@ void RimEclipseCaseEnsemble::addWellTargetsGenerator( RimWellTargetCandidatesGen
void RimEclipseCaseEnsemble::addStatisticsContourMap( RimStatisticsContourMap* statisticsContourMap )
{
m_statisticsContourMaps.push_back( statisticsContourMap );
statisticsContourMap->setName( QString( "Statistics Contour Map #%1" ).arg( m_statisticsContourMaps.size() ) );
statisticsContourMap->setName( QString( "Ensemble Contour Map #%1" ).arg( m_statisticsContourMaps.size() ) );
}
//--------------------------------------------------------------------------------------------------
@@ -123,8 +123,8 @@ void RimEclipseResultCase::initAfterRead()
// handle special formations for ensembles
if ( firstAncestorOrThisOfType<RimEclipseCaseEnsemble>() != nullptr )
{
auto folderName = RimFormationTools::formationFolderFromCaseFileName( m_caseFileName().path() );
m_activeFormationNames = RimFormationTools::loadFormationNamesFromFolder( folderName );
auto folderNames = RimFormationTools::formationFoldersFromCaseFileName( m_caseFileName().path() );
m_activeFormationNames = RimFormationTools::loadFormationNamesFromFolder( folderNames );
}
}
@@ -2345,6 +2345,8 @@ void RimEclipseView::setOverridePropertyFilterCollection( RimEclipsePropertyFilt
//--------------------------------------------------------------------------------------------------
void RimEclipseView::calculateCurrentTotalCellVisibility( cvf::UByteArray* totalVisibility, int timeStep )
{
if ( !mainGrid() ) return;
size_t cellCount = mainGrid()->totalCellCount();
totalVisibility->resize( cellCount );