#1041 - pre-proto - Adding new functions transformMatrix (for calculating transform Matrix for fracture) and getPotentiallyFracturedCells (finding all cells in bounding box for fracture geometry) in RimFracture. Relevant code is updated to use these functions.

This commit is contained in:
astridkbjorke
2017-01-12 12:19:52 +01:00
parent 86d98cb55b
commit 89bf71b664
8 changed files with 68 additions and 57 deletions

View File

@@ -109,11 +109,11 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, co
if (!mainGrid) return false; if (!mainGrid) return false;
size_t i, j, k; size_t i, j, k;
mainGrid->ijkFromCellIndex(fracData.cellindex, &i, &j, &k); mainGrid->ijkFromCellIndex(fracData.reservoirCellIndex, &i, &j, &k);
out << i; // 2. I location grid block out << i+1; // 2. I location grid block, adding 1 to go to eclipse 1-based grid definition
out << j; // 3. J location grid block out << j+1; // 3. J location grid block, adding 1 to go to eclipse 1-based grid definition
out << k; // 4. K location of upper connecting grid block out << k+1; // 4. K location of upper connecting grid block, adding 1 to go to eclipse 1-based grid definition
out << k; // 5. K location of lower connecting grid block 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 << "OPEN"; // 6. Open / Shut flag of connection
out << "1* "; // 7. Saturation table number for connection rel perm. Default value out << "1* "; // 7. Saturation table number for connection rel perm. Default value

View File

@@ -28,6 +28,10 @@
#include "cvfMath.h" #include "cvfMath.h"
#include "cvfMatrix4.h" #include "cvfMatrix4.h"
#include "RiaApplication.h"
#include "RigMainGrid.h"
#include "RimEclipseView.h"
#include "cvfBoundingBox.h"
CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimFracture, "Fracture"); CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimFracture, "Fracture");
@@ -69,6 +73,35 @@ const std::vector<cvf::Vec3f>& RimFracture::nodeCoords() const
return m_rigFracture->nodeCoords(); return m_rigFracture->nodeCoords();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<size_t> RimFracture::getPotentiallyFracturedCells()
{
std::vector<size_t> cellindecies;
RiaApplication* app = RiaApplication::instance();
RimView* activeView = RiaApplication::instance()->activeReservoirView();
if (!activeView) return cellindecies;
RimEclipseView* activeRiv = dynamic_cast<RimEclipseView*>(activeView);
if (!activeRiv) return cellindecies;
const RigMainGrid* mainGrid = activeRiv->mainGrid();
if (!mainGrid) return cellindecies;
const std::vector<cvf::Vec3f>& 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<RigFractureData> fracDataVec; std::vector<RigFractureData> fracDataVec;
//TODO: Use global cell index instead of pair of grid, cell index std::vector<size_t> fracCells = getPotentiallyFracturedCells();
//TODO: use RigMainGrid - findIntersectingCells / boundingbox
std::vector<std::pair<size_t, size_t>> fracCells = getFracturedCells();
for (auto fracCell : fracCells) for (auto fracCell : fracCells)
{ {
RigFractureData fracData; RigFractureData fracData;
fracData.cellindex = fracCell.first; fracData.reservoirCellIndex = fracCell;
fracData.gridIndex = fracCell.second;
//TODO: get correct input values... //TODO: get correct input values...
double area = 2.468; double area = 2.468;

View File

@@ -59,7 +59,7 @@ public:
const std::vector<cvf::Vec3f>& nodeCoords() const; const std::vector<cvf::Vec3f>& nodeCoords() const;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells() = 0; virtual std::vector<size_t> getPotentiallyFracturedCells();
void computeTransmissibility(); void computeTransmissibility();
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;

View File

@@ -160,32 +160,32 @@ void RimSimWellFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
if (proj) proj->createDisplayModelAndRedrawAllViews(); if (proj) proj->createDisplayModelAndRedrawAllViews();
} }
//-------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
/// // /
//-------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
std::vector<std::pair<size_t, size_t>> RimSimWellFracture::getFracturedCells() // std::vector<std::pair<size_t, size_t>> RimSimWellFracture::getFracturedCells()
{ // {
std::vector<std::pair<size_t, size_t>> cells; // std::vector<std::pair<size_t, size_t>> cells;
//
size_t gridindex = 0; //TODO! For now assuming only one grid // size_t gridindex = 0; //TODO! For now assuming only one grid
//
//
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(this); // caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(this);
if (!objHandle) return cells; // if (!objHandle) return cells;
//
RimEclipseView* mainView = nullptr; // RimEclipseView* mainView = nullptr;
objHandle->firstAncestorOrThisOfType(mainView); // objHandle->firstAncestorOrThisOfType(mainView);
if (!mainView) return cells; // if (!mainView) return cells;
//
const RigMainGrid* mainGrid = mainView->mainGrid(); // const RigMainGrid* mainGrid = mainView->mainGrid();
if (!mainGrid) return cells; // if (!mainGrid) return cells;
//
size_t cellIndex = mainGrid->cellIndexFromIJK(m_i - 1, m_j - 1, m_k - 1); // cellIndexFromIJK uses 0-based indexing // 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)); // cells.push_back(std::make_pair(cellIndex, gridindex));
//
return cells; // return cells;
} // }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///

View File

@@ -56,7 +56,6 @@ public:
// Overrides from RimFracture // Overrides from RimFracture
virtual cvf::Vec3d centerPointForFracture() override; virtual cvf::Vec3d centerPointForFracture() override;
virtual RimFractureEllipseDefinition* attachedFractureDefinition() override; virtual RimFractureEllipseDefinition* attachedFractureDefinition() override;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells() override;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;

View File

@@ -123,20 +123,6 @@ RimFractureEllipseDefinition* RimWellPathFracture::attachedFractureDefinition()
return fractureDefinition(); return fractureDefinition();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<std::pair<size_t, size_t>> RimWellPathFracture::getFracturedCells()
{
std::vector<std::pair<size_t, size_t>> 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;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -66,9 +66,6 @@ public:
virtual RimFractureEllipseDefinition* attachedFractureDefinition() override; virtual RimFractureEllipseDefinition* attachedFractureDefinition() override;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells() override;
protected: protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
cvf::Vec3d fracturePositionForUi() const; cvf::Vec3d fracturePositionForUi() const;

View File

@@ -31,8 +31,7 @@ class RigFractureData
public: public:
RigFractureData(); RigFractureData();
size_t gridIndex; size_t reservoirCellIndex;
size_t cellindex;
double transmissibility; double transmissibility;
}; };