diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp index 4ef60d3392..04c91e4103 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp @@ -338,7 +338,7 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat // 2: Calculate new external transmissibilities scaledCondenser.calculateCondensedTransmissibilities(); - { // 3: Høgstøl correction. + { // 3: H�gst�l correction. // a. Calculate new effective fracture to well transmissiblities std::map fictitiousFractureToWellTransmissibilities = @@ -720,10 +720,8 @@ void RicExportFractureCompletionsImpl::calculateAndSetReportItemData( const RigEclipseToStimPlanCalculator& eclToFractureCalc, RicWellPathFractureReportItem& reportItem) { - double aggregatedTransmissibility = sumUpTransmissibilities(allCompletionsForOneFracture); - - double areaWeightedMatrixTransmissibility = eclToFractureCalc.areaWeightedMatrixTransmissibility(); - reportItem.setAreaWeightedTransmissibility(areaWeightedMatrixTransmissibility); + double areaWeightedMatrixPermeability = eclToFractureCalc.areaWeightedMatrixPermeability(); + reportItem.setAreaWeightedPermeability(areaWeightedMatrixPermeability); double totalAreaOpenForFlow = eclToFractureCalc.totalEclipseAreaOpenForFlow(); double areaWeightedConductivity = eclToFractureCalc.areaWeightedConductivity(); @@ -741,6 +739,7 @@ void RicExportFractureCompletionsImpl::calculateAndSetReportItemData( reportItem.setHeightAndHalfLength(height, halfLength); } + double aggregatedTransmissibility = sumUpTransmissibilities(allCompletionsForOneFracture); reportItem.setData(aggregatedTransmissibility, allCompletionsForOneFracture.size(), totalAreaOpenForFlow); reportItem.setWidthAndConductivity(eclToFractureCalc.areaWeightedWidth(), areaWeightedConductivity); diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.cpp index 876019fa85..c194586137 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.cpp @@ -85,9 +85,9 @@ void RicWellPathFractureReportItem::setHeightAndHalfLength(double height, double //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicWellPathFractureReportItem::setAreaWeightedTransmissibility(double transmissibility) +void RicWellPathFractureReportItem::setAreaWeightedPermeability(double permeability) { - m_km = transmissibility; + m_km = permeability; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.h b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.h index 9e47a4e483..e9a6dc6910 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.h +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureReportItem.h @@ -33,7 +33,7 @@ public: void setData(double trans, size_t connCount, double area); void setWidthAndConductivity(double width, double conductivity); void setHeightAndHalfLength(double height, double halfLength); - void setAreaWeightedTransmissibility(double transmissibility); + void setAreaWeightedPermeability(double permeability); void setUnitSystem(RiaEclipseUnitTools::UnitSystem unitSystem); void setPressureDepletionParameters(bool performPressureDepletionScaling, QString timeStepString, QString wbhpString, double userWBHP, double actualWBHP, double minPressureDrop, double maxPressureDrop); diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureTextReportFeatureImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureTextReportFeatureImpl.cpp index 2ef8bf3732..e87e143a02 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureTextReportFeatureImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathFractureTextReportFeatureImpl.cpp @@ -709,7 +709,6 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio std::vector header = { RifEclipseOutputTableColumn("Well"), RifEclipseOutputTableColumn("Fracture"), - RifEclipseOutputTableColumn("WBHP Source"), RifEclipseOutputTableColumn("Actual WBHP"), RifEclipseOutputTableColumn("Min Pressure Drop"), RifEclipseOutputTableColumn("Max Pressure Drop") @@ -724,6 +723,7 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio if (!createdTable) { formatter.comment(QString("Pressure Depletion Time step: %1").arg(reportItem.pressureDepletionTimeStepString())); + formatter.comment(QString("WBHP Source: %1").arg(reportItem.pressureDepletionWBHPString())); formatter.comment(QString("User Defined WBHP: %1").arg(reportItem.pressureDepletionUserWBHP())); formatter.header(header); @@ -732,7 +732,6 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio } formatter.add(reportItem.wellPathNameForExport()); formatter.add(reportItem.fractureName()); - formatter.add(reportItem.pressureDepletionWBHPString()); formatter.add(reportItem.pressureDepletionActualWBHP()); formatter.add(reportItem.pressureDepletionMinPressureDrop()); formatter.add(reportItem.pressureDepletionMaxPressureDrop()); diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.cpp index 710cb1dd64..9f3cd5396a 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.cpp +++ b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.cpp @@ -144,15 +144,28 @@ double RigEclipseToStimPlanCalculator::totalEclipseAreaOpenForFlow() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RigEclipseToStimPlanCalculator::areaWeightedMatrixTransmissibility() const +double RigEclipseToStimPlanCalculator::areaWeightedMatrixPermeability() const { RiaWeightedMeanCalculator calc; - for (const auto& singleCellCalc : m_singleFractureCellCalculators) { - const RigEclipseToStimPlanCellTransmissibilityCalculator& calulator = singleCellCalc.second; + std::map reservoirCellAndIntersectedArea; - calc.addValueAndWeight(calulator.aggregatedMatrixTransmissibility(), calulator.areaOpenForFlow()); + for (const auto& singleCellCalc : m_singleFractureCellCalculators) + { + const RigEclipseToStimPlanCellTransmissibilityCalculator& calulator = singleCellCalc.second; + + const std::vector& areas = calulator.contributingEclipseCellIntersectionAreas(); + const std::vector& permeabilities = calulator.contributingEclipseCellPermeabilities(); + + if (areas.size() == permeabilities.size()) + { + for (size_t i = 0; i < areas.size(); i++) + { + calc.addValueAndWeight(permeabilities[i], areas[i]); + } + } + } } return calc.weightedMean(); @@ -222,8 +235,8 @@ double RigEclipseToStimPlanCalculator::areaWeightedConductivity() const //-------------------------------------------------------------------------------------------------- double RigEclipseToStimPlanCalculator::longestYSectionOpenForFlow() const { - // For each I, find the longest aggregated distance along J with continuous fracture cells with conductivity above zero - // connected to Eclipse cells open for flow + // For each I, find the longest aggregated distance along J with continuous fracture cells with conductivity above + // zero connected to Eclipse cells open for flow double longestRange = 0.0; diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.h b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.h index 0ac4f23d4e..9e93c1dac8 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.h +++ b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCalculator.h @@ -54,7 +54,7 @@ public: // Truncated parts of the fracture are not included double totalEclipseAreaOpenForFlow() const; - double areaWeightedMatrixTransmissibility() const; + double areaWeightedMatrixPermeability() const; double areaWeightedWidth() const; double areaWeightedConductivity() const; double longestYSectionOpenForFlow() const; diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp index a7a10d470a..c80668a664 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp +++ b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.cpp @@ -72,6 +72,22 @@ const std::vector& RigEclipseToStimPlanCellTransmissibilityCalculator::c return m_contributingEclipseCellTransmissibilities; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::vector& RigEclipseToStimPlanCellTransmissibilityCalculator::contributingEclipseCellIntersectionAreas() const +{ + return m_contributingEclipseCellAreas; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::vector& RigEclipseToStimPlanCellTransmissibilityCalculator::contributingEclipseCellPermeabilities() const +{ + return m_contributingEclipseCellPermeabilities; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -280,6 +296,8 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM } } + double matrixPermeability = 0.0; + if (isActive) { double permX = dataAccessObjectPermX->cellScalarGlobIdx(reservoirCellIndex); @@ -305,11 +323,14 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM transmissibility = sqrt(transmissibility_X * transmissibility_X + transmissibility_Y * transmissibility_Y + transmissibility_Z * transmissibility_Z); + + matrixPermeability = RigFractureTransmissibilityEquations::matrixPermeability(permX, permY, NTG); } m_globalIndiciesToContributingEclipseCells.push_back(reservoirCellIndex); m_contributingEclipseCellTransmissibilities.push_back(transmissibility); m_contributingEclipseCellAreas.push_back(fractureArea); + m_contributingEclipseCellPermeabilities.push_back(matrixPermeability); } } diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h index c6e4ebce01..e6b759c081 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h +++ b/ApplicationCode/ReservoirDataModel/Completions/RigEclipseToStimPlanCellTransmissibilityCalculator.h @@ -54,6 +54,8 @@ public: // These three vectors have the same size const std::vector& globalIndiciesToContributingEclipseCells() const; const std::vector& contributingEclipseCellTransmissibilities() const; + const std::vector& contributingEclipseCellIntersectionAreas() const; + const std::vector& contributingEclipseCellPermeabilities() const; double areaOpenForFlow() const; double aggregatedMatrixTransmissibility() const; @@ -82,4 +84,5 @@ private: std::vector m_globalIndiciesToContributingEclipseCells; std::vector m_contributingEclipseCellTransmissibilities; std::vector m_contributingEclipseCellAreas; + std::vector m_contributingEclipseCellPermeabilities; }; diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp index 509f5ab033..40145f63ec 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp +++ b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.cpp @@ -176,6 +176,16 @@ double RigFractureTransmissibilityEquations::effectiveMatrixToWellTransPDDHC(dou return 0.0; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigFractureTransmissibilityEquations::matrixPermeability(double permx, double permy, double NTG) +{ + double permxy = cvf::Math::sqrt(permx * permy); + + return permxy * NTG; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h index 91f180b42c..9d30337964 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h +++ b/ApplicationCode/ReservoirDataModel/Completions/RigFractureTransmissibilityEquations.h @@ -63,6 +63,8 @@ public: static double effectiveMatrixToWellTransPDDHC(double sumOriginalMatrixToFractureTrans, double effectiveInternalFractureToWellTrans); + static double matrixPermeability(double permx, double permy, double NTG); + private: static double centerToEdgeFractureCellTrans(double conductivity, double sideLengthParallellTrans,