mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1487 - pre-proto - Making functions for calculating relevant transmissibilities static, and using cell sizes, conductivities etc as inputs instead of entire RigStimPlanCell
This commit is contained in:
parent
c914071d33
commit
c7354e8548
@ -656,7 +656,14 @@ void RifFractureExportTools::printTransmissibilityFractureToWell(const std::vect
|
||||
const RigStimPlanFracTemplateCell& stimPlanCell = fracTemplateStimPlan->stimPlanCellFromIndex(fracTemplateStimPlan->getGlobalIndexFromIJ(wellCenterStimPlanCellIJ.first, wellCenterStimPlanCellIJ.second));
|
||||
|
||||
RigFractureTransCalc transmissibilityCalculator(caseToApply, fracture);
|
||||
double linTransInStimPlanCell = transmissibilityCalculator.computeLinearTransmissibilityToWellinStimPlanCell(stimPlanCell, perforationLengthVert, perforationLengthHor);
|
||||
double linTransInStimPlanCell = transmissibilityCalculator.computeLinearTransmissibilityToWellinStimPlanCell(stimPlanCell.getConductivtyValue(),
|
||||
stimPlanCell.cellSizeX(),
|
||||
stimPlanCell.cellSizeZ(),
|
||||
perforationLengthVert,
|
||||
perforationLengthHor,
|
||||
fracture->perforationEfficiency,
|
||||
fracture->attachedFractureDefinition()->skinFactor(),
|
||||
transmissibilityCalculator.cDarcy());
|
||||
|
||||
out << qSetFieldWidth(10);
|
||||
out << QString::number(linTransInStimPlanCell, 'f', 2);
|
||||
@ -681,13 +688,17 @@ void RifFractureExportTools::printTransmissibilityFractureToWell(const std::vect
|
||||
out << wellCenterStimPlanCellIJ.first;
|
||||
out << wellCenterStimPlanCellIJ.second;
|
||||
|
||||
//RigStimPlanCell* stimPlanCell = fracTemplateStimPlan->getStimPlanCellAtIJ(wellCenterStimPlanCellIJ.first, wellCenterStimPlanCellIJ.second);
|
||||
const RigStimPlanFracTemplateCell& stimPlanCell = fracTemplateStimPlan->stimPlanCellFromIndex(fracTemplateStimPlan->getGlobalIndexFromIJ(wellCenterStimPlanCellIJ.first, wellCenterStimPlanCellIJ.second));
|
||||
|
||||
//TODO: Error - stimPlanCell blir ikke riktig...
|
||||
|
||||
RigFractureTransCalc transmissibilityCalculator(caseToApply, fracture);
|
||||
double radTransInStimPlanCell = transmissibilityCalculator.computeRadialTransmissibilityToWellinStimPlanCell(stimPlanCell);
|
||||
double radTransInStimPlanCell = transmissibilityCalculator.computeRadialTransmissibilityToWellinStimPlanCell(stimPlanCell.getConductivtyValue(),
|
||||
stimPlanCell.cellSizeX(),
|
||||
stimPlanCell.cellSizeZ(),
|
||||
fracture->wellRadius(),
|
||||
fracture->attachedFractureDefinition()->skinFactor(),
|
||||
fracture->azimuth,
|
||||
fracture->wellAzimuthAtFracturePosition(),
|
||||
transmissibilityCalculator.cDarcy());
|
||||
|
||||
out << qSetFieldWidth(10);
|
||||
out << QString::number(radTransInStimPlanCell, 'f', 2);
|
||||
|
@ -203,9 +203,9 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM
|
||||
|
||||
double fractureAreaWeightedlength = totalAreaXLength / fractureArea;
|
||||
|
||||
double transmissibility_X = calculateMatrixTransmissibility(permY, NTG, Ay, dx, m_fractureSkinFactor, fractureAreaWeightedlength);
|
||||
double transmissibility_Y = calculateMatrixTransmissibility(permX, NTG, Ax, dy, m_fractureSkinFactor, fractureAreaWeightedlength);
|
||||
double transmissibility_Z = calculateMatrixTransmissibility(permZ, 1.0, Az, dz, m_fractureSkinFactor, fractureAreaWeightedlength);
|
||||
double transmissibility_X = calculateMatrixTransmissibility(permY, NTG, Ay, dx, m_fractureSkinFactor, fractureAreaWeightedlength, m_cDarcy);
|
||||
double transmissibility_Y = calculateMatrixTransmissibility(permX, NTG, Ax, dy, m_fractureSkinFactor, fractureAreaWeightedlength, m_cDarcy);
|
||||
double transmissibility_Z = calculateMatrixTransmissibility(permZ, 1.0, Az, dz, m_fractureSkinFactor, fractureAreaWeightedlength, m_cDarcy);
|
||||
|
||||
double transmissibility = sqrt(transmissibility_X * transmissibility_X
|
||||
+ transmissibility_Y * transmissibility_Y
|
||||
@ -290,12 +290,13 @@ double RigEclipseToStimPlanCellTransmissibilityCalculator::calculateMatrixTransm
|
||||
double A,
|
||||
double cellSizeLength,
|
||||
double skinfactor,
|
||||
double fractureAreaWeightedlength)
|
||||
double fractureAreaWeightedlength,
|
||||
double cDarcy)
|
||||
{
|
||||
double transmissibility;
|
||||
|
||||
double slDivPi = (skinfactor * fractureAreaWeightedlength) / cvf::PI_D;
|
||||
transmissibility = 8 * m_cDarcy * (perm * NTG) * A / (cellSizeLength + slDivPi);
|
||||
transmissibility = 8 * cDarcy * (perm * NTG) * A / (cellSizeLength + slDivPi);
|
||||
|
||||
return transmissibility;
|
||||
}
|
||||
|
@ -50,12 +50,13 @@ private:
|
||||
cvf::Vec3d & localX,
|
||||
cvf::Vec3d & localY,
|
||||
cvf::Vec3d & localZ);
|
||||
double calculateMatrixTransmissibility(double permX,
|
||||
static double calculateMatrixTransmissibility(double permX,
|
||||
double NTG,
|
||||
double Ay,
|
||||
double dx,
|
||||
double skinfactor,
|
||||
double fractureAreaWeightedlength);
|
||||
double fractureAreaWeightedlength,
|
||||
double cDarcy);
|
||||
|
||||
const RimEclipseCase* m_case;
|
||||
double m_cDarcy;
|
||||
|
@ -587,22 +587,28 @@ double RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(doubl
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell)
|
||||
double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(double stimPlanCellConductivity,
|
||||
double stimPlanCellSizeX,
|
||||
double stimPlanCellSizeZ,
|
||||
double wellRadius,
|
||||
double skinFactor,
|
||||
double fractureAzimuth,
|
||||
double wellAzimuthAtFracturePosition,
|
||||
double cDarcyForRelevantUnit)
|
||||
{
|
||||
//TODO: Ta inn relevante parametre, ikke hele brønncella
|
||||
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return cvf::UNDEFINED_DOUBLE;
|
||||
|
||||
double areaScalingFactor = 1.0;
|
||||
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::AZIMUTH)
|
||||
|
||||
double angleinRad = cvf::Math::toRadians(fractureAzimuth - (wellAzimuthAtFracturePosition - 90));
|
||||
if ((angleinRad-90.0) > 0.01)
|
||||
{
|
||||
areaScalingFactor = 1 / cvf::Math::cos((m_fracture->azimuth() - (m_fracture->wellAzimuthAtFracturePosition()-90) ));
|
||||
areaScalingFactor = 1 / cvf::Math::cos(angleinRad);
|
||||
}
|
||||
|
||||
double ro = 0.14 * cvf::Math::sqrt(
|
||||
pow(stimPlanCell.cellSizeX(), 2.0) + pow(stimPlanCell.cellSizeZ(), 2));
|
||||
pow(stimPlanCellSizeX, 2.0) + pow(stimPlanCellSizeZ, 2));
|
||||
|
||||
double Tc = 2 * cvf::PI_D * cDarcy() * stimPlanCell.getConductivtyValue() /
|
||||
(log(ro / m_fracture->wellRadius()) + m_fracture->attachedFractureDefinition()->skinFactor() );
|
||||
double Tc = 2 * cvf::PI_D * cDarcyForRelevantUnit * stimPlanCellConductivity /
|
||||
(log(ro / wellRadius) + skinFactor );
|
||||
|
||||
Tc = Tc * areaScalingFactor;
|
||||
|
||||
@ -612,20 +618,25 @@ double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(c
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RigFractureTransCalc::computeLinearTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell, double perforationLengthVertical, double perforationLengthHorizontal)
|
||||
double RigFractureTransCalc::computeLinearTransmissibilityToWellinStimPlanCell(double stimPlanConductivity,
|
||||
double stimPlanCellSizeX,
|
||||
double stimPlanCellSizeZ,
|
||||
double perforationLengthVertical,
|
||||
double perforationLengthHorizontal,
|
||||
double perforationEfficiency,
|
||||
double skinfactor,
|
||||
double cDarcyForRelevantUnit)
|
||||
{
|
||||
//TODO: Ta inn relevante parametre, ikke hele brønncella
|
||||
double TcPrefix = 8 * cDarcyForRelevantUnit * stimPlanConductivity;
|
||||
|
||||
double TcPrefix = 8 * cDarcy() * stimPlanCell.getConductivtyValue();
|
||||
|
||||
double DzPerf = perforationLengthVertical * m_fracture->perforationEfficiency();
|
||||
double DxPerf = perforationLengthHorizontal * m_fracture->perforationEfficiency();
|
||||
double DzPerf = perforationLengthVertical * perforationEfficiency;
|
||||
double DxPerf = perforationLengthHorizontal * perforationEfficiency;
|
||||
|
||||
double TcZ = TcPrefix * DzPerf /
|
||||
(stimPlanCell.cellSizeX() + m_fracture->attachedFractureDefinition()->skinFactor() * DzPerf / cvf::PI_D);
|
||||
(stimPlanCellSizeX + skinfactor * DzPerf / cvf::PI_D);
|
||||
|
||||
double TcX = TcPrefix * DxPerf /
|
||||
(stimPlanCell.cellSizeZ() + m_fracture->attachedFractureDefinition()->skinFactor() * DxPerf / cvf::PI_D);
|
||||
(stimPlanCellSizeZ + skinfactor* DxPerf / cvf::PI_D);
|
||||
|
||||
double Tc = cvf::Math::sqrt(pow(TcX, 2) + pow(TcZ, 2));
|
||||
return Tc;
|
||||
|
@ -55,13 +55,28 @@ public:
|
||||
std::vector<RigFracturedEclipseCellExportData> computeUpscaledPropertyFromStimPlan(QString resultName, QString resultUnit, size_t timeStepIndex);
|
||||
|
||||
// Calculations based on StimPlan grid
|
||||
static double computeStimPlanCellTransmissibilityInFracture(double conductivity, double sideLengthParallellTrans, double sideLengthNormalTrans);
|
||||
static double computeStimPlanCellTransmissibilityInFracture(double conductivity,
|
||||
double sideLengthParallellTrans,
|
||||
double sideLengthNormalTrans);
|
||||
|
||||
double computeRadialTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell);
|
||||
double computeLinearTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell,
|
||||
static double computeRadialTransmissibilityToWellinStimPlanCell(double stimPlanCellConductivity,
|
||||
double stimPlanCellSizeX,
|
||||
double stimPlanCellSizeZ,
|
||||
double wellRadius,
|
||||
double skinFactor,
|
||||
double fractureAzimuth,
|
||||
double wellAzimuthAtFracturePosition,
|
||||
double cDarcyForRelevantUnit);
|
||||
|
||||
static double computeLinearTransmissibilityToWellinStimPlanCell(double stimPlanConductivity,
|
||||
double stimPlanCellSizeX,
|
||||
double stimPlanCellSizeZ,
|
||||
double perforationLengthVertical,
|
||||
double perforationLengthHorizontal);
|
||||
|
||||
double perforationLengthHorizontal,
|
||||
double perforationEfficiency,
|
||||
double skinfactor,
|
||||
double cDarcyForRelevantUnit);
|
||||
|
||||
double cDarcy();
|
||||
|
||||
private:
|
||||
@ -91,3 +106,4 @@ private:
|
||||
RimDefines::UnitSystem m_unitForCalculation;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user