mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge branch 'dev' into dev-deeper
This commit is contained in:
commit
63d952746d
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user