Changed Completion to use Value<double>.

This commit is contained in:
Joakim Hove
2014-09-04 21:12:36 +02:00
parent f88fd65937
commit be32f91004
7 changed files with 88 additions and 51 deletions

View File

@@ -19,20 +19,23 @@
#include <opm/parser/eclipse/EclipseState/Schedule/Completion.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp>
#include <opm/parser/eclipse/EclipseState/Util/Value.hpp>
namespace Opm {
Completion::Completion(int i, int j , int k , CompletionStateEnum state , double CF, double diameter, double skinFactor, const CompletionDirection::DirectionEnum direction) {
m_i = i;
m_j = j;
m_k = k;
m_state = state;
m_CF = CF;
m_diameter = diameter;
m_skinFactor = skinFactor;
m_direction = direction;
}
Completion::Completion(int i, int j , int k , CompletionStateEnum state ,
const Value<double>& CF,
const Value<double>& diameter,
const Value<double>& skinFactor,
const CompletionDirection::DirectionEnum direction) : m_i(i),
m_j(j),
m_k(k),
m_state(state),
m_CF(CF),
m_diameter(diameter),
m_skinFactor(skinFactor),
m_direction(direction)
{ }
bool Completion::sameCoordinate(const Completion& other) const {
@@ -60,15 +63,25 @@ namespace Opm {
int K1 = compdatRecord->getItem("K1")->getInt(0) - 1;
int K2 = compdatRecord->getItem("K2")->getInt(0) - 1;
CompletionStateEnum state = CompletionStateEnumFromString( compdatRecord->getItem("STATE")->getTrimmedString(0) );
Value<double> CF("CF");
Value<double> diameter("Diameter");
Value<double> skinFactor("SkinFactor");
{
DeckItemConstPtr CFItem = compdatRecord->getItem("CF");
if (!CFItem->setInDeck())
throw std::invalid_argument("The connection factor item can not be defaulted");
DeckItemConstPtr diameterItem = compdatRecord->getItem("DIAMETER");
DeckItemConstPtr skinFactorItem = compdatRecord->getItem("SKIN");
if (CFItem->hasData())
CF.setValue( CFItem->getSIDouble(0));
if (diameterItem->hasData())
diameter.setValue( diameterItem->getSIDouble(0));
if (skinFactorItem->hasData())
skinFactor.setValue( skinFactorItem->getRawDouble(0));
}
double CF = compdatRecord->getItem("CF")->getSIDouble(0);
double diameter = compdatRecord->getItem("DIAMETER")->getSIDouble(0);
double skinFactor = compdatRecord->getItem("SKIN")->getRawDouble(0);
const CompletionDirection::DirectionEnum& direction = CompletionDirection::DirectionEnumFromString(compdatRecord->getItem("DIR")->getTrimmedString(0));
for (int k = K1; k <= K2; k++) {
@@ -136,15 +149,15 @@ namespace Opm {
}
double Completion::getCF() const {
return m_CF;
return m_CF.getValue();
}
double Completion::getDiameter() const {
return m_diameter;
return m_diameter.getValue();
}
double Completion::getSkinFactor() const {
return m_skinFactor;
return m_skinFactor.getValue();
}
CompletionDirection::DirectionEnum Completion::getDirection() const {

View File

@@ -28,13 +28,19 @@
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp>
#include <opm/parser/eclipse/EclipseState/Util/Value.hpp>
namespace Opm {
class Completion {
public:
Completion(int i, int j , int k , CompletionStateEnum state , double CF, double diameter, double skinFactor, const CompletionDirection::DirectionEnum direction = CompletionDirection::DirectionEnum::Z);
Completion(int i, int j , int k , CompletionStateEnum state ,
const Value<double>& CF,
const Value<double>& diameter,
const Value<double>& skinFactor,
const CompletionDirection::DirectionEnum direction = CompletionDirection::DirectionEnum::Z);
bool sameCoordinate(const Completion& other) const;
int getI() const;
int getJ() const;
@@ -52,7 +58,9 @@ namespace Opm {
private:
int m_i, m_j, m_k;
double m_CF, m_diameter, m_skinFactor;
Value<double> m_diameter;
Value<double> m_CF;
Value<double> m_skinFactor;
CompletionStateEnum m_state;
CompletionDirection::DirectionEnum m_direction;
};

View File

@@ -48,8 +48,8 @@ BOOST_AUTO_TEST_CASE(CreateCompletionSetOK) {
BOOST_AUTO_TEST_CASE(AddCompletionSizeCorrect) {
Opm::CompletionSet completionSet;
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion2(new Opm::Completion(11,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionConstPtr completion2(new Opm::Completion(11,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
completionSet.add( completion1 );
BOOST_CHECK_EQUAL( 1U , completionSet.size() );
@@ -62,8 +62,8 @@ BOOST_AUTO_TEST_CASE(AddCompletionSizeCorrect) {
BOOST_AUTO_TEST_CASE(CompletionSetGetOutOfRangeThrows) {
Opm::CompletionSet completionSet;
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion2(new Opm::Completion(11,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionConstPtr completion2(new Opm::Completion(11,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
completionSet.add( completion1 );
BOOST_CHECK_EQUAL( 1U , completionSet.size() );
@@ -78,8 +78,8 @@ BOOST_AUTO_TEST_CASE(CompletionSetGetOutOfRangeThrows) {
BOOST_AUTO_TEST_CASE(AddCompletionSameCellUpdates) {
Opm::CompletionSet completionSet;
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion2(new Opm::Completion(10,10,10,Opm::SHUT , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionConstPtr completion2(new Opm::Completion(10,10,10,Opm::SHUT , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
completionSet.add( completion1 );
@@ -94,9 +94,9 @@ BOOST_AUTO_TEST_CASE(AddCompletionSameCellUpdates) {
BOOST_AUTO_TEST_CASE(AddCompletionShallowCopy) {
Opm::CompletionSet completionSet;
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion2(new Opm::Completion(10,10,11,Opm::SHUT , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion3(new Opm::Completion(10,10,12,Opm::SHUT , 99.88, 22.33, 33.22));
Opm::CompletionConstPtr completion1(new Opm::Completion(10,10,10,Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionConstPtr completion2(new Opm::Completion(10,10,11,Opm::SHUT , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionConstPtr completion3(new Opm::Completion(10,10,12,Opm::SHUT , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
completionSet.add( completion1 );
completionSet.add( completion2 );

View File

@@ -39,29 +39,29 @@
BOOST_AUTO_TEST_CASE(CreateCompletionOK) {
Opm::Completion completion(10,10,10,Opm::OPEN,100, 3.33, 3.3);
Opm::Completion completion(10,10,10,Opm::OPEN,Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
}
BOOST_AUTO_TEST_CASE(testGetFunctions) {
Opm::Completion completion(10,11,12,Opm::OPEN,100, 44, 33);
Opm::Completion completion(10,11,12,Opm::OPEN,Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
BOOST_CHECK_EQUAL( 10 , completion.getI() );
BOOST_CHECK_EQUAL( 11 , completion.getJ() );
BOOST_CHECK_EQUAL( 12 , completion.getK() );
BOOST_CHECK_EQUAL( Opm::OPEN , completion.getState());
BOOST_CHECK_EQUAL( 100 , completion.getCF());
BOOST_CHECK_EQUAL( 44 , completion.getDiameter());
BOOST_CHECK_EQUAL( 33 , completion.getSkinFactor());
BOOST_CHECK_EQUAL( 99.88 , completion.getCF());
BOOST_CHECK_EQUAL( 22.33 , completion.getDiameter());
BOOST_CHECK_EQUAL( 33.22 , completion.getSkinFactor());
}
BOOST_AUTO_TEST_CASE(CompletionTestssameCoordinate) {
Opm::Completion completion1(10,10,10,Opm::OPEN, 100.0, 30, 40);
Opm::Completion completion2(10,10,10,Opm::OPEN, 100.0, 30, 40);
Opm::Completion completion3(11,10,10,Opm::OPEN, 100.0, 30, 40);
Opm::Completion completion4(10,11,10,Opm::OPEN, 100.0, 30, 40);
Opm::Completion completion5(10,10,11,Opm::OPEN, 100.0, 30, 40);
Opm::Completion completion1(10,10,10,Opm::OPEN, Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
Opm::Completion completion2(10,10,10,Opm::OPEN, Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
Opm::Completion completion3(11,10,10,Opm::OPEN, Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
Opm::Completion completion4(10,11,10,Opm::OPEN, Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
Opm::Completion completion5(10,10,11,Opm::OPEN, Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22));
BOOST_CHECK( completion1.sameCoordinate( completion2 ));
BOOST_CHECK_EQUAL( false , completion1.sameCoordinate( completion3 ));

View File

@@ -171,11 +171,11 @@ BOOST_AUTO_TEST_CASE(UpdateCompletions) {
std::vector<Opm::CompletionPtr> newCompletions;
std::vector<Opm::CompletionPtr> newCompletions2;
Opm::CompletionPtr comp1(new Opm::Completion( 10 , 10 , 10 , Opm::AUTO , 99.0, 22.3, 33.2));
Opm::CompletionPtr comp2(new Opm::Completion( 10 , 11 , 10 , Opm::SHUT , 99.0, 22.3, 33.2));
Opm::CompletionPtr comp3(new Opm::Completion( 10 , 10 , 12 , Opm::OPEN , 99.0, 22.3, 33.2));
Opm::CompletionPtr comp4(new Opm::Completion( 10 , 10 , 12 , Opm::SHUT , 99.0, 22.3, 33.2));
Opm::CompletionPtr comp5(new Opm::Completion( 10 , 10 , 13 , Opm::OPEN , 99.0, 22.3, 33.2));
Opm::CompletionPtr comp1(new Opm::Completion( 10 , 10 , 10 , Opm::AUTO , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionPtr comp2(new Opm::Completion( 10 , 11 , 10 , Opm::SHUT , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionPtr comp3(new Opm::Completion( 10 , 10 , 12 , Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionPtr comp4(new Opm::Completion( 10 , 10 , 12 , Opm::SHUT , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
Opm::CompletionPtr comp5(new Opm::Completion( 10 , 10 , 13 , Opm::OPEN , Opm::Value<double>("CF",99.88), Opm::Value<double>("D",22.33), Opm::Value<double>("SKIN",33.22)));
//std::vector<Opm::CompletionConstPtr> newCompletions2{ comp4 , comp5}; Newer c++

View File

@@ -70,3 +70,11 @@ BOOST_AUTO_TEST_CASE( check_equal2 ) {
v2.setValue(110);
BOOST_CHECK_EQUAL( true , v1.equal(v2));
}
BOOST_AUTO_TEST_CASE( check_assign) {
Opm::Value<int> v1("v1",100);
Opm::Value<int> v2(v1);
BOOST_CHECK(v1.equal(v2));
}

View File

@@ -19,7 +19,10 @@
#define BOOST_TEST_MODULE CompletionIntegrationTests
#include <map>
#include <stdexcept>
#include <boost/test/unit_test.hpp>
#include <boost/test/test_tools.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
@@ -65,9 +68,17 @@ BOOST_AUTO_TEST_CASE( CreateCompletionsFromRecord ) {
BOOST_CHECK_EQUAL( 3.8134259259259256e-12 , completion2->getCF() );
BOOST_CHECK_EQUAL( Opm::CompletionDirection::DirectionEnum::X, completion2->getDirection() );
}
// We do not accept a defaulted Connection Factor
BOOST_CHECK_THROW(Completion::completionsFromCOMPDATRecord( line1 ) , std::invalid_argument );
{
std::pair<std::string , std::vector<CompletionPtr> > pair = Completion::completionsFromCOMPDATRecord( line1 );
// We try to get the numerical value of a default CF:
CompletionPtr comp = pair.second[0];
/*
This statement gives a compilation error:
BOOST_CHECK_THROW( comp->getCF() , std::logical_error );
*/
}
}
@@ -109,9 +120,6 @@ BOOST_AUTO_TEST_CASE( CreateCompletionsFromKeyword ) {
BOOST_CHECK_EQUAL( OPEN , completion4->getState() );
BOOST_CHECK_EQUAL( 5.4722222222222212e-13 , completion4->getCF() );
BOOST_CHECK_EQUAL( Opm::CompletionDirection::DirectionEnum::Y, completion4->getDirection() );
}