From 30304a5f8a4b64728e812326acc3b31b4f198bf5 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Thu, 2 Feb 2017 08:46:05 +0100 Subject: [PATCH] #1157 - pre-proto - Updating how the eclipseCase is handled for transmissibility calculation. Should now avoid segfault when calculating transmissibilities for well path fractures. --- ...edSimWellFractureWellCompletionFeature.cpp | 13 +++++++++-- ...rtSimWellFractureWellCompletionFeature.cpp | 16 ++++++++++++-- ...tWellPathFractureWellCompletionFeature.cpp | 17 +++++++++++--- .../FileInterface/RifEclipseExportTools.cpp | 7 +++--- .../FileInterface/RifEclipseExportTools.h | 13 +++++------ .../ProjectDataModel/RimFracture.cpp | 22 ++++--------------- .../ProjectDataModel/RimFracture.h | 3 ++- .../RimFractureExportSettings.cpp | 21 ++++++++++++++++-- .../RimFractureExportSettings.h | 11 +++++++--- 9 files changed, 82 insertions(+), 41 deletions(-) diff --git a/ApplicationCode/Commands/RicExportSelectedSimWellFractureWellCompletionFeature.cpp b/ApplicationCode/Commands/RicExportSelectedSimWellFractureWellCompletionFeature.cpp index 49f1c7f133..4ce1dc8a5c 100644 --- a/ApplicationCode/Commands/RicExportSelectedSimWellFractureWellCompletionFeature.cpp +++ b/ApplicationCode/Commands/RicExportSelectedSimWellFractureWellCompletionFeature.cpp @@ -42,6 +42,7 @@ #include #include #include +#include CAF_CMD_SOURCE_INIT(RicExportSelectedSimWellFractureWellCompletionFeature, "RicExportSelectedSimWellFractureWellCompletionFeature"); @@ -87,13 +88,21 @@ void RicExportSelectedSimWellFractureWellCompletionFeature::onActionTriggered(bo projectFolder = eclipseWiew->eclipseCase()->locationOnDisc(); } - QString outputFileName = projectFolder + "/Fractures"; + QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder); + + QString outputFileName = defaultDir + "/Fractures"; exportSettings.fileName = outputFileName; + RimEclipseCase* caseToApply; + objHandle->firstAncestorOrThisOfType(caseToApply); + exportSettings.caseToApply = caseToApply; + caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); if (propertyDialog.exec() == QDialog::Accepted) { - bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures); + RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath()); + + bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply); if (!isOk) { diff --git a/ApplicationCode/Commands/RicExportSimWellFractureWellCompletionFeature.cpp b/ApplicationCode/Commands/RicExportSimWellFractureWellCompletionFeature.cpp index ec0f7639cf..23cbabb2d0 100644 --- a/ApplicationCode/Commands/RicExportSimWellFractureWellCompletionFeature.cpp +++ b/ApplicationCode/Commands/RicExportSimWellFractureWellCompletionFeature.cpp @@ -41,6 +41,7 @@ #include #include #include +#include CAF_CMD_SOURCE_INIT(RicExportSimWellFractureWellCompletionFeature, "RicExportSimWellFractureWellCompletionFeature"); @@ -73,13 +74,24 @@ void RicExportSimWellFractureWellCompletionFeature::onActionTriggered(bool isChe projectFolder = eclipseWiew->eclipseCase()->locationOnDisc(); } - QString outputFileName = projectFolder + "/Fractures"; + QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder); + + + QString outputFileName = defaultDir + "/Fractures"; exportSettings.fileName = outputFileName; + RimEclipseCase* caseToApply; + objHandle->firstAncestorOrThisOfType(caseToApply); + exportSettings.caseToApply = caseToApply; + caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); + propertyDialog.resize(QSize(400, 200)); + if (propertyDialog.exec() == QDialog::Accepted) { - bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures); + RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath()); + + bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply); if (!isOk) { diff --git a/ApplicationCode/Commands/RicExportWellPathFractureWellCompletionFeature.cpp b/ApplicationCode/Commands/RicExportWellPathFractureWellCompletionFeature.cpp index eb500fbfd4..1cda08bf60 100644 --- a/ApplicationCode/Commands/RicExportWellPathFractureWellCompletionFeature.cpp +++ b/ApplicationCode/Commands/RicExportWellPathFractureWellCompletionFeature.cpp @@ -41,6 +41,7 @@ #include #include #include +#include CAF_CMD_SOURCE_INIT(RicExportWellPathFractureWellCompletionFeature, "RicExportWellPathFractureWellCompletionFeature"); @@ -65,6 +66,13 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh RiaApplication* app = RiaApplication::instance(); QString projectFolder = app->currentProjectPath(); + + RimView* view = app->activeReservoirView(); + objHandle = dynamic_cast(view); + if (!objHandle) return; + RimEclipseCase* caseToApply; + objHandle->firstAncestorOrThisOfType(caseToApply); + exportSettings.caseToApply = caseToApply; if (projectFolder.isEmpty()) { @@ -74,14 +82,18 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh if (!activeRiv) return; projectFolder = activeRiv->eclipseCase()->locationOnDisc(); } + + QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder); - QString outputFileName = projectFolder + "/Fractures"; + QString outputFileName = defaultDir + "/Fractures"; exportSettings.fileName = outputFileName; caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); if (propertyDialog.exec() == QDialog::Accepted) { - bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures); + RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath()); + + bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply); if (!isOk) { @@ -89,7 +101,6 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh } } - } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp index 6fb881a912..29132d39c0 100644 --- a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp +++ b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp @@ -23,6 +23,7 @@ #include "RigFracture.h" #include "RigMainGrid.h" +#include "RimEclipseCase.h" #include "RimEclipseResultDefinition.h" #include "RimEclipseView.h" #include "RimEclipseWell.h" @@ -58,7 +59,7 @@ RifEclipseExportTools::~RifEclipseExportTools() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, const std::vector< RimFracture*>& fractures) +bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, const std::vector< RimFracture*>& fractures, RimEclipseCase* caseToApply) { RiaApplication* app = RiaApplication::instance(); RimView* activeView = RiaApplication::instance()->activeReservoirView(); @@ -94,7 +95,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c for (RimFracture* fracture : fractures) { - fracture->computeTransmissibility(); + fracture->computeTransmissibility(caseToApply); std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); for (RigFractureData fracData : fracDataVector) @@ -108,7 +109,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c out << "COMPDAT" << "\n" << right << qSetFieldWidth(8); for (RimFracture* fracture : fractures) { - fracture->computeTransmissibility(); + fracture->computeTransmissibility(caseToApply); std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); for (RigFractureData fracData : fracDataVector) diff --git a/ApplicationCode/FileInterface/RifEclipseExportTools.h b/ApplicationCode/FileInterface/RifEclipseExportTools.h index a1c11f8328..96057a026c 100644 --- a/ApplicationCode/FileInterface/RifEclipseExportTools.h +++ b/ApplicationCode/FileInterface/RifEclipseExportTools.h @@ -28,16 +28,15 @@ #include -class RimFracture; class QFile; class QTextStream; -class RimWellPath; +class RigFractureData; +class RigMainGrid; +class RimEclipseCase; class RimEclipseWell; class RimFracture; -class RigMainGrid; -class RigFractureData; - - +class RimFracture; +class RimWellPath; //================================================================================================== // @@ -50,7 +49,7 @@ public: RifEclipseExportTools(); virtual ~RifEclipseExportTools(); - static bool writeFracturesToTextFile(const QString& fileName, const std::vector& fractures); + static bool writeFracturesToTextFile(const QString& fileName, const std::vector& fractures, RimEclipseCase* caseToApply); static void printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); diff --git a/ApplicationCode/ProjectDataModel/RimFracture.cpp b/ApplicationCode/ProjectDataModel/RimFracture.cpp index 11832ea257..40ec8df242 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimFracture.cpp @@ -261,21 +261,12 @@ cvf::Mat4f RimFracture::transformMatrix() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimFracture::computeTransmissibility() +void RimFracture::computeTransmissibility(RimEclipseCase* caseToApply) { - RiaApplication* app = RiaApplication::instance(); - RimView* activeView = RiaApplication::instance()->activeReservoirView(); - RimEclipseView* activeRiv = dynamic_cast(activeView); + RigEclipseCaseData* eclipseCaseData = caseToApply->reservoirData(); - caf::PdmObjectHandle* objHandle = dynamic_cast(this); - if (!objHandle) return; - RimEclipseCase* eclipseCase; - objHandle->firstAncestorOrThisOfType(eclipseCase); - RigEclipseCaseData* eclipseCaseData = eclipseCase->reservoirData(); - RimEclipseCellColors* resultColors = activeRiv->cellResult(); - - RimReservoirCellResultsStorage* gridCellResults = resultColors->currentGridCellResults(); - RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultColors->porosityModel()); + RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS; + RimReservoirCellResultsStorage* gridCellResults = caseToApply->results(porosityModel); size_t scalarSetIndex; scalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DX"); @@ -304,11 +295,6 @@ void RimFracture::computeTransmissibility() for (size_t fracCell : fracCells) { - //TODO: Remove - only for simplifying debugging... - const RigMainGrid* mainGrid = activeRiv->mainGrid(); - size_t i, j, k; - mainGrid->ijkFromCellIndex(fracCell, &i, &j, &k); - bool cellIsActive = activeCellInfo->isActive(fracCell); double permX = dataAccessObjectPermX->cellScalarGlobIdx(fracCell); diff --git a/ApplicationCode/ProjectDataModel/RimFracture.h b/ApplicationCode/ProjectDataModel/RimFracture.h index 200d0cc409..982df7fc1e 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/RimFracture.h @@ -36,6 +36,7 @@ class RigFracture; class RimEllipseFractureTemplate; class RivWellFracturePartMgr; +class RimEclipseCase; //================================================================================================== /// @@ -74,7 +75,7 @@ public: std::vector getPotentiallyFracturedCells(); - void computeTransmissibility(); + void computeTransmissibility(RimEclipseCase* caseToApply); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual caf::PdmFieldHandle* userDescriptionField() override; diff --git a/ApplicationCode/ProjectDataModel/RimFractureExportSettings.cpp b/ApplicationCode/ProjectDataModel/RimFractureExportSettings.cpp index 55762d4a81..a1fb0a11f9 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureExportSettings.cpp +++ b/ApplicationCode/ProjectDataModel/RimFractureExportSettings.cpp @@ -19,6 +19,9 @@ #include "RimFractureExportSettings.h" #include "cafPdmUiFilePathEditor.h" +#include "cafPdmPtrField.h" +#include "RimEclipseCase.h" +#include "RimTools.h" CAF_PDM_SOURCE_INIT(RimFractureExportSettings, "RimFractureExportSettings"); @@ -32,9 +35,23 @@ RimFractureExportSettings::RimFractureExportSettings() CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", ""); fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); -// CAF_PDM_InitFieldNoDefault(&eclipseKeyword, "EclipseKeyword", "Eclipse Keyword", "", "", ""); -// CAF_PDM_InitField(&undefinedValue, "UndefinedValue", 0.0, "Undefined value", "", "", ""); + CAF_PDM_InitFieldNoDefault(&caseToApply, "CaseToApply", "Case to apply", "", "", ""); + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimFractureExportSettings::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) +{ + QList options; + + if (fieldNeedingOptions == &caseToApply) + { + RimTools::caseOptionItems(&options); + } + return options; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimFractureExportSettings.h b/ApplicationCode/ProjectDataModel/RimFractureExportSettings.h index 3411e128a8..c2adcbdc22 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureExportSettings.h +++ b/ApplicationCode/ProjectDataModel/RimFractureExportSettings.h @@ -20,8 +20,12 @@ #include "cafPdmField.h" #include "cafPdmObject.h" +#include "cafPdmPtrField.h" +#include "cafPdmUiItem.h" +class RimEclipseCase; + //================================================================================================== /// /// @@ -32,9 +36,10 @@ class RimFractureExportSettings : public caf::PdmObject public: RimFractureExportSettings(); - caf::PdmField fileName; -// caf::PdmField eclipseKeyword; -// caf::PdmField undefinedValue; + caf::PdmField fileName; + caf::PdmPtrField caseToApply; + + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; protected: virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);