mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Initial version of RigGridCollection
p4#: 20514
This commit is contained in:
@@ -22,8 +22,69 @@
|
|||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
#include "RigEclipseCase.h"
|
#include "RigEclipseCase.h"
|
||||||
|
#include "RigGridCollection.h"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST(RigGridCollection, BasicTest)
|
||||||
|
{
|
||||||
|
cvf::ref<RigMainGrid> mainGridA = new RigMainGrid;
|
||||||
|
|
||||||
|
cvf::ref<RigEclipseCase> eclipseCase = new RigEclipseCase;
|
||||||
|
|
||||||
|
RigGridCollection gridCollection;
|
||||||
|
gridCollection.addGrid(eclipseCase.p(), mainGridA.p());
|
||||||
|
|
||||||
|
int count = mainGridA->refCount();
|
||||||
|
EXPECT_TRUE(mainGridA->refCount() == 2);
|
||||||
|
|
||||||
|
cvf::ref<RigMainGrid> mainGridB = mainGridA;
|
||||||
|
EXPECT_TRUE(mainGridA->refCount() == 3);
|
||||||
|
|
||||||
|
cvf::ref<RigMainGrid> existingGrid = gridCollection.findEqualGrid(mainGridB.p());
|
||||||
|
EXPECT_TRUE(existingGrid.notNull());
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST(RigGridCollection, EqualTests)
|
||||||
|
{
|
||||||
|
cvf::ref<RigMainGrid> mainGridA = new RigMainGrid;
|
||||||
|
mainGridA->nodes().push_back(cvf::Vec3d(0, 0, 0));
|
||||||
|
mainGridA->nodes().push_back(cvf::Vec3d(0, 0, 1));
|
||||||
|
mainGridA->nodes().push_back(cvf::Vec3d(0, 0, 2));
|
||||||
|
|
||||||
|
cvf::ref<RigEclipseCase> eclipseCase = new RigEclipseCase;
|
||||||
|
|
||||||
|
RigGridCollection gridCollection;
|
||||||
|
gridCollection.addGrid(eclipseCase.p(), mainGridA.p());
|
||||||
|
|
||||||
|
|
||||||
|
cvf::ref<RigMainGrid> mainGridB = new RigMainGrid;
|
||||||
|
cvf::ref<RigMainGrid> existingGrid = gridCollection.findEqualGrid(mainGridB.p());
|
||||||
|
EXPECT_TRUE(existingGrid.isNull());
|
||||||
|
|
||||||
|
mainGridB->nodes().push_back(cvf::Vec3d(0, 0, 0));
|
||||||
|
existingGrid = gridCollection.findEqualGrid(mainGridB.p());
|
||||||
|
EXPECT_TRUE(existingGrid.isNull());
|
||||||
|
|
||||||
|
// Insert nodes in opposite direction
|
||||||
|
mainGridB->nodes().push_back(cvf::Vec3d(0, 0, 2));
|
||||||
|
mainGridB->nodes().push_back(cvf::Vec3d(0, 0, 1));
|
||||||
|
existingGrid = gridCollection.findEqualGrid(mainGridB.p());
|
||||||
|
EXPECT_TRUE(existingGrid.isNull());
|
||||||
|
|
||||||
|
// Overwrite to match the node structure of mainGridA
|
||||||
|
mainGridB->nodes()[1] = cvf::Vec3d(0, 0, 1);
|
||||||
|
mainGridB->nodes()[2] = cvf::Vec3d(0, 0, 2);
|
||||||
|
existingGrid = gridCollection.findEqualGrid(mainGridB.p());
|
||||||
|
EXPECT_TRUE(existingGrid.notNull());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -17,4 +17,76 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "RigGridCollection.h"
|
#include "RigGridCollection.h"
|
||||||
|
#include "RigEclipseCase.h"
|
||||||
|
#include "RigMainGrid.h"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigGridCollection::addGrid(RigEclipseCase* eclipseCase, RigMainGrid* mainGrid)
|
||||||
|
{
|
||||||
|
m_caseToGrid.push_back(CaseToGridMap(eclipseCase, mainGrid));
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigGridCollection::removeCase(RigEclipseCase* eclipseCase)
|
||||||
|
{
|
||||||
|
size_t indexToErase = cvf::UNDEFINED_SIZE_T;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < m_caseToGrid.size(); i++)
|
||||||
|
{
|
||||||
|
if (m_caseToGrid[i].m_eclipseCase == eclipseCase)
|
||||||
|
{
|
||||||
|
indexToErase = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indexToErase != cvf::UNDEFINED_SIZE_T)
|
||||||
|
{
|
||||||
|
m_caseToGrid.erase(m_caseToGrid.begin() + indexToErase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RigMainGrid* RigGridCollection::findEqualGrid(RigMainGrid* candidateGrid)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_caseToGrid.size(); i++)
|
||||||
|
{
|
||||||
|
RigMainGrid* mainGrid = m_caseToGrid.at(i).m_mainGrid.p();
|
||||||
|
if (RigGridCollection::isEqual(mainGrid, candidateGrid))
|
||||||
|
{
|
||||||
|
return mainGrid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RigGridCollection::isEqual(RigMainGrid* gridA, RigMainGrid* gridB)
|
||||||
|
{
|
||||||
|
if (gridA == NULL || gridB == NULL) return false;
|
||||||
|
|
||||||
|
if (gridA == gridB) return true;
|
||||||
|
|
||||||
|
if (gridA->gridCount() != gridB->gridCount()) return false;
|
||||||
|
|
||||||
|
if (gridA->nodes().size() != gridB->nodes().size()) return false;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < gridA->nodes().size(); i++)
|
||||||
|
{
|
||||||
|
if (!gridA->nodes()[i].equals(gridB->nodes()[i]))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,3 +18,41 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "cvfBase.h"
|
||||||
|
#include "cvfObject.h"
|
||||||
|
#include "cvfCollection.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class RigMainGrid;
|
||||||
|
class RigEclipseCase;
|
||||||
|
|
||||||
|
class RigGridCollection
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void addGrid(RigEclipseCase* eclipseCase, RigMainGrid* mainGrid);
|
||||||
|
void removeCase(RigEclipseCase* eclipseCase);
|
||||||
|
|
||||||
|
RigMainGrid* findEqualGrid(RigMainGrid* candidateGrid);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
static bool isEqual(RigMainGrid* gridA, RigMainGrid* gridB);
|
||||||
|
|
||||||
|
class CaseToGridMap
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CaseToGridMap(RigEclipseCase* eclipseCase, RigMainGrid* mainGrid) :
|
||||||
|
m_eclipseCase(eclipseCase),
|
||||||
|
m_mainGrid(mainGrid)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cvf::ref<RigEclipseCase> m_eclipseCase;
|
||||||
|
cvf::ref<RigMainGrid> m_mainGrid;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<CaseToGridMap> m_caseToGrid;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user