mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#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:
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user