mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1339 - pre-proto - Starting to compute the transmissibility for half a cell. Not yet completed.
This commit is contained in:
parent
b10bdf6f42
commit
c789b968f6
@ -36,6 +36,8 @@
|
|||||||
#include "cafAppEnum.h"
|
#include "cafAppEnum.h"
|
||||||
#include "RigCell.h"
|
#include "RigCell.h"
|
||||||
#include "RigMainGrid.h"
|
#include "RigMainGrid.h"
|
||||||
|
#include "cvfMath.h"
|
||||||
|
#include "RimDefines.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -79,25 +81,6 @@ RigFractureTransCalc::RigFractureTransCalc(RimEclipseCase* caseToApply, RimFract
|
|||||||
//TODO: Make static and move to another class
|
//TODO: Make static and move to another class
|
||||||
void RigFractureTransCalc::computeTransmissibility()
|
void RigFractureTransCalc::computeTransmissibility()
|
||||||
{
|
{
|
||||||
// //Get correct unit system:
|
|
||||||
// RigEclipseCaseData::UnitsType caseUnit = m_case->eclipseCaseData()->unitsType();
|
|
||||||
// RimDefines::UnitSystem unitForExport;
|
|
||||||
//
|
|
||||||
// if (caseUnit == RigEclipseCaseData::UNITS_METRIC)
|
|
||||||
// {
|
|
||||||
// RiaLogging::debug(QString("Calculating transmissibilities in metric units"));
|
|
||||||
// unitForExport = RimDefines::UNITS_METRIC;
|
|
||||||
// }
|
|
||||||
// else if (caseUnit == RigEclipseCaseData::UNITS_FIELD)
|
|
||||||
// {
|
|
||||||
// RiaLogging::debug(QString("Calculating transmissibilities in field units"));
|
|
||||||
// unitForExport = RimDefines::UNITS_FIELD;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// RiaLogging::error(QString("Unit system for case not supported for fracture export."));
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (m_fracture->attachedFractureDefinition()->fractureConductivity == RimFractureTemplate::FINITE_CONDUCTIVITY)
|
if (m_fracture->attachedFractureDefinition()->fractureConductivity == RimFractureTemplate::FINITE_CONDUCTIVITY)
|
||||||
{
|
{
|
||||||
@ -105,7 +88,6 @@ void RigFractureTransCalc::computeTransmissibility()
|
|||||||
RiaLogging::warning(QString("Performing calculation for infinite conductivity instead."));
|
RiaLogging::warning(QString("Performing calculation for infinite conductivity instead."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RigEclipseCaseData* eclipseCaseData = m_case->eclipseCaseData();
|
RigEclipseCaseData* eclipseCaseData = m_case->eclipseCaseData();
|
||||||
|
|
||||||
RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS;
|
RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS;
|
||||||
@ -344,8 +326,6 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlanForEclipseCell(dou
|
|||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
|
|
||||||
//TODO: UNITS!
|
|
||||||
|
|
||||||
std::vector<std::vector<cvf::Vec3d> > stimPlanCellsAsPolygons;
|
std::vector<std::vector<cvf::Vec3d> > stimPlanCellsAsPolygons;
|
||||||
std::vector<double> stimPlanParameterValues;
|
std::vector<double> stimPlanParameterValues;
|
||||||
fracTemplateStimPlan->getStimPlanDataAsPolygonsAndValues(stimPlanCellsAsPolygons, stimPlanParameterValues, resultName, resultUnit, timeStepIndex);
|
fracTemplateStimPlan->getStimPlanDataAsPolygonsAndValues(stimPlanCellsAsPolygons, stimPlanParameterValues, resultName, resultUnit, timeStepIndex);
|
||||||
@ -464,6 +444,7 @@ double RigFractureTransCalc::areaWeightedArithmeticAverage(std::vector<double> a
|
|||||||
|
|
||||||
double upscaledValueArithmetic = fractureCellAreaXvalue / fractureCellArea;
|
double upscaledValueArithmetic = fractureCellAreaXvalue / fractureCellArea;
|
||||||
return upscaledValueArithmetic;
|
return upscaledValueArithmetic;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -474,7 +455,6 @@ double RigFractureTransCalc::areaWeightedArithmeticAverage(std::vector<double> a
|
|||||||
void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultName, QString resultUnit, size_t timeStepIndex)
|
void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultName, QString resultUnit, size_t timeStepIndex)
|
||||||
{
|
{
|
||||||
|
|
||||||
//TODO: A lot of common code with function for calculating transmissibility...
|
|
||||||
|
|
||||||
RimStimPlanFractureTemplate* fracTemplateStimPlan;
|
RimStimPlanFractureTemplate* fracTemplateStimPlan;
|
||||||
if (dynamic_cast<RimStimPlanFractureTemplate*>(m_fracture->attachedFractureDefinition()))
|
if (dynamic_cast<RimStimPlanFractureTemplate*>(m_fracture->attachedFractureDefinition()))
|
||||||
@ -544,27 +524,6 @@ void RigFractureTransCalc::computeFlowInFracture()
|
|||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
|
|
||||||
//Get correct unit system:
|
|
||||||
RigEclipseCaseData::UnitsType caseUnit = m_case->eclipseCaseData()->unitsType();
|
|
||||||
RimDefines::UnitSystem unitForExport;
|
|
||||||
|
|
||||||
if (caseUnit == RigEclipseCaseData::UNITS_METRIC)
|
|
||||||
{
|
|
||||||
RiaLogging::debug(QString("Calculating flow in fracture in metric units"));
|
|
||||||
unitForExport = RimDefines::UNITS_METRIC;
|
|
||||||
}
|
|
||||||
else if (caseUnit == RigEclipseCaseData::UNITS_FIELD)
|
|
||||||
{
|
|
||||||
RiaLogging::debug(QString("Calculating flow in fracture in field units"));
|
|
||||||
unitForExport = RimDefines::UNITS_FIELD;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RiaLogging::error(QString("Unit system for case not supported for fracture export."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//TODO: A lot of common code with function above... Can be cleaned up...?
|
//TODO: A lot of common code with function above... Can be cleaned up...?
|
||||||
std::vector<size_t> fracCells = m_fracture->getPotentiallyFracturedCells();
|
std::vector<size_t> fracCells = m_fracture->getPotentiallyFracturedCells();
|
||||||
|
|
||||||
@ -580,35 +539,42 @@ void RigFractureTransCalc::computeFlowInFracture()
|
|||||||
|
|
||||||
for (size_t fracCell : fracCells)
|
for (size_t fracCell : fracCells)
|
||||||
{
|
{
|
||||||
double K; //Conductivity
|
double Kw; // Conductivity (Permeability K times width w)
|
||||||
double w; //Fracture width
|
|
||||||
|
|
||||||
if (fracTemplateEllipse)
|
if (fracTemplateEllipse)
|
||||||
{
|
{
|
||||||
|
double K = fracTemplateEllipse->fractureConductivity(); // Permeability
|
||||||
|
double w = fracTemplateEllipse->width(); // Width
|
||||||
|
|
||||||
//TODO: UNit handling...
|
//TODO: UNit handling...
|
||||||
K = fracTemplateEllipse->fractureConductivity();
|
if (fracTemplateEllipse->fractureTemplateUnit() == RimDefines::UNITS_FIELD)
|
||||||
w = fracTemplateEllipse->width();
|
{
|
||||||
|
w = RimDefines::inchToFeet(w);
|
||||||
|
}
|
||||||
|
|
||||||
|
Kw = K * w;
|
||||||
}
|
}
|
||||||
else if (fracTemplateStimPlan)
|
else if (fracTemplateStimPlan)
|
||||||
{
|
{
|
||||||
QString resultName = "CONDUCTIVITY";
|
QString resultName = "CONDUCTIVITY";
|
||||||
QString resultUnit = "md-m";
|
QString resultUnit;
|
||||||
|
if (fracTemplateStimPlan->fractureTemplateUnit() == RimDefines::UNITS_METRIC) resultUnit = "md-m";
|
||||||
|
if (fracTemplateStimPlan->fractureTemplateUnit() == RimDefines::UNITS_FIELD) resultUnit = "md-ft";
|
||||||
|
|
||||||
size_t timeStepIndex = 0; //TODO...
|
size_t timeStepIndex = 0; //TODO...
|
||||||
double upscaledAritmStimPlanValue = cvf::UNDEFINED_DOUBLE;
|
double upscaledAritmStimPlanValue = cvf::UNDEFINED_DOUBLE;
|
||||||
double upscaledHarmStimPlanValue = cvf::UNDEFINED_DOUBLE;
|
double upscaledHarmStimPlanValue = cvf::UNDEFINED_DOUBLE;
|
||||||
caf::AppEnum< RimDefines::UnitSystem > unitSystem = RimDefines::UNITS_METRIC;
|
caf::AppEnum< RimDefines::UnitSystem > unitSystem = RimDefines::UNITS_METRIC;
|
||||||
computeUpscaledPropertyFromStimPlanForEclipseCell(upscaledAritmStimPlanValue, upscaledHarmStimPlanValue, resultName, resultUnit, timeStepIndex, unitSystem, fracCell);
|
computeUpscaledPropertyFromStimPlanForEclipseCell(upscaledAritmStimPlanValue, upscaledHarmStimPlanValue, resultName, resultUnit, timeStepIndex, unitSystem, fracCell);
|
||||||
K = (upscaledAritmStimPlanValue + upscaledHarmStimPlanValue) / 2;
|
Kw = (upscaledAritmStimPlanValue + upscaledHarmStimPlanValue) / 2;
|
||||||
|
|
||||||
resultName = "WIDTH";
|
|
||||||
resultUnit = "cm"; //TODO handle mm and cm!
|
|
||||||
computeUpscaledPropertyFromStimPlanForEclipseCell(upscaledAritmStimPlanValue, upscaledHarmStimPlanValue, resultName, resultUnit, timeStepIndex, unitSystem, fracCell);
|
|
||||||
w = (upscaledAritmStimPlanValue + upscaledHarmStimPlanValue) / 2;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Kw = convertConductivtyValue(Kw, fracTemplateEllipse->fractureTemplateUnit(), m_unitForCalculation);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
m_fracture->setFractureData(fracDataVec);
|
m_fracture->setFractureData(fracDataVec);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -624,18 +590,33 @@ void RigFractureTransCalc::computeFlowIntoTransverseWell()
|
|||||||
|
|
||||||
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return;
|
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return;
|
||||||
|
|
||||||
double wellRadius = cvf::UNDEFINED_DOUBLE;
|
double areaScalingFactor = 1.0;
|
||||||
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::TRANSVERSE_WELL_PATH)
|
|
||||||
{
|
|
||||||
wellRadius = 0.0;//TODO read this value...
|
|
||||||
}
|
|
||||||
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::AZIMUTH)
|
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::AZIMUTH)
|
||||||
{
|
{
|
||||||
|
areaScalingFactor = 1 / cvf::Math::cos((m_fracture->azimuth() - (m_fracture->wellAzimuthAtFracturePosition()-90) ));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RigFractureTransCalc::convertConductivtyValue(double Kw, RimDefines::UnitSystem fromUnit, RimDefines::UnitSystem toUnit)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (fromUnit == toUnit) return Kw;
|
||||||
|
|
||||||
|
else if (fromUnit == RimDefines::UNITS_METRIC && toUnit == RimDefines::UNITS_FIELD)
|
||||||
|
{
|
||||||
|
return RimDefines::meterToFeet(Kw);
|
||||||
|
}
|
||||||
|
else if (fromUnit == RimDefines::UNITS_METRIC && toUnit == RimDefines::UNITS_FIELD)
|
||||||
|
{
|
||||||
|
return RimDefines::feetToMeter(Kw);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cvf::UNDEFINED_DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -64,5 +64,6 @@ private:
|
|||||||
RimFracture* m_fracture;
|
RimFracture* m_fracture;
|
||||||
RimDefines::UnitSystem m_unitForCalculation;
|
RimDefines::UnitSystem m_unitForCalculation;
|
||||||
|
|
||||||
|
double convertConductivtyValue(double Kw, RimDefines::UnitSystem fromUnit, RimDefines::UnitSystem toUnit);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user