mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Constified some methods in FemPart. WIP range filter mapping first untested code.
This commit is contained in:
@@ -71,7 +71,7 @@ void RigFemPart::appendElement(RigElementType elmType, int id, const int* connec
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigFemPartGrid* RigFemPart::structGrid()
|
||||
const RigFemPartGrid* RigFemPart::structGrid() const
|
||||
{
|
||||
if (m_structGrid.isNull())
|
||||
{
|
||||
@@ -250,7 +250,7 @@ void RigFemPart::calculateElmNeighbors()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
cvf::Vec3f RigFemPart::faceNormal(int elmIdx, int faceIdx)
|
||||
cvf::Vec3f RigFemPart::faceNormal(int elmIdx, int faceIdx) const
|
||||
{
|
||||
const std::vector<cvf::Vec3f>& nodeCoordinates = this->nodes().coordinates;
|
||||
|
||||
|
||||
@@ -82,9 +82,9 @@ public:
|
||||
const std::vector<int>& possibleGridCornerElements() const { return m_possibleGridCornerElements; }
|
||||
void findIntersectingCells(const cvf::BoundingBox& inputBB, std::vector<size_t>* elementIndices) const;
|
||||
|
||||
cvf::Vec3f faceNormal(int elmentIndex, int faceIndex);
|
||||
cvf::Vec3f faceNormal(int elmentIndex, int faceIndex) const;
|
||||
|
||||
const RigFemPartGrid* structGrid();
|
||||
const RigFemPartGrid* structGrid() const;
|
||||
|
||||
private:
|
||||
int m_elementPartId;
|
||||
@@ -96,7 +96,7 @@ private:
|
||||
|
||||
RigFemPartNodes m_nodes;
|
||||
|
||||
cvf::ref<RigFemPartGrid> m_structGrid;
|
||||
mutable cvf::ref<RigFemPartGrid> m_structGrid;
|
||||
|
||||
void calculateNodeToElmRefs();
|
||||
std::vector<std::vector<int> > m_nodeToElmRefs; // Needs a more memory friendly structure
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigFemPartGrid::RigFemPartGrid(RigFemPart* femPart)
|
||||
RigFemPartGrid::RigFemPartGrid(const RigFemPart* femPart)
|
||||
{
|
||||
m_femPart = femPart;
|
||||
generateStructGridData();
|
||||
@@ -172,6 +172,16 @@ void RigFemPartGrid::generateStructGridData()
|
||||
|
||||
if (kCoord > static_cast<int>(m_elmentIJKCounts[2])) m_elmentIJKCounts[2] = kCoord;
|
||||
}
|
||||
|
||||
|
||||
|
||||
m_elmIdxPrIJK.resize(m_elmentIJKCounts[0], m_elmentIJKCounts[1],m_elmentIJKCounts[2]);
|
||||
|
||||
for (int elmIdx = 0; elmIdx < m_femPart->elementCount(); ++elmIdx)
|
||||
{
|
||||
cvf::Vec3i ijk = m_ijkPrElement[elmIdx];
|
||||
m_elmIdxPrIJK.at(ijk[0], ijk[1], ijk[2]) = elmIdx;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -380,8 +390,7 @@ bool RigFemPartGrid::cellIJKNeighbor(size_t i, size_t j, size_t k, FaceType face
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigFemPartGrid::cellIndexFromIJK(size_t i, size_t j, size_t k) const
|
||||
{
|
||||
CVF_ASSERT(false);
|
||||
return cvf::UNDEFINED_SIZE_T;
|
||||
return m_elmIdxPrIJK.at(i,j,k);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -27,10 +27,11 @@ class RigFemPart;
|
||||
class RigFemPartGrid : public cvf::StructGridInterface
|
||||
{
|
||||
public:
|
||||
RigFemPartGrid(RigFemPart* femPart);
|
||||
RigFemPartGrid(const RigFemPart* femPart);
|
||||
virtual ~RigFemPartGrid();
|
||||
|
||||
virtual bool ijkFromCellIndex(size_t cellIndex, size_t* i, size_t* j, size_t* k) const;
|
||||
virtual size_t cellIndexFromIJK(size_t i, size_t j, size_t k) const;
|
||||
|
||||
virtual size_t gridPointCountI() const;
|
||||
virtual size_t gridPointCountJ() const;
|
||||
@@ -43,7 +44,7 @@ public:
|
||||
int findElmIdxForIJK000();
|
||||
int perpendicularFaceInDirection(cvf::Vec3f direction, int perpFaceIdx, int elmIdx);
|
||||
|
||||
RigFemPart* m_femPart;
|
||||
const RigFemPart* m_femPart;
|
||||
|
||||
std::vector<cvf::Vec3i> m_ijkPrElement;
|
||||
cvf::Vec3st m_elmentIJKCounts;
|
||||
@@ -53,7 +54,6 @@ private: // Unused, Not implemented
|
||||
virtual cvf::Vec3d minCoordinate() const;
|
||||
virtual cvf::Vec3d maxCoordinate() const;
|
||||
virtual bool cellIJKNeighbor(size_t i, size_t j, size_t k, FaceType face, size_t* neighborCellIndex) const;
|
||||
virtual size_t cellIndexFromIJK(size_t i, size_t j, size_t k) const;
|
||||
|
||||
|
||||
virtual bool cellIJKFromCoordinate(const cvf::Vec3d& coord, size_t* i, size_t* j, size_t* k) const;
|
||||
@@ -63,6 +63,37 @@ private: // Unused, Not implemented
|
||||
virtual size_t gridPointIndexFromIJK(size_t i, size_t j, size_t k) const;
|
||||
virtual cvf::Vec3d gridPointCoordinate(size_t i, size_t j, size_t k) const;
|
||||
|
||||
class IJKArray
|
||||
{
|
||||
public:
|
||||
IJKArray(): m_iCount(0), m_jCount(0){}
|
||||
|
||||
void resize(size_t iCount, size_t jCount, size_t kCount)
|
||||
{
|
||||
data.resize(iCount*jCount*kCount, cvf::UNDEFINED_SIZE_T);
|
||||
m_iCount = iCount;
|
||||
m_jCount = jCount;
|
||||
}
|
||||
|
||||
size_t& at(size_t i, size_t j, size_t k)
|
||||
{
|
||||
return data[i + j* m_iCount + k * m_iCount*m_jCount];
|
||||
}
|
||||
|
||||
size_t at(size_t i, size_t j, size_t k) const
|
||||
{
|
||||
return data[i + j* m_iCount + k * m_iCount*m_jCount];
|
||||
}
|
||||
|
||||
private:
|
||||
size_t m_iCount;
|
||||
size_t m_jCount;
|
||||
|
||||
std::vector< size_t > data;
|
||||
};
|
||||
|
||||
IJKArray m_elmIdxPrIJK;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user