diff --git a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp index 4eda2ab5c5..64effbd44c 100644 --- a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp +++ b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp @@ -120,9 +120,9 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c //TODO: Check that there is a fracture template available for given fracture.... transmissibilityCalculator.computeTransmissibilityFromPolygonWithInfiniteConductivityInFracture(); - std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); + std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); - for (RigFractureData fracData : fracDataVector) + for (RigFracturedEclipseCellExportData fracData : fracDataVector) { printBackgroundData(out, wellPath, simWell, fracture, mainGrid, fracData); } @@ -134,9 +134,9 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c for (RimFracture* fracture : fractures) { RiaLogging::debug(QString("Writing COMPDAT values for fracture %1").arg(fracture->name())); - std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); + std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); - for (RigFractureData fracData : fracDataVector) + for (RigFracturedEclipseCellExportData fracData : fracDataVector) { if (fracData.transmissibility > 0) { @@ -174,7 +174,7 @@ void RifEclipseExportTools::performStimPlanUpscalingAndPrintResults(const std::v { RigFractureTransCalc transmissibilityCalculator(caseToApply, fracture); transmissibilityCalculator.computeUpscaledPropertyFromStimPlan(resultName, resultUnit, timeStepIndex); - std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); + std::vector fracDataVector = fracture->attachedRigFracture()->fractureData(); out << qSetFieldWidth(4); out << "-- "; @@ -198,7 +198,7 @@ void RifEclipseExportTools::performStimPlanUpscalingAndPrintResults(const std::v out << "\n"; - for (RigFractureData fracData : fracDataVector) + for (RigFracturedEclipseCellExportData fracData : fracDataVector) { 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); 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 << "-- "; diff --git a/ApplicationCode/FileInterface/RifEclipseExportTools.h b/ApplicationCode/FileInterface/RifEclipseExportTools.h index 90ec1138fb..4ca2ba472b 100644 --- a/ApplicationCode/FileInterface/RifEclipseExportTools.h +++ b/ApplicationCode/FileInterface/RifEclipseExportTools.h @@ -30,7 +30,7 @@ class QFile; class QTextStream; -class RigFractureData; +class RigFracturedEclipseCellExportData; class RigMainGrid; class RimEclipseCase; class RimEclipseWell; @@ -51,18 +51,16 @@ public: static bool writeFracturesToTextFile(const QString& fileName, const std::vector& fractures, RimEclipseCase* caseToApply); +private: static void performStimPlanUpscalingAndPrintResults(const std::vector& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void printStimPlanCellsMatrixTransContributions(const std::vector& fractures, RimEclipseCase* caseToApply, QTextStream &out, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid); static void printStimPlanFractureTrans(const std::vector& fractures, QTextStream &out); static void printTransmissibilityFractureToWell(const std::vector& 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 printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFractureData &fracData); - - -private: + static void printBackgroundData(QTextStream & out, RimWellPath* wellPath, RimEclipseWell* simWell, RimFracture* fracture, const RigMainGrid* mainGrid, RigFracturedEclipseCellExportData &fracData); }; diff --git a/ApplicationCode/ProjectDataModel/RimFracture.cpp b/ApplicationCode/ProjectDataModel/RimFracture.cpp index 7f7181c092..f7d2cdab3e 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimFracture.cpp @@ -139,7 +139,7 @@ const std::vector& RimFracture::nodeCoords() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimFracture::setFractureData(std::vector fractureDataVector) +void RimFracture::setFractureData(std::vector fractureDataVector) { m_rigFracture->setFractureData(fractureDataVector); } diff --git a/ApplicationCode/ProjectDataModel/RimFracture.h b/ApplicationCode/ProjectDataModel/RimFracture.h index d1a6f4b077..c9e94be202 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/RimFracture.h @@ -39,7 +39,7 @@ class RimEclipseCase; class RimEllipseFractureTemplate; class RivWellFracturePartMgr; class RimFractureTemplate; -class RigFractureData; +class RigFracturedEclipseCellExportData; //================================================================================================== /// @@ -85,7 +85,7 @@ public: const std::vector& triangleIndices() const; const std::vector& nodeCoords() const; - void setFractureData(std::vector fractureDataVector); + void setFractureData(std::vector fractureDataVector); std::vector getPotentiallyFracturedCells(); diff --git a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h index fdf0686ac5..02a747fc4b 100644 --- a/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/RimStimPlanFractureTemplate.h @@ -122,6 +122,6 @@ private: caf::PdmField m_stimPlanFileName; cvf::ref m_stimPlanFractureDefinitionData; - std::vector m_stimPlanCells; + std::vector m_stimPlanCells; std::pair wellCenterStimPlanCellIJ; }; diff --git a/ApplicationCode/ReservoirDataModel/RigFracture.cpp b/ApplicationCode/ReservoirDataModel/RigFracture.cpp index 04f6105e79..a834cc0633 100644 --- a/ApplicationCode/ReservoirDataModel/RigFracture.cpp +++ b/ApplicationCode/ReservoirDataModel/RigFracture.cpp @@ -21,7 +21,7 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RigFractureData::RigFractureData() +RigFracturedEclipseCellExportData::RigFracturedEclipseCellExportData() { } @@ -79,7 +79,7 @@ const std::vector& RigFracture::nodeCoords() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigFracture::setFractureData(const std::vector& data) +void RigFracture::setFractureData(const std::vector& data) { m_fractureData = data; } @@ -87,7 +87,7 @@ void RigFracture::setFractureData(const std::vector& data) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::vector& RigFracture::fractureData() const +const std::vector& RigFracture::fractureData() const { return m_fractureData; } diff --git a/ApplicationCode/ReservoirDataModel/RigFracture.h b/ApplicationCode/ReservoirDataModel/RigFracture.h index 67fac88865..aced0e7406 100644 --- a/ApplicationCode/ReservoirDataModel/RigFracture.h +++ b/ApplicationCode/ReservoirDataModel/RigFracture.h @@ -26,25 +26,28 @@ #include -class RigFractureData +class RigFracturedEclipseCellExportData { public: - RigFractureData(); + RigFracturedEclipseCellExportData(); - size_t reservoirCellIndex; - double transmissibility; - cvf::Vec3d transmissibilities; + // Compdat export data + size_t reservoirCellIndex; + 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; cvf::Vec3d projectedAreas; - cvf::Vec3d permeabilities; cvf::Vec3d cellSizes; - double NTG; - double skinFactor; - - bool cellIsActive; //TODO: Used for upscaling - should be moved? double upscaledStimPlanValueHA; @@ -87,10 +90,10 @@ public: const std::vector& triangleIndices() const; const std::vector& nodeCoords() const; - void setFractureData(const std::vector& data); - const std::vector& fractureData() const; //Access frac data + void setFractureData(const std::vector& data); + const std::vector& fractureData() const; //Access frac data - std::vector m_fractureData; + std::vector m_fractureData; void addStimPlanCellFractureCell(RigStimPlanFractureCell fracStimPlanCellData); diff --git a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp index 4f02aaec00..451c1cf418 100644 --- a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp +++ b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.cpp @@ -112,7 +112,7 @@ void RigFractureTransCalc::computeTransmissibilityFromPolygonWithInfiniteConduct RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel); - std::vector fracDataVec; + std::vector fracDataVec; std::vector fracCells = m_fracture->getPotentiallyFracturedCells(); for (size_t fracCell : fracCells) @@ -153,7 +153,7 @@ void RigFractureTransCalc::computeTransmissibilityFromPolygonWithInfiniteConduct directionOfLength.cross(localZinFracPlane, cvf::Vec3d(0, 0, 1)); directionOfLength.normalize(); - RigFractureData fracData; + RigFracturedEclipseCellExportData fracData; fracData.reservoirCellIndex = fracCell; std::vector 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): if (stimPlanCell->getConductivtyValue() < 1e-7) return; @@ -693,12 +694,12 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultNa RimReservoirCellResultsStorage* gridCellResults = m_case->results(porosityModel); RigActiveCellInfo* activeCellInfo = eclipseCaseData->activeCellInfo(porosityModel); - std::vector fracDataVec; + std::vector fracDataVec; for (size_t fracCell : fracCells) { - RigFractureData fracData; + RigFracturedEclipseCellExportData fracData; fracData.reservoirCellIndex = fracCell; std::pair upscaledCondFlowAcrossLayers = flowAcrossLayersUpscaling(resultName, resultUnit, timeStepIndex, m_unitForCalculation, fracCell); @@ -730,6 +731,7 @@ void RigFractureTransCalc::computeUpscaledPropertyFromStimPlan( QString resultNa //-------------------------------------------------------------------------------------------------- void RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(const RigStimPlanFracTemplateCell& stimPlanCell) { + //TODO: Ta inn relevante parametre, ikke hele cella double verticalSideLength = stimPlanCell.cellSizeX(); double horisontalSideLength = stimPlanCell.cellSizeZ(); @@ -745,6 +747,7 @@ void RigFractureTransCalc::computeStimPlanCellTransmissibilityInFracture(const R //-------------------------------------------------------------------------------------------------- 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; double areaScalingFactor = 1.0; @@ -769,6 +772,8 @@ double RigFractureTransCalc::computeRadialTransmissibilityToWellinStimPlanCell(c //-------------------------------------------------------------------------------------------------- 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 DzPerf = perforationLengthVertical * m_fracture->perforationEfficiency(); diff --git a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h index 7853aa5996..25bf52fdeb 100644 --- a/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h +++ b/ApplicationCode/ReservoirDataModel/RigFractureTransCalc.h @@ -79,3 +79,18 @@ private: double cDarcy(); }; +class EclipseToStimPlanCellTransmissibilityCalculator +{ +public: + explicit EclipseToStimPlanCellTransmissibilityCalculator(const RimEclipseCase* caseToApply, cvf::Mat4f fractureTransform, double skinFactor, const RigStimPlanFracTemplateCell& stimPlanCell); + + const std::vector& globalIndeciesToContributingEclipseCells(); + const std::vector& contributingEclipseCellTransmissibilities(); + +private: + void calculateStimPlanCellsMatrixTransmissibility(); + + std::vector m_globalIndeciesToContributingEclipseCells; + std::vector m_contributingEclipseCellTransmissibilities; + +}; \ No newline at end of file