#8033 Ensemble Well Log: Allow import from grdecl files

This commit is contained in:
Magne Sjaastad
2021-09-23 14:19:55 +02:00
parent 17c5f473be
commit 33221e7e07
10 changed files with 80 additions and 48 deletions

View File

@@ -233,7 +233,9 @@ void RiaApplication::createMockModelCustomized()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiaApplication::createInputMockModel() void RiaApplication::createInputMockModel()
{ {
RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( QStringList( RiaDefines::mockModelBasicInputCase() ) ); bool createView = true;
RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( QStringList( RiaDefines::mockModelBasicInputCase() ),
createView );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -336,7 +338,10 @@ bool RiaApplication::openFile( const QString& fileName )
} }
else if ( int( fileType ) & int( RiaDefines::ImportFileType::ANY_ECLIPSE_FILE ) ) else if ( int( fileType ) & int( RiaDefines::ImportFileType::ANY_ECLIPSE_FILE ) )
{ {
loadingSucceded = RicImportGeneralDataFeature::openEclipseFilesFromFileNames( QStringList{ fileName }, true ); bool createView = true;
bool createPlot = true;
loadingSucceded =
RicImportGeneralDataFeature::openEclipseFilesFromFileNames( QStringList{ fileName }, createPlot, createView );
lastUsedDialogTag = RiaDefines::defaultDirectoryLabel( fileType ); lastUsedDialogTag = RiaDefines::defaultDirectoryLabel( fileType );
} }

View File

@@ -285,7 +285,9 @@ RiaApplication::ApplicationStatus RiaConsoleApplication::handleArguments( gsl::n
QStringList fileNames = QStringList fileNames =
RicImportGeneralDataFeature::fileNamesFromCaseNames( cvfqt::Utils::toQStringList( o.values() ) ); RicImportGeneralDataFeature::fileNamesFromCaseNames( cvfqt::Utils::toQStringList( o.values() ) );
RicImportGeneralDataFeature::openEclipseFilesFromFileNames( fileNames, true ); bool createView = true;
bool createPlot = true;
RicImportGeneralDataFeature::openEclipseFilesFromFileNames( fileNames, createPlot, createView );
} }
if ( cvf::Option o = progOpt->option( "commandFile" ) ) if ( cvf::Option o = progOpt->option( "commandFile" ) )

View File

@@ -674,8 +674,11 @@ RiaApplication::ApplicationStatus RiaGuiApplication::handleArguments( gsl::not_n
QStringList fileNames = QStringList fileNames =
RicImportGeneralDataFeature::fileNamesFromCaseNames( cvfqt::Utils::toQStringList( o.values() ) ); RicImportGeneralDataFeature::fileNamesFromCaseNames( cvfqt::Utils::toQStringList( o.values() ) );
bool createView = true;
bool createPlot = true;
RicImportGeneralDataFeature::OpenCaseResults results = RicImportGeneralDataFeature::OpenCaseResults results =
RicImportGeneralDataFeature::openEclipseFilesFromFileNames( fileNames, true ); RicImportGeneralDataFeature::openEclipseFilesFromFileNames( fileNames, createPlot, createView );
if ( results && !results.eclipseSummaryFiles.empty() ) if ( results && !results.eclipseSummaryFiles.empty() )
{ {
getOrCreateAndShowMainPlotWindow(); getOrCreateAndShowMainPlotWindow();

View File

@@ -247,8 +247,7 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilter( const QString
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
int RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( const QStringList& fileNames, int RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( const QStringList& fileNames, bool createDefaultView )
QString* fileContainingGrid /*=nullptr*/ )
{ {
RimEclipseInputCase* rimInputReservoir = new RimEclipseInputCase(); RimEclipseInputCase* rimInputReservoir = new RimEclipseInputCase();
@@ -270,24 +269,26 @@ int RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( const QStringL
analysisModels->cases.push_back( rimInputReservoir ); analysisModels->cases.push_back( rimInputReservoir );
RimEclipseView* riv = rimInputReservoir->createAndAddReservoirView(); RimEclipseView* eclipseView = nullptr;
if ( createDefaultView )
riv->cellResult()->setResultType( RiaDefines::ResultCatType::INPUT_PROPERTY );
riv->loadDataAndUpdate();
if ( !riv->cellResult()->hasResult() )
{ {
riv->cellResult()->setResultVariable( RiaResultNames::undefinedResultName() ); eclipseView = rimInputReservoir->createAndAddReservoirView();
eclipseView->cellResult()->setResultType( RiaDefines::ResultCatType::INPUT_PROPERTY );
eclipseView->loadDataAndUpdate();
if ( !eclipseView->cellResult()->hasResult() )
{
eclipseView->cellResult()->setResultVariable( RiaResultNames::undefinedResultName() );
}
} }
analysisModels->updateConnectedEditors(); analysisModels->updateConnectedEditors();
Riu3DMainWindowTools::selectAsCurrentItem( riv->cellResult() ); if ( eclipseView )
if ( fileContainingGrid )
{ {
*fileContainingGrid = rimInputReservoir->gridFileName(); Riu3DMainWindowTools::selectAsCurrentItem( eclipseView->cellResult() );
} }
return rimInputReservoir->caseId(); return rimInputReservoir->caseId();

View File

@@ -40,7 +40,7 @@ public:
static bool openEclipseCaseShowTimeStepFilter( const QString& fileName ); static bool openEclipseCaseShowTimeStepFilter( const QString& fileName );
static int openEclipseInputCaseFromFileNames( const QStringList& fileNames, QString* fileContainingGrid = nullptr ); static int openEclipseInputCaseFromFileNames( const QStringList& fileNames, bool createDefaultView );
static bool openMockModel( const QString& name ); static bool openMockModel( const QString& name );
static bool addEclipseCases( const QStringList& fileNames, RimIdenticalGridCaseGroup** resultingCaseGroup = nullptr ); static bool addEclipseCases( const QStringList& fileNames, RimIdenticalGridCaseGroup** resultingCaseGroup = nullptr );

View File

@@ -59,7 +59,9 @@ void RicImportEclipseCaseFeature::onActionTriggered( bool isChecked )
defaultDir = QFileInfo( fileNames.last() ).absolutePath(); defaultDir = QFileInfo( fileNames.last() ).absolutePath();
app->setLastUsedDialogDirectory( "BINARY_GRID", defaultDir ); app->setLastUsedDialogDirectory( "BINARY_GRID", defaultDir );
openEclipseCaseFromFileNames( fileNames ); bool createDefaultView = false;
std::vector<int> caseIds;
openEclipseCaseFromFileNames( fileNames, createDefaultView, caseIds );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -103,7 +103,8 @@ void RicNewFaultReactAssessmentFeature::onActionTriggered( bool isChecked )
gridList << frapSettings.outputEclipseFilename(); gridList << frapSettings.outputEclipseFilename();
// load the new grid // load the new grid
int caseId = RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( gridList ); bool createView = true;
int caseId = RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( gridList, createView );
if ( caseId < 0 ) if ( caseId < 0 )
{ {
QMessageBox::critical( nullptr, "Fault Reactivation Assessment", "Unable to load generated Eclipse grid." ); QMessageBox::critical( nullptr, "Fault Reactivation Assessment", "Unable to load generated Eclipse grid." );

View File

@@ -27,6 +27,7 @@
#include "RicCloseCaseFeature.h" #include "RicCloseCaseFeature.h"
#include "RicCreateEnsembleWellLogUi.h" #include "RicCreateEnsembleWellLogUi.h"
#include "RicImportEnsembleWellLogsFeature.h" #include "RicImportEnsembleWellLogsFeature.h"
#include "RicImportGeneralDataFeature.h"
#include "RicRecursiveFileSearchDialog.h" #include "RicRecursiveFileSearchDialog.h"
#include "WellPathCommands/RicImportWellPaths.h" #include "WellPathCommands/RicImportWellPaths.h"
@@ -75,7 +76,7 @@ void RicCreateEnsembleWellLogFeature::openDialogAndExecuteCommand()
defaultDir, defaultDir,
pathFilter, pathFilter,
fileNameFilter, fileNameFilter,
QStringList( ".EGRID" ) ); { ".GRDECL", ".EGRID" } );
if ( !result.ok || result.files.isEmpty() ) if ( !result.ok || result.files.isEmpty() )
{ {
@@ -84,12 +85,13 @@ void RicCreateEnsembleWellLogFeature::openDialogAndExecuteCommand()
// Use case data from first case // Use case data from first case
RimEclipseCase* eclipseCase = loadEclipseCase( result.files[0] ); RimEclipseCase* eclipseCase = loadEclipseCase( result.files[0] );
if ( !eclipseCase ) return;
RicCreateEnsembleWellLogUi* ui = RimProject::current()->dialogData()->createEnsembleWellLogUi(); RicCreateEnsembleWellLogUi* ui = RimProject::current()->dialogData()->createEnsembleWellLogUi();
ui->setCaseData( eclipseCase->eclipseCaseData() ); ui->setCaseData( eclipseCase->eclipseCaseData() );
// Automatically selected the well path the dialog was triggered on (if any) // Automatically selected the well path the dialog was triggered on (if any)
RimWellPath* wellPath = caf::SelectionManager::instance()->selectedItemOfType<RimWellPath>(); auto* wellPath = caf::SelectionManager::instance()->selectedItemOfType<RimWellPath>();
if ( wellPath ) if ( wellPath )
{ {
ui->setWellPathSource( RicCreateEnsembleWellLogUi::WellPathSource::PROJECT_WELLS ); ui->setWellPathSource( RicCreateEnsembleWellLogUi::WellPathSource::PROJECT_WELLS );
@@ -244,7 +246,7 @@ void RicCreateEnsembleWellLogFeature::executeCommand( const RicCreateEnsembleWel
QString title = QString( "Track %1" ).arg( wellLogPlot->plotCount() ); QString title = QString( "Track %1" ).arg( wellLogPlot->plotCount() );
RimWellLogTrack* wellLogTrack = RimWellLogTrack* wellLogTrack =
RimcWellLogPlot_newWellLogTrack::createWellLogTrack( wellLogPlot, eclipseCase, wellPath, title ); RimcWellLogPlot_newWellLogTrack::createWellLogTrack( wellLogPlot, eclipseCase, wellPath, title );
RimEnsembleWellLogCurveSet* ensembleWellLogCurveSet = new RimEnsembleWellLogCurveSet(); auto* ensembleWellLogCurveSet = new RimEnsembleWellLogCurveSet();
ensembleWellLogCurveSet->setEnsembleWellLogs( ensembleWellLog ); ensembleWellLogCurveSet->setEnsembleWellLogs( ensembleWellLog );
ensembleWellLogCurveSet->setColor( color ); ensembleWellLogCurveSet->setColor( color );
ensembleWellLogCurveSet->setWellLogChannelName( property.first ); ensembleWellLogCurveSet->setWellLogChannelName( property.first );
@@ -273,17 +275,18 @@ RimEclipseCase* RicCreateEnsembleWellLogFeature::loadEclipseCase( const QString&
QDir startDir( RiaApplication::instance()->startDir() ); QDir startDir( RiaApplication::instance()->startDir() );
absolutePath = startDir.absoluteFilePath( fileName ); absolutePath = startDir.absoluteFilePath( fileName );
} }
bool createView = false;
bool createPlot = false;
auto openResult = RicImportGeneralDataFeature::openEclipseFilesFromFileNames( QStringList( { absolutePath } ),
createPlot,
createView );
RiaImportEclipseCaseTools::FileCaseIdMap fileCaseIdMap; if ( !openResult.createdCaseIds.empty() )
bool createView = false; {
bool doNotShowDialog = true; return RimProject::current()->eclipseCaseFromCaseId( openResult.createdCaseIds.front() );
bool ok = RiaImportEclipseCaseTools::openEclipseCasesFromFile( QStringList( { absolutePath } ), }
createView,
&fileCaseIdMap,
doNotShowDialog );
if ( !ok || fileCaseIdMap.empty() ) return nullptr;
return RimProject::current()->eclipseCaseFromCaseId( fileCaseIdMap.begin()->second ); return nullptr;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -43,7 +43,9 @@ CAF_CMD_SOURCE_INIT( RicImportGeneralDataFeature, "RicImportGeneralDataFeature"
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RicImportGeneralDataFeature::OpenCaseResults RicImportGeneralDataFeature::OpenCaseResults
RicImportGeneralDataFeature::openEclipseFilesFromFileNames( const QStringList& fileNames, bool doCreateDefaultPlot ) RicImportGeneralDataFeature::openEclipseFilesFromFileNames( const QStringList& fileNames,
bool doCreateDefaultPlot,
bool createDefaultView )
{ {
CVF_ASSERT( !fileNames.empty() ); CVF_ASSERT( !fileNames.empty() );
@@ -73,7 +75,7 @@ RicImportGeneralDataFeature::OpenCaseResults
OpenCaseResults results; OpenCaseResults results;
if ( !eclipseCaseFiles.empty() ) if ( !eclipseCaseFiles.empty() )
{ {
if ( !openEclipseCaseFromFileNames( eclipseCaseFiles ) ) if ( !openEclipseCaseFromFileNames( eclipseCaseFiles, createDefaultView, results.createdCaseIds ) )
{ {
return OpenCaseResults(); return OpenCaseResults();
} }
@@ -83,7 +85,7 @@ RicImportGeneralDataFeature::OpenCaseResults
} }
if ( !eclipseInputFiles.empty() ) if ( !eclipseInputFiles.empty() )
{ {
if ( !openInputEclipseCaseFromFileNames( eclipseInputFiles ) ) if ( !openInputEclipseCaseFromFileNames( eclipseInputFiles, createDefaultView, results.createdCaseIds ) )
{ {
return OpenCaseResults(); return OpenCaseResults();
} }
@@ -219,7 +221,7 @@ void RicImportGeneralDataFeature::openFileDialog( ImportFileType fileTypes )
fileNames.front() ); fileNames.front() );
} }
if ( !openEclipseFilesFromFileNames( fileNames, true ) ) if ( !openEclipseFilesFromFileNames( fileNames, true, true ) )
{ {
RiaLogging::error( QString( "Failed to open file names: %1" ).arg( fileNames.join( ", " ) ) ); RiaLogging::error( QString( "Failed to open file names: %1" ).arg( fileNames.join( ", " ) ) );
} }
@@ -228,16 +230,18 @@ void RicImportGeneralDataFeature::openFileDialog( ImportFileType fileTypes )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicImportGeneralDataFeature::openEclipseCaseFromFileNames( const QStringList& fileNames ) bool RicImportGeneralDataFeature::openEclipseCaseFromFileNames( const QStringList& fileNames,
bool createDefaultView,
std::vector<int>& createdCaseIds )
{ {
bool createView = true; bool noDialog = false;
bool noDialog = false;
RiaImportEclipseCaseTools::FileCaseIdMap newCaseFiles; RiaImportEclipseCaseTools::FileCaseIdMap newCaseFiles;
if ( RiaImportEclipseCaseTools::openEclipseCasesFromFile( fileNames, createView, &newCaseFiles, noDialog ) ) if ( RiaImportEclipseCaseTools::openEclipseCasesFromFile( fileNames, createDefaultView, &newCaseFiles, noDialog ) )
{ {
for ( const auto& newCaseFileAndId : newCaseFiles ) for ( const auto& newCaseFileAndId : newCaseFiles )
{ {
RiaApplication::instance()->addToRecentFiles( newCaseFileAndId.first ); RiaApplication::instance()->addToRecentFiles( newCaseFileAndId.first );
createdCaseIds.push_back( newCaseFileAndId.second );
} }
return true; return true;
} }
@@ -247,12 +251,16 @@ bool RicImportGeneralDataFeature::openEclipseCaseFromFileNames( const QStringLis
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicImportGeneralDataFeature::openInputEclipseCaseFromFileNames( const QStringList& fileNames ) bool RicImportGeneralDataFeature::openInputEclipseCaseFromFileNames( const QStringList& fileNames,
bool createDefaultView,
std::vector<int>& createdCaseIds )
{ {
QString fileContainingGrid; QString fileContainingGrid;
if ( RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( fileNames, &fileContainingGrid ) >= 0 ) auto generatedCaseId = RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( fileNames, &fileContainingGrid );
if ( generatedCaseId >= 0 )
{ {
RiaApplication::instance()->addToRecentFiles( fileContainingGrid ); RiaApplication::instance()->addToRecentFiles( fileContainingGrid );
createdCaseIds.push_back( generatedCaseId );
return true; return true;
} }
return false; return false;

View File

@@ -40,15 +40,18 @@ public:
QStringList eclipseInputFiles; QStringList eclipseInputFiles;
QStringList eclipseSummaryFiles; QStringList eclipseSummaryFiles;
std::vector<int> createdCaseIds;
operator bool() const operator bool() const
{ {
return !( eclipseCaseFiles.empty() && eclipseInputFiles.empty() && eclipseSummaryFiles.empty() ); return !( eclipseCaseFiles.empty() && eclipseInputFiles.empty() && eclipseSummaryFiles.empty() );
} }
}; };
static OpenCaseResults openEclipseFilesFromFileNames( const QStringList& fileNames, bool doCreateDefaultPlot ); static OpenCaseResults
static QStringList fileNamesFromCaseNames( const QStringList& caseNames ); openEclipseFilesFromFileNames( const QStringList& fileNames, bool doCreateDefaultPlot, bool createDefaultView );
static QStringList getEclipseFileNamesWithDialog( RiaDefines::ImportFileType fileTypes ); static QStringList fileNamesFromCaseNames( const QStringList& caseNames );
static QStringList getEclipseFileNamesWithDialog( RiaDefines::ImportFileType fileTypes );
protected: protected:
// Overrides // Overrides
@@ -58,7 +61,11 @@ protected:
static void openFileDialog( RiaDefines::ImportFileType fileTypes ); static void openFileDialog( RiaDefines::ImportFileType fileTypes );
static bool openEclipseCaseFromFileNames( const QStringList& fileNames ); static bool openEclipseCaseFromFileNames( const QStringList& fileNames,
static bool openInputEclipseCaseFromFileNames( const QStringList& fileNames ); bool createDefaultView,
std::vector<int>& createdCaseIds );
static bool openInputEclipseCaseFromFileNames( const QStringList& fileNames,
bool createDefaultView,
std::vector<int>& createdCaseIds );
static bool openSummaryCaseFromFileNames( const QStringList& fileNames, bool doCreateDefaultPlot = true ); static bool openSummaryCaseFromFileNames( const QStringList& fileNames, bool doCreateDefaultPlot = true );
}; };