Make Fault+FaultFace no longer use shared_ptr

This commit is contained in:
Jørgen Kvalsvik
2016-10-07 15:19:22 +02:00
parent b3dbd6f930
commit d53c73fb41
7 changed files with 68 additions and 31 deletions

View File

@@ -41,19 +41,32 @@ namespace Opm {
}
void Fault::addFace(std::shared_ptr<const FaultFace> face) {
m_faceList.push_back( face );
void Fault::addFace( FaultFace face ) {
m_faceList.push_back( std::move( face ) );
}
std::vector<std::shared_ptr<const FaultFace> >::const_iterator Fault::begin() const {
std::vector< FaultFace >::const_iterator Fault::begin() const {
return m_faceList.begin();
}
std::vector<std::shared_ptr<const FaultFace> >::const_iterator Fault::end() const {
std::vector< FaultFace >::const_iterator Fault::end() const {
return m_faceList.end();
}
bool Fault::operator==( const Fault& rhs ) const {
return this->m_name == rhs.m_name
&& this->m_transMult == rhs.m_transMult
&& this->m_faceList.size() == rhs.m_faceList.size()
&& std::equal( this->m_faceList.begin(),
this->m_faceList.end(),
rhs.m_faceList.begin() );
}
bool Fault::operator!=( const Fault& rhs ) const {
return !( *this == rhs );
}
}

View File

@@ -23,6 +23,8 @@
#include <memory>
#include <vector>
#include <opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp>
namespace Opm {
class FaultFace;
@@ -35,14 +37,17 @@ public:
const std::string& getName() const;
void setTransMult(double transMult);
double getTransMult() const;
void addFace(std::shared_ptr<const FaultFace> face);
std::vector<std::shared_ptr<const FaultFace> >::const_iterator begin() const;
std::vector<std::shared_ptr<const FaultFace> >::const_iterator end() const;
void addFace( FaultFace );
std::vector< FaultFace >::const_iterator begin() const;
std::vector< FaultFace >::const_iterator end() const;
bool operator==( const Fault& rhs ) const;
bool operator!=( const Fault& rhs ) const;
private:
std::string m_name;
double m_transMult;
std::vector<std::shared_ptr<const FaultFace> > m_faceList;
std::vector< FaultFace > m_faceList;
};
}

View File

@@ -68,18 +68,16 @@ namespace Opm {
int K1 = faultRecord.getItem(5).get<int>(0) - 1;
int K2 = faultRecord.getItem(6).get<int>(0) - 1;
FaceDir::DirEnum faceDir = FaceDir::FromString(faultRecord.getItem(7).get<std::string>(0));
std::shared_ptr<const FaultFace> face = std::make_shared<const FaultFace>(
grid.getNX(), grid.getNY(), grid.getNZ(),
static_cast<size_t>(I1), static_cast<size_t>(I2),
static_cast<size_t>(J1), static_cast<size_t>(J2),
static_cast<size_t>(K1), static_cast<size_t>(K2),
faceDir);
FaultFace face { grid.getNX(), grid.getNY(), grid.getNZ(),
size_t(I1), size_t(I2),
size_t(J1), size_t(J2),
size_t(K1), size_t(K2),
faceDir };
if (!hasFault(faultName))
addFault(faultName);
Fault& fault = getFault(faultName);
fault.addFace(face);
getFault( faultName ).addFace( face );
}
size_t FaultCollection::size() const {

View File

@@ -78,4 +78,15 @@ namespace Opm {
return m_faceDir;
}
bool FaultFace::operator==( const FaultFace& rhs ) const {
return this->m_faceDir == rhs.m_faceDir
&& this->m_indexList.size() == rhs.m_indexList.size()
&& std::equal( this->m_indexList.begin(),
this->m_indexList.end(),
rhs.m_indexList.begin() );
}
bool FaultFace::operator!=( const FaultFace& rhs ) const {
return !( *this == rhs );
}
}

View File

@@ -39,6 +39,9 @@ public:
std::vector<size_t>::const_iterator end() const;
FaceDir::DirEnum getDir() const;
bool operator==( const FaultFace& rhs ) const;
bool operator!=( const FaultFace& rhs ) const;
private:
static void checkCoord(size_t dim , size_t l1 , size_t l2);
FaceDir::DirEnum m_faceDir;

View File

@@ -115,13 +115,12 @@ namespace Opm {
void TransMult::applyMULTFLT(const Fault& fault) {
double transMult = fault.getTransMult();
for (auto face_iter = fault.begin(); face_iter != fault.end(); ++face_iter) {
std::shared_ptr<const FaultFace> face = *face_iter;
FaceDir::DirEnum faceDir = face->getDir();
for( const auto& face : fault ) {
FaceDir::DirEnum faceDir = face.getDir();
auto& multProperty = getDirectionProperty(faceDir);
for (auto cell_iter = face->begin(); cell_iter != face->end(); ++cell_iter) {
size_t globalIndex = *cell_iter;
for( auto globalIndex : face ) {
multProperty.multiplyValueAtIndex( globalIndex , transMult);
}
}

View File

@@ -47,9 +47,9 @@ BOOST_AUTO_TEST_CASE(CreateInvalidFace) {
BOOST_AUTO_TEST_CASE(CreateFace) {
std::shared_ptr<Opm::FaultFace> face1 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus);
std::shared_ptr<Opm::FaultFace> face2 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus);
std::shared_ptr<Opm::FaultFace> face3 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus);
Opm::FaultFace face1(10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus);
Opm::FaultFace face2(10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus);
Opm::FaultFace face3(10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus);
std::vector<size_t> trueValues1{0,1,2};
std::vector<size_t> trueValues2{10,11,12};
@@ -57,9 +57,9 @@ BOOST_AUTO_TEST_CASE(CreateFace) {
size_t i = 0;
{
auto iter3 = face3->begin();
auto iter2 = face2->begin();
for (auto iter1 = face1->begin(); iter1 != face1->end(); ++iter1) {
auto iter3 = face3.begin();
auto iter2 = face2.begin();
for (auto iter1 = face1.begin(); iter1 != face1.end(); ++iter1) {
size_t index1 = *iter1;
size_t index2 = *iter2;
size_t index3 = *iter3;
@@ -73,7 +73,7 @@ BOOST_AUTO_TEST_CASE(CreateFace) {
++i;
}
}
BOOST_CHECK_EQUAL( face1->getDir() , Opm::FaceDir::YPlus);
BOOST_CHECK_EQUAL( face1.getDir() , Opm::FaceDir::YPlus);
}
@@ -83,13 +83,21 @@ BOOST_AUTO_TEST_CASE(CreateFault) {
BOOST_CHECK_EQUAL( 1.0 , fault.getTransMult());
}
namespace Opm {
inline std::ostream& operator<<( std::ostream& stream, const FaultFace& face ) {
stream << face.getDir() << ": [ ";
for( auto index : face ) stream << index << " ";
return stream << "]";
}
}
BOOST_AUTO_TEST_CASE(AddFaceToFaults) {
Opm::Fault fault("FAULT1");
std::shared_ptr<Opm::FaultFace> face1 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus);
std::shared_ptr<Opm::FaultFace> face2 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus);
std::shared_ptr<Opm::FaultFace> face3 = std::make_shared<Opm::FaultFace>(10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus);
Opm::FaultFace face1( 10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus );
Opm::FaultFace face2( 10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus );
Opm::FaultFace face3( 10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus );
fault.addFace( face1 );
fault.addFace( face2 );
fault.addFace( face3 );