From e2d163a7100778d6484decdf77c1eb5e6242b8df Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 28 Jun 2018 14:44:52 +0200 Subject: [PATCH] #3121 Non Darcy Flow : D-factor is wrong for user defined width of stim plan fractures --- .../Completions/RimFractureTemplate.cpp | 20 +++++++++++++++---- .../Completions/RimFractureTemplate.h | 7 ++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index 15dbbac604..a788133e29 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -426,7 +426,7 @@ QList RimFractureTemplate::calculateValueOptions(const c options.push_back(caf::PdmOptionItemInfo(caf::AppEnum::uiText(USER_DEFINED_WIDTH), USER_DEFINED_WIDTH)); auto widthAndCond = widthAndConductivityAtWellPathIntersection(); - if (widthAndCond.isValid()) + if (widthAndCond.isWidthAndPermeabilityDefined()) { options.push_back(caf::PdmOptionItemInfo(caf::AppEnum::uiText(WIDTH_FROM_FRACTURE), WIDTH_FROM_FRACTURE)); } @@ -490,7 +490,7 @@ void RimFractureTemplate::prepareFieldsForUiDisplay() // Non Darcy Flow auto values = widthAndConductivityAtWellPathIntersection(); - if (!values.isValid()) + if (!values.isWidthAndPermeabilityDefined()) { m_fractureWidthType = RimFractureTemplate::USER_DEFINED_WIDTH; } @@ -571,9 +571,21 @@ double RimFractureTemplate::effectivePermeability() const } else { + double fracPermeability = 0.0; auto values = widthAndConductivityAtWellPathIntersection(); + if (values.isWidthAndPermeabilityDefined()) + { + fracPermeability = values.m_permeability; + } + else + { + auto conductivity = values.m_conductivity; + auto width = fractureWidth(); - auto fracPermeability = values.m_permeability; + if (fabs(width) < 1e-10) return HUGE_VAL; + + fracPermeability = conductivity / width; + } return fracPermeability * m_relativePermeability; } @@ -621,7 +633,7 @@ double RimFractureTemplate::kh() const // conductivity = permeability * h auto values = widthAndConductivityAtWellPathIntersection(); - if (values.m_conductivity != HUGE_VAL) + if (values.isConductivityDefined()) { // If conductivity is found in stim plan file, use this directly return values.m_conductivity; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h index af87b73e14..ccf4caad91 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h @@ -49,7 +49,7 @@ public: { } - bool isValid() const + bool isWidthAndPermeabilityDefined() const { if (m_width != 0.0) return true; if (m_permeability != 0.0) return true; @@ -57,6 +57,11 @@ public: return false; } + bool isConductivityDefined() const + { + return (m_conductivity != HUGE_VAL); + } + // Unit : meter or feet double m_width;