Refactor: Change RigGridBase::cellCornerVertices to return std::array

Refactored RigGridBase::cellCornerVertices to return std::array<cvf::Vec3d, 8> by value instead of taking a reference to std::array as an output parameter. This change improves code readability and leverages modern C++ return value optimizations.

Updated all call sites across the codebase to reflect the new function signature.
This commit is contained in:
Kristian Bendiksen committed 2025-09-03 14:21:19 +02:00
1 parent da69eef72b
commit 10182e99a7
41 files changed
+148 -214

No files matched your search

@@ -440,15 +440,17 @@ bool RigFemPartGrid::cellIJKFromCoordinate( const cvf::Vec3d& coord, size_t* i,
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigFemPartGrid::cellCornerVertices( size_t cellIndex, std::array<cvf::Vec3d, 8>& vertices ) const
std::array<cvf::Vec3d, 8> RigFemPartGrid::cellCornerVertices( size_t cellIndex ) const
{
const std::vector<cvf::Vec3f>& nodeCoords = m_femPart->nodes().coordinates;
const int* cornerIndices = m_femPart->connectivities( cellIndex );
std::array<cvf::Vec3d, 8> vertices;
for ( size_t i = 0; i < 8; ++i )
{
vertices[i] = cvf::Vec3d( nodeCoords[cornerIndices[i]] );
}
return vertices;
}
//--------------------------------------------------------------------------------------------------
@@ -456,8 +458,7 @@ void RigFemPartGrid::cellCornerVertices( size_t cellIndex, std::array<cvf::Vec3d
//--------------------------------------------------------------------------------------------------
cvf::Vec3d RigFemPartGrid::cellCentroid( size_t cellIndex ) const
{
std::array<cvf::Vec3d, 8> cellVertices;
cellCornerVertices( cellIndex, cellVertices );
std::array<cvf::Vec3d, 8> cellVertices = cellCornerVertices( cellIndex );
cvf::Vec3d centroid( 0.0, 0.0, 0.0 );
for ( int i = 0; i < 8; ++i )
@@ -43,7 +43,7 @@ public:
cvf::Vec3i findMainIJKFaces( int elementIndex ) const;
std::pair<cvf::Vec3st, cvf::Vec3st> reservoirIJKBoundingBox() const;
void cellCornerVertices( size_t cellIndex, std::array<cvf::Vec3d, 8>& vertices ) const override;
std::array<cvf::Vec3d, 8> cellCornerVertices( size_t cellIndex ) const override;
cvf::Vec3d cellCentroid( size_t cellIndex ) const override;
private:
@@ -44,9 +44,9 @@ public:
std::vector<size_t> elementFaceNodeIdxs;
};
static std::vector<cvf::Vec3d> coordsFromNodeIndices( const RigFemPart& part, const std::vector<size_t>& nodeIdxs );
static std::vector<size_t> nodesForElement( const RigFemPart& part, size_t elementIdx );
static float horizontalDistance( const cvf::Vec3f& p1, const cvf::Vec3f& p2 );
static std::array<cvf::Vec3d, 8> coordsFromNodeIndices( const RigFemPart& part, const std::array<size_t, 8>& nodeIdxs );
static std::array<size_t, 8> nodesForElement( const RigFemPart& part, size_t elementIdx );
static float horizontalDistance( const cvf::Vec3f& p1, const cvf::Vec3f& p2 );
static void findReferenceElementForNode( const RigFemPart& part, size_t nodeIdx, size_t kRefLayer, RefElement* refElement );
//--------------------------------------------------------------------------------------------------
@@ -175,13 +175,13 @@ void findReferenceElementForNode( const RigFemPart& part, size_t nodeIdx, size_t
bool validIndex = grid->ijkFromCellIndex( elemIdx, &i, &j, &k );
if ( validIndex && k == kRefLayer )
{
const std::vector<size_t> nodeIndices = nodesForElement( part, elemIdx );
const std::array<size_t, 8> nodeIndices = nodesForElement( part, elemIdx );
CVF_ASSERT( nodeIndices.size() == 8 );
std::vector<HexIntersectionInfo> intersections;
RigHexIntersectionTools::lineHexCellIntersection( cvf::Vec3d( p1 ),
cvf::Vec3d( p2 ),
coordsFromNodeIndices( part, nodeIndices ).data(),
coordsFromNodeIndices( part, nodeIndices ),
elemIdx,
&intersections );
@@ -210,23 +210,23 @@ void findReferenceElementForNode( const RigFemPart& part, size_t nodeIdx, size_t
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<cvf::Vec3d> coordsFromNodeIndices( const RigFemPart& part, const std::vector<size_t>& nodeIdxs )
std::array<cvf::Vec3d, 8> coordsFromNodeIndices( const RigFemPart& part, const std::array<size_t, 8>& nodeIdxs )
{
std::vector<cvf::Vec3d> out;
for ( const auto& nodeIdx : nodeIdxs )
out.push_back( cvf::Vec3d( part.nodes().coordinates[nodeIdx] ) );
std::array<cvf::Vec3d, 8> out;
for ( size_t i = 0; i < nodeIdxs.size(); i++ )
out[i] = cvf::Vec3d( part.nodes().coordinates[nodeIdxs[i]] );
return out;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<size_t> nodesForElement( const RigFemPart& part, size_t elementIdx )
std::array<size_t, 8> nodesForElement( const RigFemPart& part, size_t elementIdx )
{
std::vector<size_t> nodeIdxs;
const int* nodeConn = part.connectivities( elementIdx );
std::array<size_t, 8> nodeIdxs;
const int* nodeConn = part.connectivities( elementIdx );
for ( int n = 0; n < 8; n++ )
nodeIdxs.push_back( nodeConn[n] );
nodeIdxs[n] = nodeConn[n];
return nodeIdxs;
}