#1157 - pre-proto - Updating how the eclipseCase is handled for transmissibility calculation. Should now avoid segfault when calculating transmissibilities for well path fractures.

This commit is contained in:
astridkbjorke
2017-02-02 08:46:05 +01:00
parent 3e65bcfa88
commit 30304a5f8a
9 changed files with 82 additions and 41 deletions

View File

@@ -42,6 +42,7 @@
#include <QAction> #include <QAction>
#include <QMessageBox> #include <QMessageBox>
#include <QString> #include <QString>
#include <QFileInfo>
CAF_CMD_SOURCE_INIT(RicExportSelectedSimWellFractureWellCompletionFeature, "RicExportSelectedSimWellFractureWellCompletionFeature"); CAF_CMD_SOURCE_INIT(RicExportSelectedSimWellFractureWellCompletionFeature, "RicExportSelectedSimWellFractureWellCompletionFeature");
@@ -87,13 +88,21 @@ void RicExportSelectedSimWellFractureWellCompletionFeature::onActionTriggered(bo
projectFolder = eclipseWiew->eclipseCase()->locationOnDisc(); projectFolder = eclipseWiew->eclipseCase()->locationOnDisc();
} }
QString outputFileName = projectFolder + "/Fractures"; QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
QString outputFileName = defaultDir + "/Fractures";
exportSettings.fileName = outputFileName; exportSettings.fileName = outputFileName;
RimEclipseCase* caseToApply;
objHandle->firstAncestorOrThisOfType(caseToApply);
exportSettings.caseToApply = caseToApply;
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
if (propertyDialog.exec() == QDialog::Accepted) 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) if (!isOk)
{ {

View File

@@ -41,6 +41,7 @@
#include <QAction> #include <QAction>
#include <QMessageBox> #include <QMessageBox>
#include <QString> #include <QString>
#include <QFileInfo>
CAF_CMD_SOURCE_INIT(RicExportSimWellFractureWellCompletionFeature, "RicExportSimWellFractureWellCompletionFeature"); CAF_CMD_SOURCE_INIT(RicExportSimWellFractureWellCompletionFeature, "RicExportSimWellFractureWellCompletionFeature");
@@ -73,13 +74,24 @@ void RicExportSimWellFractureWellCompletionFeature::onActionTriggered(bool isChe
projectFolder = eclipseWiew->eclipseCase()->locationOnDisc(); projectFolder = eclipseWiew->eclipseCase()->locationOnDisc();
} }
QString outputFileName = projectFolder + "/Fractures"; QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
QString outputFileName = defaultDir + "/Fractures";
exportSettings.fileName = outputFileName; exportSettings.fileName = outputFileName;
RimEclipseCase* caseToApply;
objHandle->firstAncestorOrThisOfType(caseToApply);
exportSettings.caseToApply = caseToApply;
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
propertyDialog.resize(QSize(400, 200));
if (propertyDialog.exec() == QDialog::Accepted) 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) if (!isOk)
{ {

View File

@@ -41,6 +41,7 @@
#include <QAction> #include <QAction>
#include <QMessageBox> #include <QMessageBox>
#include <QString> #include <QString>
#include <QFileInfo>
CAF_CMD_SOURCE_INIT(RicExportWellPathFractureWellCompletionFeature, "RicExportWellPathFractureWellCompletionFeature"); CAF_CMD_SOURCE_INIT(RicExportWellPathFractureWellCompletionFeature, "RicExportWellPathFractureWellCompletionFeature");
@@ -66,6 +67,13 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
RiaApplication* app = RiaApplication::instance(); RiaApplication* app = RiaApplication::instance();
QString projectFolder = app->currentProjectPath(); QString projectFolder = app->currentProjectPath();
RimView* view = app->activeReservoirView();
objHandle = dynamic_cast<caf::PdmObjectHandle*>(view);
if (!objHandle) return;
RimEclipseCase* caseToApply;
objHandle->firstAncestorOrThisOfType(caseToApply);
exportSettings.caseToApply = caseToApply;
if (projectFolder.isEmpty()) if (projectFolder.isEmpty())
{ {
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
@@ -75,13 +83,17 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
projectFolder = activeRiv->eclipseCase()->locationOnDisc(); projectFolder = activeRiv->eclipseCase()->locationOnDisc();
} }
QString outputFileName = projectFolder + "/Fractures"; QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
QString outputFileName = defaultDir + "/Fractures";
exportSettings.fileName = outputFileName; exportSettings.fileName = outputFileName;
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", ""); caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
if (propertyDialog.exec() == QDialog::Accepted) 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) if (!isOk)
{ {
@@ -89,7 +101,6 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
} }
} }
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -23,6 +23,7 @@
#include "RigFracture.h" #include "RigFracture.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RimEclipseCase.h"
#include "RimEclipseResultDefinition.h" #include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h" #include "RimEclipseView.h"
#include "RimEclipseWell.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(); RiaApplication* app = RiaApplication::instance();
RimView* activeView = RiaApplication::instance()->activeReservoirView(); RimView* activeView = RiaApplication::instance()->activeReservoirView();
@@ -94,7 +95,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
for (RimFracture* fracture : fractures) for (RimFracture* fracture : fractures)
{ {
fracture->computeTransmissibility(); fracture->computeTransmissibility(caseToApply);
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData(); std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData();
for (RigFractureData fracData : fracDataVector) for (RigFractureData fracData : fracDataVector)
@@ -108,7 +109,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
out << "COMPDAT" << "\n" << right << qSetFieldWidth(8); out << "COMPDAT" << "\n" << right << qSetFieldWidth(8);
for (RimFracture* fracture : fractures) for (RimFracture* fracture : fractures)
{ {
fracture->computeTransmissibility(); fracture->computeTransmissibility(caseToApply);
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData(); std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData();
for (RigFractureData fracData : fracDataVector) for (RigFractureData fracData : fracDataVector)

View File

@@ -28,16 +28,15 @@
#include <QString> #include <QString>
class RimFracture;
class QFile; class QFile;
class QTextStream; class QTextStream;
class RimWellPath; class RigFractureData;
class RigMainGrid;
class RimEclipseCase;
class RimEclipseWell; class RimEclipseWell;
class RimFracture; class RimFracture;
class RigMainGrid; class RimFracture;
class RigFractureData; class RimWellPath;
//================================================================================================== //==================================================================================================
// //
@@ -50,7 +49,7 @@ public:
RifEclipseExportTools(); RifEclipseExportTools();
virtual ~RifEclipseExportTools(); virtual ~RifEclipseExportTools();
static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures); static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures, RimEclipseCase* caseToApply);
static void printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid);

View File

@@ -261,21 +261,12 @@ cvf::Mat4f RimFracture::transformMatrix()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFracture::computeTransmissibility() void RimFracture::computeTransmissibility(RimEclipseCase* caseToApply)
{ {
RiaApplication* app = RiaApplication::instance(); RigEclipseCaseData* eclipseCaseData = caseToApply->reservoirData();
RimView* activeView = RiaApplication::instance()->activeReservoirView();
RimEclipseView* activeRiv = dynamic_cast<RimEclipseView*>(activeView);
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(this); RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS;
if (!objHandle) return; RimReservoirCellResultsStorage* gridCellResults = caseToApply->results(porosityModel);
RimEclipseCase* eclipseCase;
objHandle->firstAncestorOrThisOfType(eclipseCase);
RigEclipseCaseData* eclipseCaseData = eclipseCase->reservoirData();
RimEclipseCellColors* resultColors = activeRiv->cellResult();
RimReservoirCellResultsStorage* gridCellResults = resultColors->currentGridCellResults();
RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultColors->porosityModel());
size_t scalarSetIndex; size_t scalarSetIndex;
scalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DX"); scalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DX");
@@ -304,11 +295,6 @@ void RimFracture::computeTransmissibility()
for (size_t fracCell : fracCells) 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); bool cellIsActive = activeCellInfo->isActive(fracCell);
double permX = dataAccessObjectPermX->cellScalarGlobIdx(fracCell); double permX = dataAccessObjectPermX->cellScalarGlobIdx(fracCell);

View File

@@ -36,6 +36,7 @@
class RigFracture; class RigFracture;
class RimEllipseFractureTemplate; class RimEllipseFractureTemplate;
class RivWellFracturePartMgr; class RivWellFracturePartMgr;
class RimEclipseCase;
//================================================================================================== //==================================================================================================
/// ///
@@ -74,7 +75,7 @@ public:
std::vector<size_t> getPotentiallyFracturedCells(); std::vector<size_t> getPotentiallyFracturedCells();
void computeTransmissibility(); void computeTransmissibility(RimEclipseCase* caseToApply);
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual caf::PdmFieldHandle* userDescriptionField() override; virtual caf::PdmFieldHandle* userDescriptionField() override;

View File

@@ -19,6 +19,9 @@
#include "RimFractureExportSettings.h" #include "RimFractureExportSettings.h"
#include "cafPdmUiFilePathEditor.h" #include "cafPdmUiFilePathEditor.h"
#include "cafPdmPtrField.h"
#include "RimEclipseCase.h"
#include "RimTools.h"
CAF_PDM_SOURCE_INIT(RimFractureExportSettings, "RimFractureExportSettings"); CAF_PDM_SOURCE_INIT(RimFractureExportSettings, "RimFractureExportSettings");
@@ -32,9 +35,23 @@ RimFractureExportSettings::RimFractureExportSettings()
CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", ""); CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", "");
fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); 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<caf::PdmOptionItemInfo> RimFractureExportSettings::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &caseToApply)
{
RimTools::caseOptionItems(&options);
}
return options;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -20,8 +20,12 @@
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrField.h"
#include "cafPdmUiItem.h"
class RimEclipseCase;
//================================================================================================== //==================================================================================================
/// ///
/// ///
@@ -32,9 +36,10 @@ class RimFractureExportSettings : public caf::PdmObject
public: public:
RimFractureExportSettings(); RimFractureExportSettings();
caf::PdmField<QString> fileName; caf::PdmField<QString> fileName;
// caf::PdmField<QString> eclipseKeyword; caf::PdmPtrField<RimEclipseCase*> caseToApply;
// caf::PdmField<double> undefinedValue;
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
protected: protected:
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);