#1487 - pre-proto - Starting refactoring to prepare for Transmissibility condenser

This commit is contained in:
astridkbjorke 2017-05-16 10:55:31 +02:00
parent ef6041379b
commit 9c4b0776d3
9 changed files with 61 additions and 40 deletions

View File

@ -120,9 +120,9 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
//TODO: Check that there is a fracture template available for given fracture.... //TODO: Check that there is a fracture template available for given fracture....
transmissibilityCalculator.computeTransmissibilityFromPolygonWithInfiniteConductivityInFracture(); transmissibilityCalculator.computeTransmissibilityFromPolygonWithInfiniteConductivityInFracture();
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData(); std::vector<RigFracturedEclipseCellExportData> fracDataVector = fracture->attachedRigFracture()->fractureData();
for (RigFractureData fracData : fracDataVector) for (RigFracturedEclipseCellExportData fracData : fracDataVector)
{ {
printBackgroundData(out, wellPath, simWell, fracture, mainGrid, fracData); printBackgroundData(out, wellPath, simWell, fracture, mainGrid, fracData);
} }
@ -134,9 +134,9 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
for (RimFracture* fracture : fractures) for (RimFracture* fracture : fractures)
{ {
RiaLogging::debug(QString("Writing COMPDAT values for fracture %1").arg(fracture->name())); RiaLogging::debug(QString("Writing COMPDAT values for fracture %1").arg(fracture->name()));
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData(); std::vector<RigFracturedEclipseCellExportData> fracDataVector = fracture->attachedRigFracture()->fractureData();
for (RigFractureData fracData : fracDataVector) for (RigFracturedEclipseCellExportData fracData : fracDataVector)
{ {
if (fracData.transmissibility > 0) if (fracData.transmissibility > 0)
{ {
@ -174,7 +174,7 @@ void RifEclipseExportTools::performStimPlanUpscalingAndPrintResults(const std::v
{ {
RigFractureTransCalc transmissibilityCalculator(caseToApply, fracture); RigFractureTransCalc transmissibilityCalculator(caseToApply, fracture);
transmissibilityCalculator.computeUpscaledPropertyFromStimPlan(resultName, resultUnit, timeStepIndex); transmissibilityCalculator.computeUpscaledPropertyFromStimPlan(resultName, resultUnit, timeStepIndex);
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData(); std::vector<RigFracturedEclipseCellExportData> fracDataVector = fracture->attachedRigFracture()->fractureData();
out << qSetFieldWidth(4); out << qSetFieldWidth(4);
out << "-- "; out << "-- ";
@ -198,7 +198,7 @@ void RifEclipseExportTools::performStimPlanUpscalingAndPrintResults(const std::v
out << "\n"; out << "\n";
for (RigFractureData fracData : fracDataVector) for (RigFracturedEclipseCellExportData fracData : fracDataVector)
{ {
out << qSetFieldWidth(4); out << qSetFieldWidth(4);
@ -405,7 +405,7 @@ return;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RifEclipseExportTools::printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid) void RifEclipseExportTools::printCOMPDATvalues(QTextStream & out, RigFracturedEclipseCellExportData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid)
{ {
out << qSetFieldWidth(8); out << qSetFieldWidth(8);
if (fracData.transmissibility == cvf::UNDEFINED_DOUBLE || !(fracture->attachedFractureDefinition())) out << "--"; //Commenting out line in output file if (fracData.transmissibility == cvf::UNDEFINED_DOUBLE || !(fracture->attachedFractureDefinition())) out << "--"; //Commenting out line in output file
@ -515,7 +515,7 @@ void RifEclipseExportTools::printBackgroundDataHeaderLine(QTextStream & out)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RifEclipseExportTools::printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFractureData &fracData) void RifEclipseExportTools::printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFracturedEclipseCellExportData &fracData)
{ {
out << qSetFieldWidth(4); out << qSetFieldWidth(4);
out << "-- "; out << "-- ";

View File

@ -30,7 +30,7 @@
class QFile; class QFile;
class QTextStream; class QTextStream;
class RigFractureData; class RigFracturedEclipseCellExportData;
class RigMainGrid; class RigMainGrid;
class RimEclipseCase; class RimEclipseCase;
class RimEclipseWell; class RimEclipseWell;
@ -51,18 +51,16 @@ public:
static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures, RimEclipseCase* caseToApply); static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures, RimEclipseCase* caseToApply);
private:
static void performStimPlanUpscalingAndPrintResults(const std::vector<RimFracture *>& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void performStimPlanUpscalingAndPrintResults(const std::vector<RimFracture *>& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid);
static void printStimPlanCellsMatrixTransContributions(const std::vector<RimFracture *>& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void printStimPlanCellsMatrixTransContributions(const std::vector<RimFracture *>& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid);
static void printStimPlanFractureTrans(const std::vector<RimFracture *>& fractures, QTextStream &out); static void printStimPlanFractureTrans(const std::vector<RimFracture *>& fractures, QTextStream &out);
static void printTransmissibilityFractureToWell(const std::vector<RimFracture *>& fractures, QTextStream &out, RimEclipseCase* caseToApply); static void printTransmissibilityFractureToWell(const std::vector<RimFracture *>& fractures, QTextStream &out, RimEclipseCase* caseToApply);
static void printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void printCOMPDATvalues(QTextStream & out, RigFracturedEclipseCellExportData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid);
static void printBackgroundDataHeaderLine(QTextStream & out); static void printBackgroundDataHeaderLine(QTextStream & out);
static void printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFractureData &fracData); static void printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFracturedEclipseCellExportData &fracData);
private:
}; };

View File

@ -139,7 +139,7 @@ const std::vector<cvf::Vec3f>& RimFracture::nodeCoords() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFracture::setFractureData(std::vector<RigFractureData> fractureDataVector) void RimFracture::setFractureData(std::vector<RigFracturedEclipseCellExportData> fractureDataVector)
{ {
m_rigFracture->setFractureData(fractureDataVector); m_rigFracture->setFractureData(fractureDataVector);
} }

View File

@ -39,7 +39,7 @@ class RimEclipseCase;
class RimEllipseFractureTemplate; class RimEllipseFractureTemplate;
class RivWellFracturePartMgr; class RivWellFracturePartMgr;
class RimFractureTemplate; class RimFractureTemplate;
class RigFractureData; class RigFracturedEclipseCellExportData;
//================================================================================================== //==================================================================================================
/// ///
@ -85,7 +85,7 @@ public:
const std::vector<cvf::uint>& triangleIndices() const; const std::vector<cvf::uint>& triangleIndices() const;
const std::vector<cvf::Vec3f>& nodeCoords() const; const std::vector<cvf::Vec3f>& nodeCoords() const;
void setFractureData(std::vector<RigFractureData> fractureDataVector); void setFractureData(std::vector<RigFracturedEclipseCellExportData> fractureDataVector);
std::vector<size_t> getPotentiallyFracturedCells(); std::vector<size_t> getPotentiallyFracturedCells();

View File

@ -122,6 +122,6 @@ private:
caf::PdmField<QString> m_stimPlanFileName; caf::PdmField<QString> m_stimPlanFileName;
cvf::ref<RigStimPlanFractureDefinition> m_stimPlanFractureDefinitionData; cvf::ref<RigStimPlanFractureDefinition> m_stimPlanFractureDefinitionData;
std::vector<RigStimPlanFracTemplateCell> m_stimPlanCells; std::vector<RigStimPlanFracTemplateCell> m_stimPlanCells;
std::pair<size_t, size_t> wellCenterStimPlanCellIJ; std::pair<size_t, size_t> wellCenterStimPlanCellIJ;
}; };

View File

@ -21,7 +21,7 @@
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RigFractureData::RigFractureData() RigFracturedEclipseCellExportData::RigFracturedEclipseCellExportData()
{ {
} }
@ -79,7 +79,7 @@ const std::vector<cvf::Vec3f>& RigFracture::nodeCoords() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigFracture::setFractureData(const std::vector<RigFractureData>& data) void RigFracture::setFractureData(const std::vector<RigFracturedEclipseCellExportData>& data)
{ {
m_fractureData = data; m_fractureData = data;
} }
@ -87,7 +87,7 @@ void RigFracture::setFractureData(const std::vector<RigFractureData>& data)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
const std::vector<RigFractureData>& RigFracture::fractureData() const const std::vector<RigFracturedEclipseCellExportData>& RigFracture::fractureData() const
{ {
return m_fractureData; return m_fractureData;
} }

View File

@ -26,25 +26,28 @@
#include <vector> #include <vector>
class RigFractureData class RigFracturedEclipseCellExportData
{ {
public: public:
RigFractureData(); RigFracturedEclipseCellExportData();
size_t reservoirCellIndex; // Compdat export data
double transmissibility; size_t reservoirCellIndex;
cvf::Vec3d transmissibilities; double transmissibility; // Total cell to well transmissibility finally used in COMPDAT keyword
bool cellIsActive;
// General intermediate results
double NTG;
cvf::Vec3d permeabilities;
double skinFactor;
double totalArea; // Elipse fracture related values
cvf::Vec3d transmissibilities; //matrixToFractureTransmissibilitiesXYZ
double totalArea; // Elipse cell overlap area
double fractureLenght; double fractureLenght;
cvf::Vec3d projectedAreas; cvf::Vec3d projectedAreas;
cvf::Vec3d permeabilities;
cvf::Vec3d cellSizes; cvf::Vec3d cellSizes;
double NTG;
double skinFactor;
bool cellIsActive;
//TODO: Used for upscaling - should be moved? //TODO: Used for upscaling - should be moved?
double upscaledStimPlanValueHA; double upscaledStimPlanValueHA;
@ -87,10 +90,10 @@ public:
const std::vector<cvf::uint>& triangleIndices() const; const std::vector<cvf::uint>& triangleIndices() const;
const std::vector<cvf::Vec3f>& nodeCoords() const; const std::vector<cvf::Vec3f>& nodeCoords() const;
void setFractureData(const std::vector<RigFractureData>& data); void setFractureData(const std::vector<RigFracturedEclipseCellExportData>& data);
const std::vector<RigFractureData>& fractureData() const; //Access frac data const std::vector<RigFracturedEclipseCellExportData>& fractureData() const; //Access frac data
std::vector<RigFractureData> m_fractureData; std::vector<RigFracturedEclipseCellExportData> m_fractureData;
void addStimPlanCellFractureCell(RigStimPlanFractureCell fracStimPlanCellData); void addStimPlanCellFractureCell(RigStimPlanFractureCell fracStimPlanCellData);

View File

@ -112,7 +112,7 @@ void RigFractureTransCalc::computeTransmissibilityFromPolygonWithInfiniteConduct
RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel); RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel);
std::vector<RigFractureData> fracDataVec; std::vector<RigFracturedEclipseCellExportData> fracDataVec;
std::vector<size_t> fracCells = m_fracture->getPotentiallyFracturedCells(); std::vector<size_t> fracCells = m_fracture->getPotentiallyFracturedCells();
for (size_t fracCell : fracCells) for (size_t fracCell : fracCells)
@ -153,7 +153,7 @@ void RigFractureTransCalc::computeTransmissibilityFromPolygonWithInfiniteConduct
directionOfLength.cross(localZinFracPlane, cvf::Vec3d(0, 0, 1)); directionOfLength.cross(localZinFracPlane, cvf::Vec3d(0, 0, 1));
directionOfLength.normalize(); directionOfLength.normalize();
RigFractureData fracData; RigFracturedEclipseCellExportData fracData;
fracData.reservoirCellIndex = fracCell; fracData.reservoirCellIndex = fracCell;
std::vector<cvf::Vec3f> fracPolygon = m_fracture->attachedFractureDefinition()->fracturePolygon(m_unitForCalculation); std::vector<cvf::Vec3f> fracPolygon = m_fracture->attachedFractureDefinition()->fracturePolygon(m_unitForCalculation);
@ -246,8 +246,9 @@ void RigFractureTransCalc::computeTransmissibilityFromPolygonWithInfiniteConduct
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigFractureTransCalc::calculateStimPlanCellsMatrixTransmissibility(RigStimPlanFracTemplateCell* stimPlanCell, RigStimPlanFractureCell* fracStimPlanCellData) void RigFractureTransCalc::calculateStimPlanCellsMatrixTransmissibility( RigStimPlanFracTemplateCell* stimPlanCell, RigStimPlanFractureCell* fracStimPlanCellData)
{ {
//TODO: Gjør til egen klasse / kalkulator, som kan holde eclipseCell/StimplanCell og Transm.
//Not calculating flow into fracture if stimPlan cell cond value is 0 (assumed to be outside the fracture): //Not calculating flow into fracture if stimPlan cell cond value is 0 (assumed to be outside the fracture):
if (stimPlanCell->getConductivtyValue() < 1e-7) return; if (stimPlanCell->getConductivtyValue() < 1e-7) return;
@ -693,12 +694,12 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultNa
RimReservoirCellResultsStorage* gridCellResults = m_case->results(porosityModel); RimReservoirCellResultsStorage* gridCellResults = m_case->results(porosityModel);
RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel); RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel);
std::vector<RigFractureData> fracDataVec; std::vector<RigFracturedEclipseCellExportData> fracDataVec;
for (size_t fracCell : fracCells) for (size_t fracCell : fracCells)
{ {
RigFractureData fracData; RigFracturedEclipseCellExportData fracData;
fracData.reservoirCellIndex = fracCell; fracData.reservoirCellIndex = fracCell;
std::pair<double, double> upscaledCondFlowAcrossLayers = flowAcrossLayersUpscaling(resultName, resultUnit, timeStepIndex, m_unitForCalculation, fracCell); std::pair<double, double> upscaledCondFlowAcrossLayers = flowAcrossLayersUpscaling(resultName, resultUnit, timeStepIndex, m_unitForCalculation, fracCell);
@ -730,6 +731,7 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultNa
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(const RigStimPlanFracTemplateCell& stimPlanCell) void RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(const RigStimPlanFracTemplateCell& stimPlanCell)
{ {
//TODO: Ta inn relevante parametre, ikke hele cella
double verticalSideLength = stimPlanCell.cellSizeX(); double verticalSideLength = stimPlanCell.cellSizeX();
double horisontalSideLength = stimPlanCell.cellSizeZ(); double horisontalSideLength = stimPlanCell.cellSizeZ();
@ -745,6 +747,7 @@ void RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(const R
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell) double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell)
{ {
//TODO: Ta inn relevante parametre, ikke hele brønncella
if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return cvf::UNDEFINED_DOUBLE; if (m_fracture->attachedFractureDefinition()->orientation == RimFractureTemplate::ALONG_WELL_PATH) return cvf::UNDEFINED_DOUBLE;
double areaScalingFactor = 1.0; double areaScalingFactor = 1.0;
@ -769,6 +772,8 @@ double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(c
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double RigFractureTransCalc::computeLinearTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell, double perforationLengthVertical, double perforationLengthHorizontal) double RigFractureTransCalc::computeLinearTransmissibilityToWellinStimPlanCell(const RigStimPlanFracTemplateCell& stimPlanCell, double perforationLengthVertical, double perforationLengthHorizontal)
{ {
//TODO: Ta inn relevante parametre, ikke hele brønncella
double TcPrefix = 8 * cDarcy() * stimPlanCell.getConductivtyValue(); double TcPrefix = 8 * cDarcy() * stimPlanCell.getConductivtyValue();
double DzPerf = perforationLengthVertical * m_fracture->perforationEfficiency(); double DzPerf = perforationLengthVertical * m_fracture->perforationEfficiency();

View File

@ -79,3 +79,18 @@ private:
double cDarcy(); double cDarcy();
}; };
class EclipseToStimPlanCellTransmissibilityCalculator
{
public:
explicit EclipseToStimPlanCellTransmissibilityCalculator(const RimEclipseCase* caseToApply, cvf::Mat4f fractureTransform, double skinFactor, const RigStimPlanFracTemplateCell& stimPlanCell);
const std::vector<size_t>& globalIndeciesToContributingEclipseCells();
const std::vector<double>& contributingEclipseCellTransmissibilities();
private:
void calculateStimPlanCellsMatrixTransmissibility();
std::vector<size_t> m_globalIndeciesToContributingEclipseCells;
std::vector<double> m_contributingEclipseCellTransmissibilities;
};