Merge branch 'dev' into dev-deeper

This commit is contained in:
Bjørn Erik Jensen 2018-11-21 15:21:49 +01:00
commit 63d952746d
10 changed files with 64 additions and 17 deletions

View File

@ -338,7 +338,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
// 2: Calculate new external transmissibilities // 2: Calculate new external transmissibilities
scaledCondenser.calculateCondensedTransmissibilities(); scaledCondenser.calculateCondensedTransmissibilities();
{ // 3: Hřgstřl correction. { // 3: H<EFBFBD>gst<EFBFBD>l correction.
// a. Calculate new effective fracture to well transmissiblities // a. Calculate new effective fracture to well transmissiblities
std::map<size_t, double> fictitiousFractureToWellTransmissibilities = std::map<size_t, double> fictitiousFractureToWellTransmissibilities =
@ -720,10 +720,8 @@ void RicExportFractureCompletionsImpl::calculateAndSetReportItemData(
const RigEclipseToStimPlanCalculator& eclToFractureCalc, const RigEclipseToStimPlanCalculator& eclToFractureCalc,
RicWellPathFractureReportItem& reportItem) RicWellPathFractureReportItem& reportItem)
{ {
double aggregatedTransmissibility = sumUpTransmissibilities(allCompletionsForOneFracture); double areaWeightedMatrixPermeability = eclToFractureCalc.areaWeightedMatrixPermeability();
reportItem.setAreaWeightedPermeability(areaWeightedMatrixPermeability);
double areaWeightedMatrixTransmissibility = eclToFractureCalc.areaWeightedMatrixTransmissibility();
reportItem.setAreaWeightedTransmissibility(areaWeightedMatrixTransmissibility);
double totalAreaOpenForFlow = eclToFractureCalc.totalEclipseAreaOpenForFlow(); double totalAreaOpenForFlow = eclToFractureCalc.totalEclipseAreaOpenForFlow();
double areaWeightedConductivity = eclToFractureCalc.areaWeightedConductivity(); double areaWeightedConductivity = eclToFractureCalc.areaWeightedConductivity();
@ -741,6 +739,7 @@ void RicExportFractureCompletionsImpl::calculateAndSetReportItemData(
reportItem.setHeightAndHalfLength(height, halfLength); reportItem.setHeightAndHalfLength(height, halfLength);
} }
double aggregatedTransmissibility = sumUpTransmissibilities(allCompletionsForOneFracture);
reportItem.setData(aggregatedTransmissibility, allCompletionsForOneFracture.size(), totalAreaOpenForFlow); reportItem.setData(aggregatedTransmissibility, allCompletionsForOneFracture.size(), totalAreaOpenForFlow);
reportItem.setWidthAndConductivity(eclToFractureCalc.areaWeightedWidth(), areaWeightedConductivity); reportItem.setWidthAndConductivity(eclToFractureCalc.areaWeightedWidth(), areaWeightedConductivity);

View File

@ -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;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -33,7 +33,7 @@ public:
void setData(double trans, size_t connCount, double area); void setData(double trans, size_t connCount, double area);
void setWidthAndConductivity(double width, double conductivity); void setWidthAndConductivity(double width, double conductivity);
void setHeightAndHalfLength(double height, double halfLength); void setHeightAndHalfLength(double height, double halfLength);
void setAreaWeightedTransmissibility(double transmissibility); void setAreaWeightedPermeability(double permeability);
void setUnitSystem(RiaEclipseUnitTools::UnitSystem unitSystem); void setUnitSystem(RiaEclipseUnitTools::UnitSystem unitSystem);
void setPressureDepletionParameters(bool performPressureDepletionScaling, QString timeStepString, QString wbhpString, double userWBHP, double actualWBHP, double minPressureDrop, double maxPressureDrop); void setPressureDepletionParameters(bool performPressureDepletionScaling, QString timeStepString, QString wbhpString, double userWBHP, double actualWBHP, double minPressureDrop, double maxPressureDrop);

View File

@ -709,7 +709,6 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio
std::vector<RifEclipseOutputTableColumn> header = { std::vector<RifEclipseOutputTableColumn> header = {
RifEclipseOutputTableColumn("Well"), RifEclipseOutputTableColumn("Well"),
RifEclipseOutputTableColumn("Fracture"), RifEclipseOutputTableColumn("Fracture"),
RifEclipseOutputTableColumn("WBHP Source"),
RifEclipseOutputTableColumn("Actual WBHP"), RifEclipseOutputTableColumn("Actual WBHP"),
RifEclipseOutputTableColumn("Min Pressure Drop"), RifEclipseOutputTableColumn("Min Pressure Drop"),
RifEclipseOutputTableColumn("Max Pressure Drop") RifEclipseOutputTableColumn("Max Pressure Drop")
@ -724,6 +723,7 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio
if (!createdTable) if (!createdTable)
{ {
formatter.comment(QString("Pressure Depletion Time step: %1").arg(reportItem.pressureDepletionTimeStepString())); 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.comment(QString("User Defined WBHP: %1").arg(reportItem.pressureDepletionUserWBHP()));
formatter.header(header); formatter.header(header);
@ -732,7 +732,6 @@ QString RicWellPathFractureTextReportFeatureImpl::createFracturePressureDepletio
} }
formatter.add(reportItem.wellPathNameForExport()); formatter.add(reportItem.wellPathNameForExport());
formatter.add(reportItem.fractureName()); formatter.add(reportItem.fractureName());
formatter.add(reportItem.pressureDepletionWBHPString());
formatter.add(reportItem.pressureDepletionActualWBHP()); formatter.add(reportItem.pressureDepletionActualWBHP());
formatter.add(reportItem.pressureDepletionMinPressureDrop()); formatter.add(reportItem.pressureDepletionMinPressureDrop());
formatter.add(reportItem.pressureDepletionMaxPressureDrop()); formatter.add(reportItem.pressureDepletionMaxPressureDrop());

View File

@ -144,15 +144,28 @@ double RigEclipseToStimPlanCalculator::totalEclipseAreaOpenForFlow() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double RigEclipseToStimPlanCalculator::areaWeightedMatrixTransmissibility() const double RigEclipseToStimPlanCalculator::areaWeightedMatrixPermeability() const
{ {
RiaWeightedMeanCalculator<double> calc; RiaWeightedMeanCalculator<double> calc;
for (const auto& singleCellCalc : m_singleFractureCellCalculators)
{ {
const RigEclipseToStimPlanCellTransmissibilityCalculator& calulator = singleCellCalc.second; std::map<size_t, double> reservoirCellAndIntersectedArea;
calc.addValueAndWeight(calulator.aggregatedMatrixTransmissibility(), calulator.areaOpenForFlow()); for (const auto& singleCellCalc : m_singleFractureCellCalculators)
{
const RigEclipseToStimPlanCellTransmissibilityCalculator& calulator = singleCellCalc.second;
const std::vector<double>& areas = calulator.contributingEclipseCellIntersectionAreas();
const std::vector<double>& 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(); return calc.weightedMean();
@ -222,8 +235,8 @@ double RigEclipseToStimPlanCalculator::areaWeightedConductivity() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double RigEclipseToStimPlanCalculator::longestYSectionOpenForFlow() const double RigEclipseToStimPlanCalculator::longestYSectionOpenForFlow() const
{ {
// For each I, find the longest aggregated distance along J with continuous fracture cells with conductivity above zero // For each I, find the longest aggregated distance along J with continuous fracture cells with conductivity above
// connected to Eclipse cells open for flow // zero connected to Eclipse cells open for flow
double longestRange = 0.0; double longestRange = 0.0;

View File

@ -54,7 +54,7 @@ public:
// Truncated parts of the fracture are not included // Truncated parts of the fracture are not included
double totalEclipseAreaOpenForFlow() const; double totalEclipseAreaOpenForFlow() const;
double areaWeightedMatrixTransmissibility() const; double areaWeightedMatrixPermeability() const;
double areaWeightedWidth() const; double areaWeightedWidth() const;
double areaWeightedConductivity() const; double areaWeightedConductivity() const;
double longestYSectionOpenForFlow() const; double longestYSectionOpenForFlow() const;

View File

@ -72,6 +72,22 @@ const std::vector<double>& RigEclipseToStimPlanCellTransmissibilityCalculator::c
return m_contributingEclipseCellTransmissibilities; return m_contributingEclipseCellTransmissibilities;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<double>& RigEclipseToStimPlanCellTransmissibilityCalculator::contributingEclipseCellIntersectionAreas() const
{
return m_contributingEclipseCellAreas;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<double>& RigEclipseToStimPlanCellTransmissibilityCalculator::contributingEclipseCellPermeabilities() const
{
return m_contributingEclipseCellPermeabilities;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -280,6 +296,8 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM
} }
} }
double matrixPermeability = 0.0;
if (isActive) if (isActive)
{ {
double permX = dataAccessObjectPermX->cellScalarGlobIdx(reservoirCellIndex); double permX = dataAccessObjectPermX->cellScalarGlobIdx(reservoirCellIndex);
@ -305,11 +323,14 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM
transmissibility = sqrt(transmissibility_X * transmissibility_X + transmissibility_Y * transmissibility_Y + transmissibility = sqrt(transmissibility_X * transmissibility_X + transmissibility_Y * transmissibility_Y +
transmissibility_Z * transmissibility_Z); transmissibility_Z * transmissibility_Z);
matrixPermeability = RigFractureTransmissibilityEquations::matrixPermeability(permX, permY, NTG);
} }
m_globalIndiciesToContributingEclipseCells.push_back(reservoirCellIndex); m_globalIndiciesToContributingEclipseCells.push_back(reservoirCellIndex);
m_contributingEclipseCellTransmissibilities.push_back(transmissibility); m_contributingEclipseCellTransmissibilities.push_back(transmissibility);
m_contributingEclipseCellAreas.push_back(fractureArea); m_contributingEclipseCellAreas.push_back(fractureArea);
m_contributingEclipseCellPermeabilities.push_back(matrixPermeability);
} }
} }

View File

@ -54,6 +54,8 @@ public:
// These three vectors have the same size // These three vectors have the same size
const std::vector<size_t>& globalIndiciesToContributingEclipseCells() const; const std::vector<size_t>& globalIndiciesToContributingEclipseCells() const;
const std::vector<double>& contributingEclipseCellTransmissibilities() const; const std::vector<double>& contributingEclipseCellTransmissibilities() const;
const std::vector<double>& contributingEclipseCellIntersectionAreas() const;
const std::vector<double>& contributingEclipseCellPermeabilities() const;
double areaOpenForFlow() const; double areaOpenForFlow() const;
double aggregatedMatrixTransmissibility() const; double aggregatedMatrixTransmissibility() const;
@ -82,4 +84,5 @@ private:
std::vector<size_t> m_globalIndiciesToContributingEclipseCells; std::vector<size_t> m_globalIndiciesToContributingEclipseCells;
std::vector<double> m_contributingEclipseCellTransmissibilities; std::vector<double> m_contributingEclipseCellTransmissibilities;
std::vector<double> m_contributingEclipseCellAreas; std::vector<double> m_contributingEclipseCellAreas;
std::vector<double> m_contributingEclipseCellPermeabilities;
}; };

View File

@ -176,6 +176,16 @@ double RigFractureTransmissibilityEquations::effectiveMatrixToWellTransPDDHC(dou
return 0.0; return 0.0;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RigFractureTransmissibilityEquations::matrixPermeability(double permx, double permy, double NTG)
{
double permxy = cvf::Math::sqrt(permx * permy);
return permxy * NTG;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -63,6 +63,8 @@ public:
static double effectiveMatrixToWellTransPDDHC(double sumOriginalMatrixToFractureTrans, static double effectiveMatrixToWellTransPDDHC(double sumOriginalMatrixToFractureTrans,
double effectiveInternalFractureToWellTrans); double effectiveInternalFractureToWellTrans);
static double matrixPermeability(double permx, double permy, double NTG);
private: private:
static double centerToEdgeFractureCellTrans(double conductivity, static double centerToEdgeFractureCellTrans(double conductivity,
double sideLengthParallellTrans, double sideLengthParallellTrans,