diff --git a/ApplicationCode/Commands/RicNewEllipseFractureTemplateFeature.cpp b/ApplicationCode/Commands/RicNewEllipseFractureTemplateFeature.cpp index 7442981cfe..094c4c1039 100644 --- a/ApplicationCode/Commands/RicNewEllipseFractureTemplateFeature.cpp +++ b/ApplicationCode/Commands/RicNewEllipseFractureTemplateFeature.cpp @@ -55,6 +55,7 @@ void RicNewEllipseFractureTemplateFeature::onActionTriggered(bool isChecked) fracDefColl->fractureDefinitions.push_back(fractureDef); fractureDef->name = "Ellipse Fracture Template"; fractureDef->fractureTemplateUnit = fracDefColl->defaultUnitsForFracTemplates(); + fractureDef->setDefaultWellDiameterFromUnit(); fracDefColl->updateConnectedEditors(); RiuMainWindow::instance()->selectAsCurrentItem(fractureDef); diff --git a/ApplicationCode/Commands/RicNewStimPlanFractureTemplateFeature.cpp b/ApplicationCode/Commands/RicNewStimPlanFractureTemplateFeature.cpp index 861a2c5ab2..440ce22623 100644 --- a/ApplicationCode/Commands/RicNewStimPlanFractureTemplateFeature.cpp +++ b/ApplicationCode/Commands/RicNewStimPlanFractureTemplateFeature.cpp @@ -64,7 +64,8 @@ void RicNewStimPlanFractureTemplateFeature::onActionTriggered(bool isChecked) fractureDef->setFileName(fileName); fractureDef->loadDataAndUpdate(); fractureDef->setDefaultsBasedOnXMLfile(); - + fractureDef->setDefaultWellDiameterFromUnit(); + fracDefColl->updateConnectedEditors(); RiuMainWindow::instance()->selectAsCurrentItem(fractureDef); } diff --git a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp index e9b5586f62..a0787c4dd7 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp @@ -170,16 +170,15 @@ void RimEllipseFractureTemplate::changeUnits() halfLength = RimDefines::meterToFeet(halfLength); height = RimDefines::meterToFeet(height); width = RimDefines::meterToInch(width); - //perforationLength = RimDefines::meterToFeet(perforationLength); + wellDiameter = RimDefines::meterToInch(wellDiameter); fractureTemplateUnit = RimDefines::UNITS_FIELD; - //TODO: Darcy unit? } else if (fractureTemplateUnit == RimDefines::UNITS_FIELD) { halfLength = RimDefines::feetToMeter(halfLength); height = RimDefines::feetToMeter(height); width = RimDefines::inchToMeter(width); - //perforationLength = RimDefines::feetToMeter(perforationLength); + wellDiameter = RimDefines::inchToMeter(wellDiameter); fractureTemplateUnit = RimDefines::UNITS_METRIC; } @@ -277,6 +276,7 @@ void RimEllipseFractureTemplate::setupFractureGridCells() } + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -297,14 +297,14 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm halfLength.uiCapability()->setUiName("Halflenght Xf [m]"); height.uiCapability()->setUiName("Height [m]"); width.uiCapability()->setUiName("Width [m]"); - //perforationLength.uiCapability()->setUiName("Perforation Length [m]"); + wellDiameter.uiCapability()->setUiName("Well Diameter [m]"); } else if (fractureTemplateUnit == RimDefines::UNITS_FIELD) { halfLength.uiCapability()->setUiName("Halflenght Xf [Ft]"); height.uiCapability()->setUiName("Height [Ft]"); width.uiCapability()->setUiName("Width [inches]"); - //perforationLength.uiCapability()->setUiName("Perforation Length [Ft]"); + wellDiameter.uiCapability()->setUiName("Well Diameter [inches]"); } @@ -326,7 +326,7 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm propertyGroup->add(&skinFactor); propertyGroup->add(&perforationLength); propertyGroup->add(&perforationEfficiency); - propertyGroup->add(&wellRadius); + propertyGroup->add(&wellDiameter); uiOrdering.add(&fractureTemplateUnit); uiOrdering.skipRemainingFields(true); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp index f1091689bd..c6610139a1 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp @@ -86,7 +86,7 @@ RimFracture::RimFracture(void) CAF_PDM_InitField(&perforationLength, "PerforationLength", 0.0, "Perforation Length", "", "", ""); CAF_PDM_InitField(&perforationEfficiency, "perforationEfficiency", 1.0, "perforation Efficiency", "", "", ""); perforationEfficiency.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); - CAF_PDM_InitField(&wellRadius, "wellRadius", 0.0, "Well Radius at Fracture", "", "", ""); + CAF_PDM_InitField(&wellDiameter, "wellDiameter", 0.216, "Well Diameter at Fracture", "", "", ""); CAF_PDM_InitField(&dip, "Dip", 0.0, "Dip", "", "", ""); CAF_PDM_InitField(&tilt, "Tilt", 0.0, "Tilt", "", "", ""); CAF_PDM_InitField(&showPolygonFractureOutline, "showPolygonFractureOutline", true, "Show Polygon Outline", "", "", ""); @@ -161,6 +161,21 @@ std::vector RimFracture::getPotentiallyFracturedCells(const RigMainGrid* //-------------------------------------------------------------------------------------------------- void RimFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { + + if (changedField == &fractureUnit) + { + if (fractureUnit == RimDefines::UNITS_METRIC) + { + wellDiameter = RimDefines::inchToMeter(wellDiameter); + } + else if (fractureUnit == RimDefines::UNITS_FIELD) + { + wellDiameter = RimDefines::meterToInch(wellDiameter); + } + this->updateConnectedEditors(); + } + + if (changedField == &m_fractureTemplate) { //perforationLength = m_fractureTemplate->perforationLength(); @@ -242,6 +257,22 @@ void RimFracture::computeGeometry() m_recomputeGeometry = false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RimFracture::wellRadius() const +{ + if (fractureUnit == RimDefines::UNITS_METRIC) + { + return wellDiameter / 2; + } + else if (fractureUnit == RimDefines::UNITS_FIELD) + { + return RimDefines::inchToFeet(wellDiameter / 2); + } + return cvf::UNDEFINED_DOUBLE; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -365,6 +396,7 @@ QList RimFracture::calculateValueOptions(const caf::PdmF //-------------------------------------------------------------------------------------------------- void RimFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { + updateFieldVisibility(); } @@ -373,6 +405,16 @@ void RimFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiO //-------------------------------------------------------------------------------------------------- void RimFracture::updateFieldVisibility() { + + if (fractureUnit == RimDefines::UNITS_METRIC) + { + wellDiameter.uiCapability()->setUiName("Well Diameter [m]"); + } + else if (fractureUnit == RimDefines::UNITS_FIELD) + { + wellDiameter.uiCapability()->setUiName("Well Diameter [inches]"); + } + if (attachedFractureDefinition()) { if (attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.h b/ApplicationCode/ProjectDataModel/Completions/RimFracture.h index 946e17cd4f..5a4a50c63d 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.h @@ -57,7 +57,7 @@ public: caf::PdmField azimuth; caf::PdmField perforationLength; caf::PdmField perforationEfficiency; - caf::PdmField wellRadius; + caf::PdmField wellDiameter; caf::PdmField dip; caf::PdmField tilt; @@ -67,7 +67,7 @@ public: caf::PdmField< caf::AppEnum< RimDefines::UnitSystem > > fractureUnit; - + double wellRadius() const; cvf::Vec3d anchorPosition() const ; void setAnchorPosition(const cvf::Vec3d& pos); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index 2ed69a8dde..9616ff7bd7 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -75,7 +75,7 @@ RimFractureTemplate::RimFractureTemplate(void) CAF_PDM_InitField(&perforationLength, "PerforationLength", 0.0, "Perforation Length", "", "", ""); CAF_PDM_InitField(&perforationEfficiency, "perforationEfficiency", 1.0, "perforation Efficiency", "", "", ""); perforationEfficiency.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); - CAF_PDM_InitField(&wellRadius, "wellRadius", 0.0, "Well Radius at Fracture", "", "", ""); + CAF_PDM_InitField(&wellDiameter, "wellDiameter", 0.216, "Well Diameter at Fracture", "", "", ""); CAF_PDM_InitField(&fractureConductivity, "FractureCondictivity", caf::AppEnum(INFINITE_CONDUCTIVITY), "Conductivity in Fracture", "", "", ""); @@ -88,7 +88,6 @@ RimFractureTemplate::~RimFractureTemplate() { } - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -136,7 +135,7 @@ void RimFractureTemplate::fieldChangedByUi(const caf::PdmFieldHandle* changedFie } } - if (changedField == &perforationLength || changedField == &perforationEfficiency || changedField == &wellRadius) + if (changedField == &perforationLength || changedField == &perforationEfficiency || changedField == &wellDiameter) { RimProject* proj; this->firstAncestorOrThisOfType(proj); @@ -156,9 +155,9 @@ void RimFractureTemplate::fieldChangedByUi(const caf::PdmFieldHandle* changedFie { fracture->perforationEfficiency = perforationEfficiency; } - if (changedField == &wellRadius && (abs(oldValue.toDouble() - fracture->wellRadius()) < 1e-5)) + if (changedField == &wellDiameter && (abs(oldValue.toDouble() - fracture->wellDiameter()) < 1e-5)) { - fracture->wellRadius = wellRadius; + fracture->wellDiameter = wellDiameter; } } } @@ -209,3 +208,19 @@ void RimFractureTemplate::defineEditorAttribute(const caf::PdmFieldHandle* field } } } + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFractureTemplate::setDefaultWellDiameterFromUnit() +{ + if (fractureTemplateUnit == RimDefines::UNITS_FIELD) + { + wellDiameter = 8.5; + } + else if (fractureTemplateUnit == RimDefines::UNITS_METRIC) + { + wellDiameter = 0.216; + } +} \ No newline at end of file diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h index f34471e340..892757fbad 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h @@ -52,7 +52,7 @@ public: caf::PdmField perforationLength; caf::PdmField perforationEfficiency; - caf::PdmField wellRadius; + caf::PdmField wellDiameter; enum FracOrientationEnum { @@ -71,6 +71,8 @@ public: caf::PdmField< caf::AppEnum< RimDefines::UnitSystem > > fractureTemplateUnit; + void setDefaultWellDiameterFromUnit(); + virtual caf::PdmFieldHandle* userDescriptionField() override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp index 8318884d75..5bab85d125 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp @@ -200,7 +200,7 @@ void RimSimWellFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi propertyGroup->add(&stimPlanTimeIndexToPlot); propertyGroup->add(&perforationLength); propertyGroup->add(&perforationEfficiency); - propertyGroup->add(&wellRadius); + propertyGroup->add(&wellDiameter); caf::PdmUiGroup* fractureCenterGroup = uiOrdering.addNewGroup("Fracture Center Info"); fractureCenterGroup->add(&m_uiAnchorPosition); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index 3a2cfe1c1d..88c8473916 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -1097,7 +1097,7 @@ void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pd propertyGroup->add(&skinFactor); propertyGroup->add(&perforationLength); propertyGroup->add(&perforationEfficiency); - propertyGroup->add(&wellRadius); + propertyGroup->add(&wellDiameter); caf::PdmUiGroup* polygonGroup = uiOrdering.addNewGroup("Fracture Polygon Basis"); polygonGroup->add(¶meterForPolygon); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp index a25afb7add..30835e1424 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp @@ -173,7 +173,7 @@ void RimWellPathFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder propertyGroup->add(&stimPlanTimeIndexToPlot); propertyGroup->add(&perforationLength); propertyGroup->add(&perforationEfficiency); - propertyGroup->add(&wellRadius); + propertyGroup->add(&wellDiameter); caf::PdmUiGroup* fractureCenterGroup = uiOrdering.addNewGroup("Fracture Center Info"); fractureCenterGroup->add(&m_uiAnchorPosition);