#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;
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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
// }
//--------------------------------------------------------------------------------------------------
///

View File

@@ -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;

View File

@@ -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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -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;

View File

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