diff --git a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp index 0de1a10fac..767f3fd162 100644 --- a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp +++ b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp @@ -727,72 +727,18 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultNa //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigFractureTransCalc::computeFlowInFracture() +void RigFractureTransCalc::computeFlowInFracture(RigStimPlanCell* stimPlanCell) { + std::vector polygon = stimPlanCell->getPolygon(); - //TODO: A lot of common code with function for calculating transmissibility... + //The polygon corners are always stored in the same order + double verticalSideLength = (polygon[1] - polygon[0]).length(); + double horisontalSideLength = (polygon[2] - polygon[1]).length(); - RimStimPlanFractureTemplate* fracTemplateStimPlan; - RimEllipseFractureTemplate* fracTemplateEllipse; - if (dynamic_cast(m_fracture->attachedFractureDefinition())) - { - fracTemplateStimPlan = dynamic_cast(m_fracture->attachedFractureDefinition()); - } - else if (dynamic_cast(m_fracture->attachedFractureDefinition())) - { - fracTemplateEllipse = dynamic_cast(m_fracture->attachedFractureDefinition()); - } - else return; - - //TODO: A lot of common code with function above... Can be cleaned up...? - std::vector fracCells = m_fracture->getPotentiallyFracturedCells(); - - - RigEclipseCaseData* eclipseCaseData = m_case->eclipseCaseData(); - - RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS; - RimReservoirCellResultsStorage* gridCellResults = m_case->results(porosityModel); - RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel); - - - std::vector fracDataVec; - - for (size_t fracCell : fracCells) - { - double Kw; // Conductivity (Permeability K times width w) - - if (fracTemplateEllipse) - { - double K = fracTemplateEllipse->fractureConductivity(); // Permeability - double w = fracTemplateEllipse->width(); // Width - - //TODO: UNit handling... - if (fracTemplateEllipse->fractureTemplateUnit() == RimDefines::UNITS_FIELD) - { - w = RimDefines::inchToFeet(w); - } - - Kw = K * w; - } - else if (fracTemplateStimPlan) - { - QString resultName = "CONDUCTIVITY"; - QString resultUnit; - if (fracTemplateStimPlan->fractureTemplateUnit() == RimDefines::UNITS_METRIC) resultUnit = "md-m"; - if (fracTemplateStimPlan->fractureTemplateUnit() == RimDefines::UNITS_FIELD) resultUnit = "md-ft"; - - size_t timeStepIndex = 0; //TODO... - caf::AppEnum< RimDefines::UnitSystem > unitSystem = RimDefines::UNITS_METRIC; - std::pair upscaledValues = flowAcrossLayersUpscaling(resultName, resultUnit, timeStepIndex, unitSystem, fracCell); - Kw = (upscaledValues.first + upscaledValues.second) / 2; - } - - Kw = convertConductivtyValue(Kw, fracTemplateEllipse->fractureTemplateUnit(), m_unitForCalculation); - } - - - m_fracture->setFractureData(fracDataVec); + double verticalTrans = stimPlanCell->getConductivtyValue() * verticalSideLength / (horisontalSideLength / 2); + double horizontalTrans = stimPlanCell->getConductivtyValue() * horisontalSideLength / (verticalSideLength / 2); + stimPlanCell->setTransmissibilityInFracture(verticalTrans, horizontalTrans); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h index 2e240f317d..23afb166d9 100644 --- a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h +++ b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h @@ -59,7 +59,7 @@ public: void calculateStimPlanCellsMatrixTransmissibility(RigStimPlanCell* stimPlanCell, RigFractureStimPlanCellData* fracStimPlanCellData); - void computeFlowInFracture(); + void computeFlowInFracture(RigStimPlanCell* stimPlanCell); void computeFlowIntoTransverseWell(); diff --git a/ApplicationCode/ReservoirDataModel/RigStimPlanCell.cpp b/ApplicationCode/ReservoirDataModel/RigStimPlanCell.cpp index bf41ed15b5..22da30ce22 100644 --- a/ApplicationCode/ReservoirDataModel/RigStimPlanCell.cpp +++ b/ApplicationCode/ReservoirDataModel/RigStimPlanCell.cpp @@ -44,6 +44,15 @@ RigStimPlanCell::~RigStimPlanCell() } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigStimPlanCell::setTransmissibilityInFracture(double valueHorizontal, double valueVertical) +{ + m_transmissibilityInFractureHorizontal = valueHorizontal; + m_transmissibilityInFractureVertical = valueVertical; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ReservoirDataModel/RigStimPlanCell.h b/ApplicationCode/ReservoirDataModel/RigStimPlanCell.h index 9afeb8325b..ef32b07d36 100644 --- a/ApplicationCode/ReservoirDataModel/RigStimPlanCell.h +++ b/ApplicationCode/ReservoirDataModel/RigStimPlanCell.h @@ -45,6 +45,7 @@ public: void setConductivityValue(double cond) { m_concutivityValue = cond; } void setDisplayValue(double value) { m_displayValue = value; }; + void setTransmissibilityInFracture(double valueHorizontal, double valueVertical); // void addContributingEclipseCell(size_t fracCell, double transmissibility); @@ -55,7 +56,7 @@ private: size_t m_i; size_t m_j; -// std::vector contributingEclipseCells; -// std::vector contributingEclipseCellTransmisibilities; + double m_transmissibilityInFractureVertical; + double m_transmissibilityInFractureHorizontal; }; \ No newline at end of file