mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge pull request #4989 from OPM/import-ascii-data-to-simulation-case
Import ascii data to simulation case
This commit is contained in:
@@ -886,6 +886,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
|
||||
}
|
||||
else if ( dynamic_cast<RimEclipseCase*>( uiItem ) )
|
||||
{
|
||||
menuBuilder << "RicAddEclipseInputPropertyFeature";
|
||||
menuBuilder << "RicReloadCaseFeature";
|
||||
createExecuteScriptForCasesFeatureMenu( menuBuilder );
|
||||
menuBuilder << "RicCloseSourSimDataFeature";
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "RimEclipseCellColors.h"
|
||||
#include "RimEclipseContourMapView.h"
|
||||
#include "RimEclipseContourMapViewCollection.h"
|
||||
#include "RimEclipseInputPropertyCollection.h"
|
||||
#include "RimEclipsePropertyFilter.h"
|
||||
#include "RimEclipsePropertyFilterCollection.h"
|
||||
#include "RimEclipseStatisticsCase.h"
|
||||
@@ -95,6 +96,10 @@ RimEclipseCase::RimEclipseCase()
|
||||
m_contourMapCollection = new RimEclipseContourMapViewCollection;
|
||||
m_contourMapCollection.uiCapability()->setUiTreeHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_inputPropertyCollection, "InputPropertyCollection", "", "", "", "" );
|
||||
m_inputPropertyCollection = new RimEclipseInputPropertyCollection;
|
||||
m_inputPropertyCollection->parentField()->uiCapability()->setUiHidden( true );
|
||||
|
||||
// Obsolete fields
|
||||
CAF_PDM_InitFieldNoDefault( &m_filesContainingFaults_OBSOLETE, "FilesContainingFaults", "", "", "", "" );
|
||||
RiaFieldhandleTools::disableWriteAndSetFieldHidden( &m_filesContainingFaults_OBSOLETE );
|
||||
@@ -124,6 +129,7 @@ RimEclipseCase::~RimEclipseCase()
|
||||
|
||||
delete m_matrixModelResults();
|
||||
delete m_fractureModelResults();
|
||||
delete m_inputPropertyCollection;
|
||||
|
||||
RimProject* project = RiaApplication::instance()->project();
|
||||
if ( project )
|
||||
@@ -544,6 +550,11 @@ void RimEclipseCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin
|
||||
uiTreeOrdering.add( &m_contourMapCollection );
|
||||
}
|
||||
|
||||
if ( !m_inputPropertyCollection->inputProperties.empty() )
|
||||
{
|
||||
uiTreeOrdering.add( &m_inputPropertyCollection );
|
||||
}
|
||||
|
||||
uiTreeOrdering.skipRemainingChildren( true );
|
||||
}
|
||||
|
||||
@@ -602,6 +613,14 @@ RimEclipseContourMapViewCollection* RimEclipseCase::contourMapCollection()
|
||||
return m_contourMapCollection;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEclipseInputPropertyCollection* RimEclipseCase::inputPropertyCollection()
|
||||
{
|
||||
return m_inputPropertyCollection();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -983,3 +1002,11 @@ std::vector<QDateTime> RimEclipseCase::timeStepDates() const
|
||||
}
|
||||
return std::vector<QDateTime>();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimEclipseCase::importAsciiInputProperties( const QStringList& fileNames )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -37,17 +37,18 @@
|
||||
|
||||
class QString;
|
||||
|
||||
class RigEclipseCaseData;
|
||||
class RigCaseCellResultsData;
|
||||
class RigEclipseCaseData;
|
||||
class RigGridBase;
|
||||
class RigMainGrid;
|
||||
class RigVirtualPerforationTransmissibilities;
|
||||
class RimCaseCollection;
|
||||
class RimIdenticalGridCaseGroup;
|
||||
class RimReservoirCellResultsStorage;
|
||||
class RimEclipseContourMapView;
|
||||
class RimEclipseContourMapViewCollection;
|
||||
class RimEclipseInputPropertyCollection;
|
||||
class RimEclipseView;
|
||||
class RigVirtualPerforationTransmissibilities;
|
||||
class RimIdenticalGridCaseGroup;
|
||||
class RimReservoirCellResultsStorage;
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
@@ -71,6 +72,7 @@ public:
|
||||
bool ensureReservoirCaseIsOpen();
|
||||
bool openReserviorCase();
|
||||
virtual bool openEclipseGridFile() = 0;
|
||||
virtual bool importAsciiInputProperties( const QStringList& fileNames );
|
||||
|
||||
RigEclipseCaseData* eclipseCaseData();
|
||||
const RigEclipseCaseData* eclipseCaseData() const;
|
||||
@@ -101,6 +103,7 @@ public:
|
||||
|
||||
RimCaseCollection* parentCaseCollection();
|
||||
RimEclipseContourMapViewCollection* contourMapCollection();
|
||||
RimEclipseInputPropertyCollection* inputPropertyCollection();
|
||||
|
||||
QStringList timeStepStrings() const override;
|
||||
QString timeStepName( int frameIdx ) const override;
|
||||
@@ -137,8 +140,9 @@ private:
|
||||
std::vector<Rim3dView*> allSpecialViews() const override;
|
||||
|
||||
protected:
|
||||
caf::PdmField<bool> m_flipXAxis;
|
||||
caf::PdmField<bool> m_flipYAxis;
|
||||
caf::PdmField<bool> m_flipXAxis;
|
||||
caf::PdmField<bool> m_flipYAxis;
|
||||
caf::PdmChildField<RimEclipseInputPropertyCollection*> m_inputPropertyCollection;
|
||||
|
||||
private:
|
||||
caf::PdmField<QString> m_filesContainingFaultsSemColSeparated;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "RiaPreferences.h"
|
||||
|
||||
#include "RifEclipseInputFileTools.h"
|
||||
#include "RifEclipseInputPropertyLoader.h"
|
||||
#include "RifReaderEclipseInput.h"
|
||||
#include "RifReaderInterface.h"
|
||||
#include "RifReaderMockModel.h"
|
||||
@@ -41,7 +42,6 @@
|
||||
#include "RimReservoirCellResultsStorage.h"
|
||||
#include "RimTools.h"
|
||||
|
||||
#include "cafPdmUiTreeOrdering.h"
|
||||
#include "cafProgressInfo.h"
|
||||
|
||||
#include <QDir>
|
||||
@@ -58,10 +58,6 @@ RimEclipseInputCase::RimEclipseInputCase()
|
||||
CAF_PDM_InitField( &m_gridFileName, "GridFileName", QString(), "Case File Name", "", "", "" );
|
||||
m_gridFileName.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_inputPropertyCollection, "InputPropertyCollection", "", "", "", "" );
|
||||
m_inputPropertyCollection = new RimEclipseInputPropertyCollection;
|
||||
m_inputPropertyCollection->parentField()->uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_additionalFiles, "AdditionalFileNamesProxy", "Additional Files", "", "", "" );
|
||||
m_additionalFiles.registerGetMethod( this, &RimEclipseInputCase::additionalFiles );
|
||||
m_additionalFiles.uiCapability()->setUiReadOnly( true );
|
||||
@@ -75,9 +71,15 @@ RimEclipseInputCase::RimEclipseInputCase()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEclipseInputCase::~RimEclipseInputCase()
|
||||
RimEclipseInputCase::~RimEclipseInputCase() {}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Import ascii properties. If no grid data has been read, it will first find the possible
|
||||
/// grid data among the files then read all supported properties from the files matching the grid
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimEclipseInputCase::importAsciiInputProperties( const QStringList& fileNames )
|
||||
{
|
||||
delete m_inputPropertyCollection;
|
||||
return openDataFileSet( fileNames );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -171,33 +173,10 @@ bool RimEclipseInputCase::openDataFileSet( const QStringList& fileNames )
|
||||
}
|
||||
}
|
||||
|
||||
for ( const QString& propertyFileName : filesToRead )
|
||||
{
|
||||
std::map<QString, QString> readProperties = RifEclipseInputFileTools::readProperties( propertyFileName,
|
||||
this->eclipseCaseData() );
|
||||
|
||||
std::map<QString, QString>::iterator it;
|
||||
for ( it = readProperties.begin(); it != readProperties.end(); ++it )
|
||||
{
|
||||
RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty;
|
||||
inputProperty->resultName = it->first;
|
||||
inputProperty->eclipseKeyword = it->second;
|
||||
inputProperty->fileName = propertyFileName;
|
||||
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
|
||||
m_inputPropertyCollection->inputProperties.push_back( inputProperty );
|
||||
}
|
||||
|
||||
if ( importFaults )
|
||||
{
|
||||
cvf::Collection<RigFault> faultCollection;
|
||||
RifEclipseInputFileTools::parseAndReadFaults( propertyFileName, &faultCollection );
|
||||
|
||||
if ( !faultCollection.empty() )
|
||||
{
|
||||
this->eclipseCaseData()->mainGrid()->setFaults( faultCollection );
|
||||
}
|
||||
}
|
||||
}
|
||||
RifEclipseInputPropertyLoader::readInputPropertiesFromFiles( m_inputPropertyCollection,
|
||||
this->eclipseCaseData(),
|
||||
importFaults,
|
||||
filesToRead );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -261,7 +240,6 @@ void RimEclipseInputCase::reloadEclipseGridFile()
|
||||
openReserviorCase();
|
||||
}
|
||||
|
||||
#define for_all( stdVector, indexName ) for ( size_t indexName = 0; indexName < stdVector.size(); ++indexName )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Loads input property data from the gridFile and additional files
|
||||
/// Creates new InputProperties if necessary, and flags the unused ones as obsolete
|
||||
@@ -282,101 +260,9 @@ void RimEclipseInputCase::loadAndSyncronizeInputProperties()
|
||||
}
|
||||
filenames.push_back( m_gridFileName );
|
||||
|
||||
size_t inputPropCount = this->m_inputPropertyCollection()->inputProperties.size();
|
||||
|
||||
caf::ProgressInfo progInfo( static_cast<int>( filenames.size() * inputPropCount ), "Reading Input properties" );
|
||||
|
||||
for_all( filenames, i )
|
||||
{
|
||||
int progress = static_cast<int>( i * inputPropCount );
|
||||
// Find all the keywords present on the file
|
||||
|
||||
progInfo.setProgressDescription( filenames[i] );
|
||||
|
||||
QFileInfo fileNameInfo( filenames[i] );
|
||||
bool isExistingFile = fileNameInfo.exists();
|
||||
|
||||
std::set<QString> fileKeywordSet;
|
||||
|
||||
if ( isExistingFile )
|
||||
{
|
||||
std::vector<RifKeywordAndFilePos> fileKeywords;
|
||||
RifEclipseInputFileTools::findKeywordsOnFile( filenames[i], &fileKeywords );
|
||||
|
||||
for_all( fileKeywords, fkIt ) fileKeywordSet.insert( fileKeywords[fkIt].keyword );
|
||||
}
|
||||
|
||||
// Find the input property objects referring to the file
|
||||
|
||||
std::vector<RimEclipseInputProperty*> ipsUsingThisFile = this->m_inputPropertyCollection()->findInputProperties(
|
||||
filenames[i] );
|
||||
|
||||
// Read property data for each inputProperty
|
||||
|
||||
for_all( ipsUsingThisFile, ipIdx )
|
||||
{
|
||||
if ( !isExistingFile )
|
||||
{
|
||||
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::FILE_MISSING;
|
||||
}
|
||||
else
|
||||
{
|
||||
QString kw = ipsUsingThisFile[ipIdx]->eclipseKeyword();
|
||||
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::KEYWORD_NOT_IN_FILE;
|
||||
if ( fileKeywordSet.count( kw ) )
|
||||
{
|
||||
if ( RifEclipseInputFileTools::readProperty( filenames[i],
|
||||
this->eclipseCaseData(),
|
||||
kw,
|
||||
ipsUsingThisFile[ipIdx]->resultName ) )
|
||||
{
|
||||
ipsUsingThisFile[ipIdx]->resolvedState = RimEclipseInputProperty::RESOLVED;
|
||||
}
|
||||
}
|
||||
fileKeywordSet.erase( kw );
|
||||
}
|
||||
|
||||
progInfo.setProgress( static_cast<int>( progress + ipIdx ) );
|
||||
}
|
||||
|
||||
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
|
||||
// Check if there are more known property keywords left on file. If it is, read them and create inputProperty objects
|
||||
|
||||
for ( const QString& fileKeyword : fileKeywordSet )
|
||||
{
|
||||
{
|
||||
QString resultName =
|
||||
this->eclipseCaseData()->results( RiaDefines::MATRIX_MODEL )->makeResultNameUnique( fileKeyword );
|
||||
if ( RifEclipseInputFileTools::readProperty( filenames[i], this->eclipseCaseData(), fileKeyword, resultName ) )
|
||||
{
|
||||
RimEclipseInputProperty* inputProperty = new RimEclipseInputProperty;
|
||||
inputProperty->resultName = resultName;
|
||||
inputProperty->eclipseKeyword = fileKeyword;
|
||||
inputProperty->fileName = filenames[i];
|
||||
inputProperty->resolvedState = RimEclipseInputProperty::RESOLVED;
|
||||
m_inputPropertyCollection->inputProperties.push_back( inputProperty );
|
||||
}
|
||||
}
|
||||
|
||||
progInfo.setProgress( static_cast<int>( progress + inputPropCount ) );
|
||||
}
|
||||
}
|
||||
|
||||
for_all( m_inputPropertyCollection->inputProperties, i )
|
||||
{
|
||||
if ( m_inputPropertyCollection->inputProperties[i]->resolvedState() == RimEclipseInputProperty::UNKNOWN )
|
||||
{
|
||||
m_inputPropertyCollection->inputProperties[i]->resolvedState = RimEclipseInputProperty::FILE_MISSING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEclipseInputPropertyCollection* RimEclipseInputCase::inputPropertyCollection()
|
||||
{
|
||||
return m_inputPropertyCollection();
|
||||
RifEclipseInputPropertyLoader::loadAndSyncronizeInputProperties( inputPropertyCollection(),
|
||||
eclipseCaseData(),
|
||||
filenames );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -441,16 +327,6 @@ void RimEclipseInputCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde
|
||||
group->add( &m_flipYAxis );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseInputCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/ )
|
||||
{
|
||||
uiTreeOrdering.add( &m_inputPropertyCollection );
|
||||
|
||||
RimEclipseCase::defineUiTreeOrdering( uiTreeOrdering, uiConfigName );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -46,10 +46,9 @@ public:
|
||||
|
||||
// File open methods
|
||||
bool openDataFileSet( const QStringList& fileNames );
|
||||
bool importAsciiInputProperties( const QStringList& fileNames ) override;
|
||||
void loadAndSyncronizeInputProperties();
|
||||
|
||||
RimEclipseInputPropertyCollection* inputPropertyCollection();
|
||||
|
||||
// RimCase overrides
|
||||
bool openEclipseGridFile() override;
|
||||
void reloadEclipseGridFile() override;
|
||||
@@ -70,16 +69,14 @@ private:
|
||||
|
||||
protected:
|
||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
|
||||
|
||||
private:
|
||||
cvf::ref<RifReaderInterface> createMockModel( QString modelName );
|
||||
|
||||
private:
|
||||
// Fields
|
||||
caf::PdmChildField<RimEclipseInputPropertyCollection*> m_inputPropertyCollection;
|
||||
caf::PdmField<QString> m_gridFileName;
|
||||
caf::PdmProxyValueField<std::vector<QString>> m_additionalFiles;
|
||||
caf::PdmField<QString> m_gridFileName;
|
||||
caf::PdmProxyValueField<std::vector<QString>> m_additionalFiles;
|
||||
|
||||
// Obsolete fields
|
||||
caf::PdmField<std::vector<QString>> m_additionalFilenames_OBSOLETE;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#include "RicfCommandObject.h"
|
||||
|
||||
#include "RifEclipseInputPropertyLoader.h"
|
||||
#include "RifEclipseOutputFileTools.h"
|
||||
#include "RifReaderEclipseOutput.h"
|
||||
#include "RifReaderEclipseRft.h"
|
||||
@@ -41,6 +42,8 @@
|
||||
|
||||
#include "RimDialogData.h"
|
||||
#include "RimEclipseCellColors.h"
|
||||
#include "RimEclipseInputProperty.h"
|
||||
#include "RimEclipseInputPropertyCollection.h"
|
||||
#include "RimEclipseView.h"
|
||||
#include "RimFlowDiagSolution.h"
|
||||
#include "RimMockModelSettings.h"
|
||||
@@ -239,6 +242,18 @@ bool RimEclipseResultCase::importGridAndResultMetaData( bool showTimeStepFilter
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimEclipseResultCase::importAsciiInputProperties( const QStringList& fileNames )
|
||||
{
|
||||
bool importFaults = false;
|
||||
return RifEclipseInputPropertyLoader::readInputPropertiesFromFiles( m_inputPropertyCollection,
|
||||
this->eclipseCaseData(),
|
||||
importFaults,
|
||||
fileNames.toVector().toStdVector() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -26,11 +26,13 @@
|
||||
|
||||
#include <cafPdmProxyValueField.h>
|
||||
|
||||
class RifReaderInterface;
|
||||
class RigMainGrid;
|
||||
class RimFlowDiagSolution;
|
||||
class RigFlowDiagSolverInterface;
|
||||
class RifReaderEclipseRft;
|
||||
class RifReaderInterface;
|
||||
class RigFlowDiagSolverInterface;
|
||||
class RigMainGrid;
|
||||
class RimEclipseInputProperty;
|
||||
class RimEclipseInputPropertyCollection;
|
||||
class RimFlowDiagSolution;
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
@@ -53,6 +55,7 @@ public:
|
||||
bool openEclipseGridFile() override;
|
||||
|
||||
bool importGridAndResultMetaData( bool showTimeStepFilter );
|
||||
bool importAsciiInputProperties( const QStringList& fileNames );
|
||||
|
||||
void reloadEclipseGridFile() override;
|
||||
bool openAndReadActiveCellData( RigEclipseCaseData* mainEclipseCase );
|
||||
|
||||
Reference in New Issue
Block a user