diff --git a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp index a71c5e4c5d..347cfd029b 100644 --- a/ApplicationCode/FileInterface/RifEclipseExportTools.cpp +++ b/ApplicationCode/FileInterface/RifEclipseExportTools.cpp @@ -109,11 +109,11 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, co if (!mainGrid) return false; size_t i, j, k; - mainGrid->ijkFromCellIndex(fracData.cellindex, &i, &j, &k); - out << i; // 2. I location grid block - out << j; // 3. J location grid block - out << k; // 4. K location of upper connecting grid block - out << k; // 5. K location of lower connecting grid block + mainGrid->ijkFromCellIndex(fracData.reservoirCellIndex, &i, &j, &k); + out << i+1; // 2. I location grid block, adding 1 to go to eclipse 1-based grid definition + out << j+1; // 3. J location grid block, adding 1 to go to eclipse 1-based grid definition + out << k+1; // 4. K location of upper connecting grid block, adding 1 to go to eclipse 1-based grid definition + out << k+1; // 5. K location of lower connecting grid block, adding 1 to go to eclipse 1-based grid definition out << "OPEN"; // 6. Open / Shut flag of connection out << "1* "; // 7. Saturation table number for connection rel perm. Default value diff --git a/ApplicationCode/ProjectDataModel/RimFracture.cpp b/ApplicationCode/ProjectDataModel/RimFracture.cpp index 13d71ef843..4d2ab44b71 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimFracture.cpp @@ -28,6 +28,10 @@ #include "cvfMath.h" #include "cvfMatrix4.h" +#include "RiaApplication.h" +#include "RigMainGrid.h" +#include "RimEclipseView.h" +#include "cvfBoundingBox.h" CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimFracture, "Fracture"); @@ -69,6 +73,35 @@ const std::vector& RimFracture::nodeCoords() const return m_rigFracture->nodeCoords(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimFracture::getPotentiallyFracturedCells() +{ + std::vector cellindecies; + + RiaApplication* app = RiaApplication::instance(); + RimView* activeView = RiaApplication::instance()->activeReservoirView(); + if (!activeView) return cellindecies; + + RimEclipseView* activeRiv = dynamic_cast(activeView); + if (!activeRiv) return cellindecies; + + const RigMainGrid* mainGrid = activeRiv->mainGrid(); + if (!mainGrid) return cellindecies; + + const std::vector& nodeCoordVec = nodeCoords(); + + if (!hasValidGeometry()) computeGeometry(); + + cvf::BoundingBox polygonBBox; + for (cvf::Vec3f nodeCoord : nodeCoordVec) polygonBBox.add(nodeCoord); + + mainGrid->findIntersectingCells(polygonBBox, &cellindecies); + + return cellindecies; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -147,15 +180,12 @@ void RimFracture::computeTransmissibility() { std::vector fracDataVec; - //TODO: Use global cell index instead of pair of grid, cell index - //TODO: use RigMainGrid - findIntersectingCells / boundingbox - std::vector> fracCells = getFracturedCells(); + std::vector fracCells = getPotentiallyFracturedCells(); for (auto fracCell : fracCells) { RigFractureData fracData; - fracData.cellindex = fracCell.first; - fracData.gridIndex = fracCell.second; + fracData.reservoirCellIndex = fracCell; //TODO: get correct input values... double area = 2.468; diff --git a/ApplicationCode/ProjectDataModel/RimFracture.h b/ApplicationCode/ProjectDataModel/RimFracture.h index 08434d4f4e..b457fb1c8d 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/RimFracture.h @@ -59,7 +59,7 @@ public: const std::vector& nodeCoords() const; - virtual std::vector> getFracturedCells() = 0; + virtual std::vector getPotentiallyFracturedCells(); void computeTransmissibility(); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp index c1a81117e9..3e46d4b252 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp @@ -160,32 +160,32 @@ void RimSimWellFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel if (proj) proj->createDisplayModelAndRedrawAllViews(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector> RimSimWellFracture::getFracturedCells() -{ - std::vector> cells; - - size_t gridindex = 0; //TODO! For now assuming only one grid - - - caf::PdmObjectHandle* objHandle = dynamic_cast(this); - if (!objHandle) return cells; - - RimEclipseView* mainView = nullptr; - objHandle->firstAncestorOrThisOfType(mainView); - if (!mainView) return cells; - - const RigMainGrid* mainGrid = mainView->mainGrid(); - if (!mainGrid) return cells; - - size_t cellIndex = mainGrid->cellIndexFromIJK(m_i - 1, m_j - 1, m_k - 1); // cellIndexFromIJK uses 0-based indexing - - cells.push_back(std::make_pair(cellIndex, gridindex)); - - return cells; -} +// -------------------------------------------------------------------------------------------------- +// / +// -------------------------------------------------------------------------------------------------- +// std::vector> RimSimWellFracture::getFracturedCells() +// { +// std::vector> cells; +// +// size_t gridindex = 0; //TODO! For now assuming only one grid +// +// +// caf::PdmObjectHandle* objHandle = dynamic_cast(this); +// if (!objHandle) return cells; +// +// RimEclipseView* mainView = nullptr; +// objHandle->firstAncestorOrThisOfType(mainView); +// if (!mainView) return cells; +// +// const RigMainGrid* mainGrid = mainView->mainGrid(); +// if (!mainGrid) return cells; +// +// size_t cellIndex = mainGrid->cellIndexFromIJK(m_i - 1, m_j - 1, m_k - 1); // cellIndexFromIJK uses 0-based indexing +// +// cells.push_back(std::make_pair(cellIndex, gridindex)); +// +// return cells; +// } //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h index 7381bdbf67..c2e6526bee 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h @@ -56,7 +56,6 @@ public: // Overrides from RimFracture virtual cvf::Vec3d centerPointForFracture() override; virtual RimFractureEllipseDefinition* attachedFractureDefinition() override; - virtual std::vector> getFracturedCells() override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; diff --git a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp index dbfc3f7885..99a0cf848c 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp @@ -123,20 +123,6 @@ RimFractureEllipseDefinition* RimWellPathFracture::attachedFractureDefinition() return fractureDefinition(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector> RimWellPathFracture::getFracturedCells() -{ - std::vector> cells; - size_t cellindex = 123; //TODO! For now just retunrning a dummy value! - size_t gridindex = 0; - cells.push_back(std::make_pair(cellindex, gridindex)); - - return cells; -} - - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimWellPathFracture.h b/ApplicationCode/ProjectDataModel/RimWellPathFracture.h index 184681cb8f..23d10f11a9 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPathFracture.h +++ b/ApplicationCode/ProjectDataModel/RimWellPathFracture.h @@ -66,9 +66,6 @@ public: virtual RimFractureEllipseDefinition* attachedFractureDefinition() override; - virtual std::vector> getFracturedCells() override; - - protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); cvf::Vec3d fracturePositionForUi() const; diff --git a/ApplicationCode/ReservoirDataModel/RigFracture.h b/ApplicationCode/ReservoirDataModel/RigFracture.h index 13566e8da3..2a1e2d3b90 100644 --- a/ApplicationCode/ReservoirDataModel/RigFracture.h +++ b/ApplicationCode/ReservoirDataModel/RigFracture.h @@ -31,8 +31,7 @@ class RigFractureData public: RigFractureData(); - size_t gridIndex; - size_t cellindex; + size_t reservoirCellIndex; double transmissibility; };