Use cell indices in RigBase

This commit is contained in:
Magne Sjaastad
2013-12-06 09:08:22 +01:00
parent 5ca8911a68
commit 6179d84b87
3 changed files with 93 additions and 6 deletions

View File

@@ -17,6 +17,7 @@
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
#include "RigFault.h" #include "RigFault.h"
#include "RigMainGrid.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -56,10 +57,73 @@ QString RigFault::name() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
const std::vector<cvf::CellRange>& RigFault::cellRangeForFace(cvf::StructGridInterface::FaceType face) const std::vector<RigFault::FaultFace>& RigFault::faultFaces()
{ {
size_t faceIndex = static_cast<size_t>(face); return m_faultFaces;
CVF_ASSERT(faceIndex < 6);
return m_cellRangesForFaces[face];
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<RigFault::FaultFace>& RigFault::faultFaces() const
{
return m_faultFaces;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigFault::computeFaultFacesFromCellRanges(const RigMainGrid* grid)
{
if (!grid) return;
m_faultFaces.clear();
for (size_t faceType = 0; faceType < 6; faceType++)
{
cvf::StructGridInterface::FaceType faceEnum = cvf::StructGridInterface::FaceType(faceType);
const std::vector<cvf::CellRange>& cellRanges = m_cellRangesForFaces[faceType];
for (size_t i = 0; i < cellRanges.size(); i++)
{
const cvf::CellRange& cellRange = cellRanges[i];
cvf::Vec3st min, max;
cellRange.range(min, max);
for (size_t i = min.x(); i <= max.x(); i++)
{
if (i >= grid->cellCountI())
{
continue;
}
for (size_t j = min.y(); j <= max.y(); j++)
{
if (j >= grid->cellCountJ())
{
continue;
}
for (size_t k = min.z(); k <= max.z(); k++)
{
if (k >= grid->cellCountK())
{
continue;
}
size_t localCellIndex = grid->cellIndexFromIJK(i, j, k);
// Do not need to compute global grid cell index as for a maingrid localIndex == globalIndex
//size_t globalCellIndex = grid->globalGridCellIndex(localCellIndex);
m_faultFaces.push_back(FaultFace(localCellIndex, faceEnum));
}
}
}
}
}
}

View File

@@ -30,10 +30,24 @@
#include "cvfCellRange.h" #include "cvfCellRange.h"
#include "cafFixedArray.h" #include "cafFixedArray.h"
class RigMainGrid;
class RigFault : public cvf::Object class RigFault : public cvf::Object
{ {
public:
struct FaultFace
{
FaultFace(size_t globalCellIndex, cvf::StructGridInterface::FaceType face) :
m_globalCellIndex(globalCellIndex),
m_face(face)
{ }
size_t m_globalCellIndex;
cvf::StructGridInterface::FaceType m_face;
};
public: public:
RigFault(); RigFault();
@@ -41,11 +55,15 @@ public:
QString name() const; QString name() const;
void addCellRangeForFace(cvf::StructGridInterface::FaceType face, const cvf::CellRange& cellRange); void addCellRangeForFace(cvf::StructGridInterface::FaceType face, const cvf::CellRange& cellRange);
void computeFaultFacesFromCellRanges(const RigMainGrid* grid);
const std::vector<cvf::CellRange>& cellRangeForFace(cvf::StructGridInterface::FaceType face) const; std::vector<FaultFace>& faultFaces();
const std::vector<FaultFace>& faultFaces() const;
private: private:
QString m_name; QString m_name;
caf::FixedArray<std::vector<cvf::CellRange>, 6> m_cellRangesForFaces; caf::FixedArray<std::vector<cvf::CellRange>, 6> m_cellRangesForFaces;
std::vector<FaultFace> m_faultFaces;
}; };

View File

@@ -544,6 +544,11 @@ cvf::BoundingBox RigGridBase::boundingBox()
void RigGridBase::setFaults(const cvf::Collection<RigFault>& faults) void RigGridBase::setFaults(const cvf::Collection<RigFault>& faults)
{ {
m_faults = faults; m_faults = faults;
for (size_t i = 0; i < m_faults.size(); i++)
{
m_faults[i]->computeFaultFacesFromCellRanges(this->mainGrid());
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------