#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 committed 2017-01-12 12:19:52 +01:00
1 parent 86d98cb55b
commit 89bf71b664
8 files changed
+68 -57

No files matched your search

@@ -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
@@ -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<cvf::Vec3f>& RimFracture::nodeCoords() const
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;
//TODO: Use global cell index instead of pair of grid, cell index
//TODO: use RigMainGrid - findIntersectingCells / boundingbox
std::vector<std::pair<size_t, size_t>> fracCells = getFracturedCells();
std::vector<size_t> 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;
@@ -59,7 +59,7 @@ public:
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();
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
@@ -160,32 +160,32 @@ void RimSimWellFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
if (proj) proj->createDisplayModelAndRedrawAllViews();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<std::pair<size_t, size_t>> RimSimWellFracture::getFracturedCells()
{
std::vector<std::pair<size_t, size_t>> cells;
size_t gridindex = 0; //TODO! For now assuming only one grid
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(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<std::pair<size_t, size_t>> RimSimWellFracture::getFracturedCells()
// {
// std::vector<std::pair<size_t, size_t>> cells;
//
// size_t gridindex = 0; //TODO! For now assuming only one grid
//
//
// caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(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;
// }
//--------------------------------------------------------------------------------------------------
///
@@ -56,7 +56,6 @@ public:
// Overrides from RimFracture
virtual cvf::Vec3d centerPointForFracture() 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;
@@ -123,20 +123,6 @@ RimFractureEllipseDefinition* RimWellPathFracture::attachedFractureDefinition()
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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -66,9 +66,6 @@ public:
virtual RimFractureEllipseDefinition* attachedFractureDefinition() override;
virtual std::vector<std::pair<size_t, size_t>> getFracturedCells() override;
protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
cvf::Vec3d fracturePositionForUi() const;
@@ -31,8 +31,7 @@ class RigFractureData
public:
RigFractureData();
size_t gridIndex;
size_t cellindex;
size_t reservoirCellIndex;
double transmissibility;
};