From d63fdf0c807d7eb7d8f5a9273b2dce2c727f0178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Grip=20Fj=C3=A6r?= Date: Tue, 20 Jun 2017 14:46:58 +0200 Subject: [PATCH] #1593 Use well path unit type on fractures --- .../RicExportFractureCompletionsImpl.cpp | 4 +- .../RicNewSimWellFractureAtPosFeature.cpp | 2 +- .../Commands/RicNewSimWellFractureFeature.cpp | 2 +- .../RicNewWellPathFractureFeature.cpp | 2 +- .../Completions/RimFracture.cpp | 69 +++++++++++-------- .../Completions/RimFracture.h | 6 +- .../Completions/RimSimWellFracture.cpp | 3 +- .../Completions/RimWellPathFracture.cpp | 1 + .../RigWellPathStimplanIntersector.cpp | 4 +- 9 files changed, 54 insertions(+), 39 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportFractureCompletionsImpl.cpp b/ApplicationCode/Commands/CompletionCommands/RicExportFractureCompletionsImpl.cpp index d88b35de47..9c583ccf1d 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportFractureCompletionsImpl.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicExportFractureCompletionsImpl.cpp @@ -243,7 +243,7 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat double radialTrans = RigFractureTransmissibilityEquations::fractureCellToWellRadialTrans(wellCell.getConductivtyValue(), wellCell.cellSizeX(), wellCell.cellSizeZ(), - fracture->wellRadius(), + fracture->wellRadius(caseToApply->eclipseCaseData()->unitsType()), fracTemplate->skinFactor(), cDarcyInCorrectUnit); @@ -273,7 +273,7 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat radialTrans = RigFractureTransmissibilityEquations::fractureCellToWellRadialTrans(fractureWellCell.getConductivtyValue(), fractureWellCell.cellSizeX(), fractureWellCell.cellSizeZ(), - fracture->wellRadius(), + fracture->wellRadius(caseToApply->eclipseCaseData()->unitsType()), fracTemplate->skinFactor(), cDarcyInCorrectUnit); } diff --git a/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp b/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp index 28400a06ab..dee0249822 100644 --- a/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp +++ b/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp @@ -85,7 +85,7 @@ void RicNewSimWellFractureAtPosFeature::onActionTriggered(bool isChecked) RimEclipseResultCase* eclipseCase = nullptr; simWell->firstAncestorOrThisOfType(eclipseCase); - fracture->fractureUnit = eclipseCase->eclipseCaseData()->unitsType(); + fracture->setFractureUnit(eclipseCase->eclipseCaseData()->unitsType()); if (oilfield->fractureDefinitionCollection->fractureDefinitions.size() > 0) { diff --git a/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp b/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp index 819495eb48..2863815b64 100644 --- a/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp +++ b/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp @@ -71,7 +71,7 @@ void RicNewSimWellFractureFeature::onActionTriggered(bool isChecked) RimEclipseResultCase* eclipseCase = nullptr; objHandle->firstAncestorOrThisOfType(eclipseCase); - fracture->fractureUnit = eclipseCase->eclipseCaseData()->unitsType(); + fracture->setFractureUnit(eclipseCase->eclipseCaseData()->unitsType()); if (oilfield->fractureDefinitionCollection->fractureDefinitions.size() > 0) { diff --git a/ApplicationCode/Commands/RicNewWellPathFractureFeature.cpp b/ApplicationCode/Commands/RicNewWellPathFractureFeature.cpp index 8fbcdaea4e..efcf14cbc3 100644 --- a/ApplicationCode/Commands/RicNewWellPathFractureFeature.cpp +++ b/ApplicationCode/Commands/RicNewWellPathFractureFeature.cpp @@ -60,7 +60,7 @@ void RicNewWellPathFractureFeature::addFracture(RimWellPath* wellPath, double me fractureCollection->fractures.push_back(fracture); fracture->setMeasuredDepth(measuredDepth); - fracture->fractureUnit = wellPath->unitSystem(); + fracture->setFractureUnit(wellPath->unitSystem()); RigWellPath* wellPathGeometry = wellPath->wellPathGeometry(); cvf::Vec3d positionAtWellpath = wellPathGeometry->interpolatedPointAlongWellPath(measuredDepth); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp index 7813fd295e..ec327de8d6 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp @@ -95,7 +95,8 @@ RimFracture::RimFracture(void) 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", "", "", ""); - CAF_PDM_InitField(&fractureUnit, "fractureUnit", caf::AppEnum(RiaEclipseUnitTools::UNITS_METRIC), "Fracture Unit System", "", "", ""); + CAF_PDM_InitField(&m_fractureUnit, "fractureUnit", caf::AppEnum(RiaEclipseUnitTools::UNITS_METRIC), "Fracture Unit System", "", "", ""); + m_fractureUnit.uiCapability()->setUiReadOnly(true); CAF_PDM_InitField(&stimPlanTimeIndexToPlot, "timeIndexToPlot", 0, "StimPlan Time Step", "", "", ""); @@ -129,23 +130,6 @@ std::vector RimFracture::getPotentiallyFracturedCells(const RigMainGrid* //-------------------------------------------------------------------------------------------------- void RimFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - - if (changedField == &fractureUnit) - { - if (fractureUnit == RiaEclipseUnitTools::UNITS_METRIC) - { - wellDiameter = RiaEclipseUnitTools::inchToMeter(wellDiameter); - perforationLength = RiaEclipseUnitTools::feetToMeter(perforationLength); - } - else if (fractureUnit == RiaEclipseUnitTools::UNITS_FIELD) - { - wellDiameter = RiaEclipseUnitTools::meterToInch(wellDiameter); - perforationLength = RiaEclipseUnitTools::meterToFeet(perforationLength); - } - this->updateConnectedEditors(); - } - - if (changedField == &m_fractureTemplate) { setFractureTemplate(m_fractureTemplate); @@ -156,7 +140,6 @@ void RimFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons changedField == &stimPlanTimeIndexToPlot || changedField == this->objectToggleField() || changedField == &showPolygonFractureOutline || - changedField == &fractureUnit || changedField == &dip || changedField == &tilt) { @@ -209,15 +192,29 @@ cvf::BoundingBox RimFracture::boundingBoxInDomainCoords() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RimFracture::wellRadius() const +double RimFracture::wellRadius(RiaEclipseUnitTools::UnitSystem unitSystem) const { - if (fractureUnit == RiaEclipseUnitTools::UNITS_METRIC) + if (m_fractureUnit == RiaEclipseUnitTools::UNITS_METRIC) { - return wellDiameter / 2; + if (unitSystem == RiaEclipseUnitTools::UNITS_FIELD) + { + return RiaEclipseUnitTools::meterToFeet(wellDiameter / 2); + } + else + { + return wellDiameter / 2; + } } - else if (fractureUnit == RiaEclipseUnitTools::UNITS_FIELD) + else if (m_fractureUnit == RiaEclipseUnitTools::UNITS_FIELD) { - return RiaEclipseUnitTools::inchToFeet(wellDiameter / 2); + if (unitSystem == RiaEclipseUnitTools::UNITS_METRIC) + { + return RiaEclipseUnitTools::inchToMeter(wellDiameter / 2); + } + else + { + return RiaEclipseUnitTools::inchToFeet(wellDiameter / 2); + } } return cvf::UNDEFINED_DOUBLE; } @@ -347,12 +344,12 @@ QList RimFracture::calculateValueOptions(const caf::PdmF //-------------------------------------------------------------------------------------------------- void RimFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { - if (fractureUnit == RiaEclipseUnitTools::UNITS_METRIC) + if (m_fractureUnit() == RiaEclipseUnitTools::UNITS_METRIC) { wellDiameter.uiCapability()->setUiName("Well Diameter [m]"); perforationLength.uiCapability()->setUiName("Perforation Length [m]"); } - else if (fractureUnit == RiaEclipseUnitTools::UNITS_FIELD) + else if (m_fractureUnit() == RiaEclipseUnitTools::UNITS_FIELD) { wellDiameter.uiCapability()->setUiName("Well Diameter [inches]"); perforationLength.uiCapability()->setUiName("Perforation Length [Ft]"); @@ -438,6 +435,22 @@ void RimFracture::setAnchorPosition(const cvf::Vec3d& pos) } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaEclipseUnitTools::UnitSystem RimFracture::fractureUnit() const +{ + return m_fractureUnit(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFracture::setFractureUnit(RiaEclipseUnitTools::UnitSystem unitSystem) +{ + m_fractureUnit = unitSystem; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -500,8 +513,8 @@ void RimFracture::setFractureTemplate(RimFractureTemplate* fractureTemplate) } this->updateAzimuthFromFractureTemplate(); - this->wellDiameter = fractureTemplate->wellDiameterInFractureUnit(fractureUnit); - this->perforationLength = fractureTemplate->perforationLengthInFractureUnit(fractureUnit); + this->wellDiameter = fractureTemplate->wellDiameterInFractureUnit(m_fractureUnit()); + this->perforationLength = fractureTemplate->perforationLengthInFractureUnit(m_fractureUnit()); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.h b/ApplicationCode/ProjectDataModel/Completions/RimFracture.h index 6439b43d09..94d3658528 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.h @@ -66,11 +66,12 @@ public: caf::PdmField stimPlanTimeIndexToPlot; caf::PdmField showPolygonFractureOutline; - caf::PdmField< RiaEclipseUnitTools::UnitSystemType > fractureUnit; - double wellRadius() const; + double wellRadius(RiaEclipseUnitTools::UnitSystem unitSystem) const; cvf::Vec3d anchorPosition() const ; void setAnchorPosition(const cvf::Vec3d& pos); + RiaEclipseUnitTools::UnitSystem fractureUnit() const; + void setFractureUnit(RiaEclipseUnitTools::UnitSystem unitSystem); bool isEclipseCellWithinContainment(const RigMainGrid* mainGrid, size_t globalCellIndex); @@ -109,6 +110,7 @@ private: protected: caf::PdmPtrField m_fractureTemplate; caf::PdmProxyValueField m_uiAnchorPosition; + caf::PdmField< RiaEclipseUnitTools::UnitSystemType > m_fractureUnit; private: caf::PdmField m_anchorPosition; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp index fdec668eee..96f5afb230 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp @@ -186,7 +186,6 @@ void RimSimWellFracture::updateFracturePositionFromLocation() void RimSimWellFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { RimFracture::defineUiOrdering(uiConfigName, uiOrdering); - fractureUnit.uiCapability()->setUiReadOnly(true); uiOrdering.add(nameField()); uiOrdering.add(&showPolygonFractureOutline); @@ -199,7 +198,7 @@ void RimSimWellFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi locationGroup->add(&tilt); caf::PdmUiGroup* propertyGroup = uiOrdering.addNewGroup("Properties"); - propertyGroup->add(&fractureUnit); + propertyGroup->add(&m_fractureUnit); propertyGroup->add(&m_fractureTemplate); propertyGroup->add(&stimPlanTimeIndexToPlot); propertyGroup->add(&perforationLength); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp index 37743a8de8..00efa211e8 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimWellPathFracture.cpp @@ -169,6 +169,7 @@ void RimWellPathFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder locationGroup->add(&tilt); caf::PdmUiGroup* propertyGroup = uiOrdering.addNewGroup("Properties"); + propertyGroup->add(&m_fractureUnit); propertyGroup->add(&m_fractureTemplate); propertyGroup->add(&stimPlanTimeIndexToPlot); propertyGroup->add(&perforationLength); diff --git a/ApplicationCode/ReservoirDataModel/RigWellPathStimplanIntersector.cpp b/ApplicationCode/ReservoirDataModel/RigWellPathStimplanIntersector.cpp index 517c8dc77a..0c6fc4373d 100644 --- a/ApplicationCode/ReservoirDataModel/RigWellPathStimplanIntersector.cpp +++ b/ApplicationCode/ReservoirDataModel/RigWellPathStimplanIntersector.cpp @@ -14,11 +14,11 @@ #include -RigWellPathStimplanIntersector::RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, const RimFracture * rimFracture) +RigWellPathStimplanIntersector::RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, const RimFracture* rimFracture) { std::vector wellPathPoints = wellpathGeom->m_wellPathPoints; cvf::Mat4f fractureXf = rimFracture->transformMatrix(); - double wellRadius = rimFracture->wellRadius(); + double wellRadius = rimFracture->wellRadius(rimFracture->fractureUnit()); std::vector fracturePolygonf ; std::vector > stpCellPolygons; {