#3090 Multi Fraction Creation : Default values and clear data on project close

This commit is contained in:
Magne Sjaastad 2018-08-02 15:38:35 +02:00
parent c6964f583b
commit 7bbf5aef1d
8 changed files with 99 additions and 21 deletions

View File

@ -23,7 +23,11 @@
#include "RicCreateMultipleFracturesUi.h" #include "RicCreateMultipleFracturesUi.h"
#include "RigActiveCellInfo.h"
#include "RigEclipseCaseData.h"
#include "RimDialogData.h" #include "RimDialogData.h"
#include "RimEclipseCase.h"
#include "RimFractureTemplate.h" #include "RimFractureTemplate.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimWellPath.h" #include "RimWellPath.h"
@ -35,6 +39,7 @@
#include "cafPdmUiPropertyViewDialog.h" #include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManagerTools.h" #include "cafSelectionManagerTools.h"
#include "RiaPorosityModel.h"
#include <QAction> #include <QAction>
#include <QPushButton> #include <QPushButton>
@ -138,6 +143,47 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked)
{ {
m_copyOfObject = multipleFractionsUi->writeObjectToXmlString(); m_copyOfObject = multipleFractionsUi->writeObjectToXmlString();
if (multipleFractionsUi->options().empty())
{
RiaApplication* app = RiaApplication::instance();
RimProject* proj = app->project();
RimEclipseCase* firstSourceCase = nullptr;
int topK = 0;
int baseK = 0;
if (!proj->eclipseCases().empty())
{
firstSourceCase = proj->eclipseCases().front();
cvf::Vec3st minIJK;
cvf::Vec3st maxIJK;
if (firstSourceCase && firstSourceCase->eclipseCaseData())
{
firstSourceCase->eclipseCaseData()->activeCellInfo(RiaDefines::MATRIX_MODEL)->IJKBoundingBox(minIJK, maxIJK);
}
topK = static_cast<int>(minIJK.z());
baseK = static_cast<int>(maxIJK.z());
double minimumDistanceFromTip = 100.0;
int maxFractureCount = 100;
multipleFractionsUi->setValues(firstSourceCase, minimumDistanceFromTip, maxFractureCount);
auto newItem = new RicCreateMultipleFracturesOptionItemUi;
RimFractureTemplate* firstFractureTemplate = nullptr;
if (!proj->allFractureTemplates().empty())
{
firstFractureTemplate = proj->allFractureTemplates().front();
}
double minimumSpacing = 300.0;
newItem->setValues(topK + 1, baseK + 1, firstFractureTemplate, minimumSpacing);
multipleFractionsUi->insertOptionItem(nullptr, newItem);
}
}
caf::PdmUiPropertyViewDialog propertyDialog( caf::PdmUiPropertyViewDialog propertyDialog(
Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractions", ""); Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractions", "");

View File

@ -33,8 +33,8 @@ CAF_PDM_SOURCE_INIT(RicCreateMultipleFracturesOptionItemUi, "RiuMultipleFraction
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RicCreateMultipleFracturesOptionItemUi::RicCreateMultipleFracturesOptionItemUi() RicCreateMultipleFracturesOptionItemUi::RicCreateMultipleFracturesOptionItemUi()
{ {
CAF_PDM_InitField(&m_topK, "TopKLayer", 0, "Top K Layer", "", "", ""); CAF_PDM_InitField(&m_topKOneBased, "TopKLayer", 1, "Top K Layer", "", "", "");
CAF_PDM_InitField(&m_baseK, "BaseKLayer", 0, "Base K Layer", "", "", ""); CAF_PDM_InitField(&m_baseKOneBased, "BaseKLayer", 1, "Base K Layer", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_fractureTemplate, "Template", "Template", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_fractureTemplate, "Template", "Template", "", "", "");
CAF_PDM_InitField(&m_minSpacing, "MinSpacing", 300.0, "Spacing", "", "", ""); CAF_PDM_InitField(&m_minSpacing, "MinSpacing", 300.0, "Spacing", "", "", "");
} }
@ -42,17 +42,15 @@ RicCreateMultipleFracturesOptionItemUi::RicCreateMultipleFracturesOptionItemUi()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
int RicCreateMultipleFracturesOptionItemUi::topK() const void RicCreateMultipleFracturesOptionItemUi::setValues(int topKOneBased,
int baseKOneBased,
RimFractureTemplate* fractureTemplate,
double minimumSpacing)
{ {
return m_topK; m_topKOneBased = topKOneBased;
} m_baseKOneBased = baseKOneBased;
m_fractureTemplate = fractureTemplate;
//-------------------------------------------------------------------------------------------------- m_minSpacing = minimumSpacing;
///
//--------------------------------------------------------------------------------------------------
int RicCreateMultipleFracturesOptionItemUi::baseK() const
{
return m_baseK;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -76,7 +74,7 @@ double RicCreateMultipleFracturesOptionItemUi::minimumSpacing() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicCreateMultipleFracturesOptionItemUi::isKLayerContained(int k) const bool RicCreateMultipleFracturesOptionItemUi::isKLayerContained(int k) const
{ {
auto minMax = std::minmax(m_topK, m_baseK); auto minMax = std::minmax(m_topKOneBased, m_baseKOneBased);
if (k < minMax.first) return false; if (k < minMax.first) return false;
if (k < minMax.second) return true; if (k < minMax.second) return true;

View File

@ -34,12 +34,12 @@ class RicCreateMultipleFracturesOptionItemUi : public caf::PdmObject
public: public:
RicCreateMultipleFracturesOptionItemUi(); RicCreateMultipleFracturesOptionItemUi();
int topK() const; void setValues(int topKOneBased, int baseKOneBased, RimFractureTemplate* fractureTemplate, double minimumSpacing);
int baseK() const;
RimFractureTemplate* fractureTemplate() const; RimFractureTemplate* fractureTemplate() const;
double minimumSpacing() const; double minimumSpacing() const;
bool isKLayerContained(int k) const; bool isKLayerContained(int k) const;
private: private:
virtual void virtual void
@ -49,8 +49,8 @@ private:
bool* useOptionsOnly) override; bool* useOptionsOnly) override;
private: private:
caf::PdmField<int> m_topK; caf::PdmField<int> m_topKOneBased; // Eclipse uses 1-based indexing
caf::PdmField<int> m_baseK; caf::PdmField<int> m_baseKOneBased; // Eclipse uses 1-based indexing
caf::PdmPtrField<RimFractureTemplate*> m_fractureTemplate; caf::PdmPtrField<RimFractureTemplate*> m_fractureTemplate;
caf::PdmField<double> m_minSpacing; caf::PdmField<double> m_minSpacing;
}; };

View File

@ -50,8 +50,6 @@ RiuCreateMultipleFractionsUi::RiuCreateMultipleFractionsUi()
CAF_PDM_InitFieldNoDefault(&m_options, "Options", "Options", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_options, "Options", "Options", "", "", "");
m_options.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName()); m_options.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
m_options.push_back(new RicCreateMultipleFracturesOptionItemUi);
m_options.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::TOP); m_options.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::TOP);
m_options.uiCapability()->setCustomContextMenuEnabled(true); m_options.uiCapability()->setCustomContextMenuEnabled(true);
@ -61,6 +59,25 @@ RiuCreateMultipleFractionsUi::RiuCreateMultipleFractionsUi()
m_fractureCreationSummary.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName()); m_fractureCreationSummary.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuCreateMultipleFractionsUi::setValues(RimEclipseCase* eclipseCase, double minimumDistanceFromWellToe, int maxFracturesPerWell)
{
m_sourceCase = eclipseCase;
m_minDistanceFromWellTd = minimumDistanceFromWellToe;
m_maxFracturesPerWell = maxFracturesPerWell;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuCreateMultipleFractionsUi::resetValues()
{
m_sourceCase = nullptr;
m_options.deleteAllChildObjects();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -259,7 +276,8 @@ std::vector<LocationForNewFracture> RiuCreateMultipleFractionsUi::locationsForNe
size_t k; size_t k;
mainGrid->ijkFromCellIndex(reservoirGlobalCellIndex, &i, &j, &k); mainGrid->ijkFromCellIndex(reservoirGlobalCellIndex, &i, &j, &k);
if (option->isKLayerContained(static_cast<int>(k))) int oneBasedK = static_cast<int>(k) + 1;
if (option->isKLayerContained(oneBasedK))
{ {
if (option->fractureTemplate()) if (option->fractureTemplate())
{ {

View File

@ -56,6 +56,9 @@ class RiuCreateMultipleFractionsUi : public caf::PdmObject
public: public:
RiuCreateMultipleFractionsUi(); RiuCreateMultipleFractionsUi();
void setValues(RimEclipseCase* eclipseCase, double minimumDistanceFromWellTip, int maxFracturesPerWell);
void resetValues();
std::vector<RicCreateMultipleFracturesOptionItemUi*> options() const; std::vector<RicCreateMultipleFracturesOptionItemUi*> options() const;
void insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertBeforeThisObject, void insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertBeforeThisObject,

View File

@ -41,6 +41,14 @@ RimDialogData::RimDialogData()
m_multipleFractionsData = new RiuCreateMultipleFractionsUi(); m_multipleFractionsData = new RiuCreateMultipleFractionsUi();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDialogData::clearProjectSpecificData()
{
m_multipleFractionsData->resetValues();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -42,6 +42,8 @@ class RimDialogData : public caf::PdmObject
public: public:
RimDialogData(); RimDialogData();
void clearProjectSpecificData();
RicExportCarfinUi* exportCarfin() const; RicExportCarfinUi* exportCarfin() const;
QString exportCarfinDataAsString() const; QString exportCarfinDataAsString() const;
void setExportCarfinDataFromString(const QString& data); void setExportCarfinDataFromString(const QString& data);
@ -50,6 +52,7 @@ public:
RiuCreateMultipleFractionsUi* multipleFractionsData() const; RiuCreateMultipleFractionsUi* multipleFractionsData() const;
private: private:
caf::PdmChildField<RicExportCarfinUi*> m_exportCarfin; caf::PdmChildField<RicExportCarfinUi*> m_exportCarfin;
caf::PdmChildField<RicExportCompletionDataSettingsUi*> m_exportCompletionData; caf::PdmChildField<RicExportCompletionDataSettingsUi*> m_exportCompletionData;

View File

@ -201,6 +201,8 @@ void RimProject::close()
multiSnapshotDefinitions.deleteAllChildObjects(); multiSnapshotDefinitions.deleteAllChildObjects();
m_dialogData->clearProjectSpecificData();
calculationCollection->deleteAllContainedObjects(); calculationCollection->deleteAllContainedObjects();
delete viewLinkerCollection->viewLinker(); delete viewLinkerCollection->viewLinker();