diff --git a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesFeature.cpp b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesFeature.cpp index cceb458948..072d7b102a 100644 --- a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesFeature.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesFeature.cpp @@ -23,7 +23,11 @@ #include "RicCreateMultipleFracturesUi.h" +#include "RigActiveCellInfo.h" +#include "RigEclipseCaseData.h" + #include "RimDialogData.h" +#include "RimEclipseCase.h" #include "RimFractureTemplate.h" #include "RimProject.h" #include "RimWellPath.h" @@ -35,6 +39,7 @@ #include "cafPdmUiPropertyViewDialog.h" #include "cafSelectionManagerTools.h" +#include "RiaPorosityModel.h" #include #include @@ -138,6 +143,47 @@ void RicCreateMultipleFracturesFeature::onActionTriggered(bool isChecked) { 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(minIJK.z()); + baseK = static_cast(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( Riu3DMainWindowTools::mainWindowWidget(), multipleFractionsUi, "Create Multiple Fractions", ""); diff --git a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.cpp b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.cpp index c1b078da66..f3da8d5a8c 100644 --- a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.cpp @@ -33,8 +33,8 @@ CAF_PDM_SOURCE_INIT(RicCreateMultipleFracturesOptionItemUi, "RiuMultipleFraction //-------------------------------------------------------------------------------------------------- RicCreateMultipleFracturesOptionItemUi::RicCreateMultipleFracturesOptionItemUi() { - CAF_PDM_InitField(&m_topK, "TopKLayer", 0, "Top K Layer", "", "", ""); - CAF_PDM_InitField(&m_baseK, "BaseKLayer", 0, "Base K Layer", "", "", ""); + CAF_PDM_InitField(&m_topKOneBased, "TopKLayer", 1, "Top K Layer", "", "", ""); + CAF_PDM_InitField(&m_baseKOneBased, "BaseKLayer", 1, "Base K Layer", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_fractureTemplate, "Template", "Template", "", "", ""); 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; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -int RicCreateMultipleFracturesOptionItemUi::baseK() const -{ - return m_baseK; + m_topKOneBased = topKOneBased; + m_baseKOneBased = baseKOneBased; + m_fractureTemplate = fractureTemplate; + m_minSpacing = minimumSpacing; } //-------------------------------------------------------------------------------------------------- @@ -76,7 +74,7 @@ double RicCreateMultipleFracturesOptionItemUi::minimumSpacing() 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.second) return true; diff --git a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.h b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.h index 8339f28b2b..70e28bbee2 100644 --- a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.h +++ b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesOptionItemUi.h @@ -34,12 +34,12 @@ class RicCreateMultipleFracturesOptionItemUi : public caf::PdmObject public: RicCreateMultipleFracturesOptionItemUi(); - int topK() const; - int baseK() const; + void setValues(int topKOneBased, int baseKOneBased, RimFractureTemplate* fractureTemplate, double minimumSpacing); + RimFractureTemplate* fractureTemplate() const; double minimumSpacing() const; - bool isKLayerContained(int k) const; + bool isKLayerContained(int k) const; private: virtual void @@ -49,8 +49,8 @@ private: bool* useOptionsOnly) override; private: - caf::PdmField m_topK; - caf::PdmField m_baseK; + caf::PdmField m_topKOneBased; // Eclipse uses 1-based indexing + caf::PdmField m_baseKOneBased; // Eclipse uses 1-based indexing caf::PdmPtrField m_fractureTemplate; caf::PdmField m_minSpacing; }; diff --git a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.cpp b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.cpp index cc15a8efe2..9a2fd91108 100644 --- a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.cpp @@ -50,8 +50,6 @@ RiuCreateMultipleFractionsUi::RiuCreateMultipleFractionsUi() CAF_PDM_InitFieldNoDefault(&m_options, "Options", "Options", "", "", ""); m_options.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName()); - - m_options.push_back(new RicCreateMultipleFracturesOptionItemUi); m_options.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::TOP); m_options.uiCapability()->setCustomContextMenuEnabled(true); @@ -61,6 +59,25 @@ RiuCreateMultipleFractionsUi::RiuCreateMultipleFractionsUi() 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 RiuCreateMultipleFractionsUi::locationsForNe size_t k; mainGrid->ijkFromCellIndex(reservoirGlobalCellIndex, &i, &j, &k); - if (option->isKLayerContained(static_cast(k))) + int oneBasedK = static_cast(k) + 1; + if (option->isKLayerContained(oneBasedK)) { if (option->fractureTemplate()) { diff --git a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.h b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.h index 6e749fea87..fbf4fa17c3 100644 --- a/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.h +++ b/ApplicationCode/Commands/FractureCommands/RicCreateMultipleFracturesUi.h @@ -56,6 +56,9 @@ class RiuCreateMultipleFractionsUi : public caf::PdmObject public: RiuCreateMultipleFractionsUi(); + void setValues(RimEclipseCase* eclipseCase, double minimumDistanceFromWellTip, int maxFracturesPerWell); + void resetValues(); + std::vector options() const; void insertOptionItem(RicCreateMultipleFracturesOptionItemUi* insertBeforeThisObject, diff --git a/ApplicationCode/ProjectDataModel/RimDialogData.cpp b/ApplicationCode/ProjectDataModel/RimDialogData.cpp index b1ace0f4f3..be8211bbcf 100644 --- a/ApplicationCode/ProjectDataModel/RimDialogData.cpp +++ b/ApplicationCode/ProjectDataModel/RimDialogData.cpp @@ -41,6 +41,14 @@ RimDialogData::RimDialogData() m_multipleFractionsData = new RiuCreateMultipleFractionsUi(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimDialogData::clearProjectSpecificData() +{ + m_multipleFractionsData->resetValues(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimDialogData.h b/ApplicationCode/ProjectDataModel/RimDialogData.h index 39e194e941..737a67c839 100644 --- a/ApplicationCode/ProjectDataModel/RimDialogData.h +++ b/ApplicationCode/ProjectDataModel/RimDialogData.h @@ -42,6 +42,8 @@ class RimDialogData : public caf::PdmObject public: RimDialogData(); + void clearProjectSpecificData(); + RicExportCarfinUi* exportCarfin() const; QString exportCarfinDataAsString() const; void setExportCarfinDataFromString(const QString& data); @@ -50,6 +52,7 @@ public: RiuCreateMultipleFractionsUi* multipleFractionsData() const; + private: caf::PdmChildField m_exportCarfin; caf::PdmChildField m_exportCompletionData; diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index fec9284de2..bc3aab099e 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -201,6 +201,8 @@ void RimProject::close() multiSnapshotDefinitions.deleteAllChildObjects(); + m_dialogData->clearProjectSpecificData(); + calculationCollection->deleteAllContainedObjects(); delete viewLinkerCollection->viewLinker();