1339 - pre-proto - Starting functions for computing flow from fracture to well

This commit is contained in:
astridkbjorke 2017-03-21 10:49:24 +01:00
parent 96372c9077
commit 6dadf95713
2 changed files with 60 additions and 8 deletions

View File

@ -281,6 +281,7 @@ cvf::Mat4f RimFracture::transformMatrix()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
//TODO: Make static and move to another class
void RimFracture::computeTransmissibility(RimEclipseCase* caseToApply)
{
//Get correct unit system:
@ -537,20 +538,15 @@ void RimFracture::computeUpscaledPropertyFromStimPlan(RimEclipseCase* caseToAppl
std::vector<std::vector<cvf::Vec3d> > stimPlanCellsAsPolygons;
std::vector<double> stimPlanParameterValues;
fracTemplateStimPlan->getStimPlanDataAsPolygonsAndValues(stimPlanCellsAsPolygons, stimPlanParameterValues, resultName, resultUnit, timeStepIndex);
//TODO: A lot of common code with function above... Can be cleaned up...?
std::vector<size_t> fracCells = getPotentiallyFracturedCells();
RigEclipseCaseData* eclipseCaseData = caseToApply->eclipseCaseData();
RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS;
RimReservoirCellResultsStorage* gridCellResults = caseToApply->results(porosityModel);
RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel);
std::vector<RigFractureData> fracDataVec;
for (size_t fracCell : fracCells)
@ -689,10 +685,15 @@ void RimFracture::computeFlowInFracture(RimEclipseCase* caseToApply)
if (!attachedFractureDefinition()) return;
RimStimPlanFractureTemplate* fracTemplateStimPlan;
RimEllipseFractureTemplate* fracTemplateEllipse;
if (dynamic_cast<RimStimPlanFractureTemplate*>(attachedFractureDefinition()))
{
fracTemplateStimPlan = dynamic_cast<RimStimPlanFractureTemplate*>(attachedFractureDefinition());
}
else if (dynamic_cast<RimEllipseFractureTemplate*>(attachedFractureDefinition()))
{
fracTemplateEllipse = dynamic_cast<RimEllipseFractureTemplate*>(attachedFractureDefinition());
}
else return;
//Get correct unit system:
@ -731,18 +732,66 @@ void RimFracture::computeFlowInFracture(RimEclipseCase* caseToApply)
for (size_t fracCell : fracCells)
{
double K; //Conductivity
double w; //Fracture width
if (fracTemplateEllipse)
{
//TODO: UNit handling...
K = fracTemplateEllipse->fractureConductivity();
w = fracTemplateEllipse->width();
}
else if (fracTemplateStimPlan)
{
QString resultName = "CONDUCTIVITY";
QString resultUnit = "md-m";
size_t timeStepIndex = 0; //TODO...
double upscaledAritmStimPlanValue = cvf::UNDEFINED_DOUBLE;
double upscaledHarmStimPlanValue = cvf::UNDEFINED_DOUBLE;
caf::AppEnum< RimDefines::UnitSystem > unitSystem = RimDefines::UNITS_METRIC;
computeUpscaledPropertyFromStimPlanForEclipseCell(upscaledAritmStimPlanValue, upscaledHarmStimPlanValue, caseToApply, resultName, resultUnit, timeStepIndex, unitSystem, fracCell);
K = (upscaledAritmStimPlanValue + upscaledHarmStimPlanValue) / 2;
resultName = "WIDTH";
resultUnit = "cm"; //TODO handle mm and cm!
computeUpscaledPropertyFromStimPlanForEclipseCell(upscaledAritmStimPlanValue, upscaledHarmStimPlanValue, caseToApply, resultName, resultUnit, timeStepIndex, unitSystem, fracCell);
w = (upscaledAritmStimPlanValue + upscaledHarmStimPlanValue) / 2;
}
}
m_rigFracture->setFractureData(fracDataVec);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFracture::computeFlowIntoTransverseWell(RimEclipseCase* caseToApply)
{
//TODO: A lot of common code with function for calculating transmissibility...
if (!attachedFractureDefinition()) return;
if (attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return;
double wellRadius = cvf::UNDEFINED_DOUBLE;
if (attachedFractureDefinition()->orientation == RimFractureTemplate::TRANSVERSE_WELL_PATH)
{
wellRadius = 0.0;//TODO read this value...
}
if (attachedFractureDefinition()->orientation == RimFractureTemplate::AZIMUTH)
{
}
}
//--------------------------------------------------------------------------------------------------
///

View File

@ -88,6 +88,7 @@ public:
void computeUpscaledPropertyFromStimPlan(RimEclipseCase* caseToApply, QString resultName, QString resultUnit, size_t timeStepIndex);
void computeUpscaledPropertyFromStimPlanForEclipseCell(double &upscaledAritmStimPlanValue, double &upscaledHarmStimPlanValue, RimEclipseCase* caseToApply, QString resultName, QString resultUnit, size_t timeStepIndex, caf::AppEnum< RimDefines::UnitSystem > unitSystem, size_t cellIndex);
void computeFlowInFracture(RimEclipseCase* caseToApply);
void computeFlowIntoTransverseWell(RimEclipseCase* caseToApply);
double areaWeightedHarmonicAverage(std::vector<double> areaOfFractureParts, std::vector<double> valuesForFractureParts);
double areaWeightedArithmeticAverage(std::vector<double> areaOfFractureParts, std::vector<double> valuesForFractureParts);
@ -97,6 +98,8 @@ public:
cvf::Vec3d fracturePosition() const;
virtual void updateAzimuthFromFractureDefinition() = 0;
virtual double wellAzimuthAtFracturePosition() = 0;
protected:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override;