#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 <QMessageBox>
#include <QString>
#include <QFileInfo>
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)
{

View File

@ -41,6 +41,7 @@
#include <QAction>
#include <QMessageBox>
#include <QString>
#include <QFileInfo>
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)
{

View File

@ -41,6 +41,7 @@
#include <QAction>
#include <QMessageBox>
#include <QString>
#include <QFileInfo>
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<caf::PdmObjectHandle*>(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
}
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -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<RigFractureData> 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<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData();
for (RigFractureData fracData : fracDataVector)

View File

@ -28,16 +28,15 @@
#include <QString>
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<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);

View File

@ -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<RimEclipseView*>(activeView);
RigEclipseCaseData* eclipseCaseData = caseToApply->reservoirData();
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(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);

View File

@ -36,6 +36,7 @@
class RigFracture;
class RimEllipseFractureTemplate;
class RivWellFracturePartMgr;
class RimEclipseCase;
//==================================================================================================
///
@ -74,7 +75,7 @@ public:
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 caf::PdmFieldHandle* userDescriptionField() override;

View File

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