Add MINPV features to EclipseGrid class.
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
#include <ert/ecl/ecl_grid.h>
|
||||
namespace Opm {
|
||||
|
||||
const double invalidThickness = -1e100;
|
||||
const double invalidValue = -1e100;
|
||||
|
||||
/**
|
||||
Will create an EclipseGrid instance based on an existing
|
||||
@@ -38,7 +38,9 @@ namespace Opm {
|
||||
*/
|
||||
EclipseGrid::EclipseGrid(const std::string& filename )
|
||||
: m_pinchActive(false),
|
||||
m_pinchThresholdThickness(invalidThickness)
|
||||
m_pinchThresholdThickness(invalidValue),
|
||||
m_minpvActive(false),
|
||||
m_minpvValue(invalidValue)
|
||||
{
|
||||
ecl_grid_type * new_ptr = ecl_grid_load_case( filename.c_str() );
|
||||
if (new_ptr)
|
||||
@@ -49,7 +51,9 @@ namespace Opm {
|
||||
|
||||
EclipseGrid::EclipseGrid(const ecl_grid_type * src_ptr)
|
||||
: m_pinchActive(false),
|
||||
m_pinchThresholdThickness(invalidThickness)
|
||||
m_pinchThresholdThickness(invalidValue),
|
||||
m_minpvActive(false),
|
||||
m_minpvValue(invalidValue)
|
||||
{
|
||||
m_grid.reset( ecl_grid_alloc_copy( src_ptr ) , ecl_grid_free );
|
||||
}
|
||||
@@ -71,7 +75,9 @@ namespace Opm {
|
||||
|
||||
EclipseGrid::EclipseGrid(std::shared_ptr<const Deck> deck)
|
||||
: m_pinchActive(false),
|
||||
m_pinchThresholdThickness(invalidThickness)
|
||||
m_pinchThresholdThickness(invalidValue),
|
||||
m_minpvActive(false),
|
||||
m_minpvValue(invalidValue)
|
||||
{
|
||||
const bool hasRUNSPEC = Section::hasRUNSPEC(deck);
|
||||
const bool hasGRID = Section::hasGRID(deck);
|
||||
@@ -124,6 +130,10 @@ namespace Opm {
|
||||
m_pinchActive = true;
|
||||
m_pinchThresholdThickness = deck->getKeyword("PINCH")->getRecord(0)->getItem("THRESHOLD_THICKNESS")->getSIDouble(0);
|
||||
}
|
||||
if (deck->hasKeyword("MINPV")) {
|
||||
m_minpvActive = true;
|
||||
m_minpvValue = deck->getKeyword("MINPV")->getRecord(0)->getItem("MINPV")->getSIDouble(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -131,6 +141,8 @@ namespace Opm {
|
||||
bool EclipseGrid::equal(const EclipseGrid& other) const {
|
||||
return (m_pinchActive == other.m_pinchActive)
|
||||
&& (m_pinchThresholdThickness == other.m_pinchThresholdThickness)
|
||||
&& (m_minpvActive == other.m_minpvActive)
|
||||
&& (m_minpvValue == other.m_minpvValue)
|
||||
&& ecl_grid_compare( m_grid.get() , other.m_grid.get() , true , false , false );
|
||||
}
|
||||
|
||||
@@ -167,6 +179,18 @@ namespace Opm {
|
||||
}
|
||||
}
|
||||
|
||||
bool EclipseGrid::isMinpvActive( ) const {
|
||||
return m_minpvActive;
|
||||
}
|
||||
|
||||
double EclipseGrid::getMinpvValue( ) const {
|
||||
if (isMinpvActive()) {
|
||||
return m_minpvValue;
|
||||
} else {
|
||||
throw std::logic_error("cannot call getMinpvValue() when isMinpvActive() is false");
|
||||
}
|
||||
}
|
||||
|
||||
void EclipseGrid::assertGlobalIndex(size_t globalIndex) const {
|
||||
if (globalIndex >= getCartesianSize())
|
||||
throw std::invalid_argument("input index above valid range");
|
||||
|
||||
@@ -45,6 +45,8 @@ namespace Opm {
|
||||
size_t getCartesianSize( ) const;
|
||||
bool isPinchActive( ) const;
|
||||
double getPinchThresholdThickness( ) const;
|
||||
bool isMinpvActive( ) const;
|
||||
double getMinpvValue( ) const;
|
||||
|
||||
void assertGlobalIndex(size_t globalIndex) const;
|
||||
void assertIJK(size_t i , size_t j , size_t k) const;
|
||||
@@ -65,6 +67,8 @@ namespace Opm {
|
||||
std::shared_ptr<ecl_grid_type> m_grid;
|
||||
bool m_pinchActive;
|
||||
double m_pinchThresholdThickness;
|
||||
bool m_minpvActive;
|
||||
double m_minpvValue;
|
||||
|
||||
void initCartesianGrid(const std::vector<int>& dims , DeckConstPtr deck);
|
||||
void initCornerPointGrid(const std::vector<int>& dims , DeckConstPtr deck);
|
||||
|
||||
@@ -116,6 +116,52 @@ static Opm::DeckPtr createPinchedCPDeck() {
|
||||
}
|
||||
|
||||
|
||||
static Opm::DeckPtr createMinpvDefaultCPDeck() {
|
||||
const char *deckData =
|
||||
"RUNSPEC\n"
|
||||
"\n"
|
||||
"DIMENS\n"
|
||||
" 10 10 10 /\n"
|
||||
"GRID\n"
|
||||
"COORD\n"
|
||||
" 726*1 / \n"
|
||||
"ZCORN \n"
|
||||
" 8000*1 / \n"
|
||||
"ACTNUM \n"
|
||||
" 1000*1 / \n"
|
||||
"MINPV \n"
|
||||
" / \n"
|
||||
"EDIT\n"
|
||||
"\n";
|
||||
|
||||
Opm::ParserPtr parser(new Opm::Parser());
|
||||
return parser->parseString(deckData) ;
|
||||
}
|
||||
|
||||
|
||||
static Opm::DeckPtr createMinpvCPDeck() {
|
||||
const char *deckData =
|
||||
"RUNSPEC\n"
|
||||
"\n"
|
||||
"DIMENS\n"
|
||||
" 10 10 10 /\n"
|
||||
"GRID\n"
|
||||
"COORD\n"
|
||||
" 726*1 / \n"
|
||||
"ZCORN \n"
|
||||
" 8000*1 / \n"
|
||||
"ACTNUM \n"
|
||||
" 1000*1 / \n"
|
||||
"MINPV \n"
|
||||
" 10 / \n"
|
||||
"EDIT\n"
|
||||
"\n";
|
||||
|
||||
Opm::ParserPtr parser(new Opm::Parser());
|
||||
return parser->parseString(deckData) ;
|
||||
}
|
||||
|
||||
|
||||
static Opm::DeckPtr createCARTDeck() {
|
||||
const char *deckData =
|
||||
"RUNSPEC\n"
|
||||
@@ -627,5 +673,27 @@ BOOST_AUTO_TEST_CASE(ConstructorNORUNSPEC_PINCH) {
|
||||
BOOST_CHECK_THROW(grid1.getPinchThresholdThickness(), std::logic_error);
|
||||
BOOST_CHECK(grid2.isPinchActive());
|
||||
BOOST_CHECK_EQUAL(grid2.getPinchThresholdThickness(), 0.2);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ConstructorMINPV) {
|
||||
Opm::DeckConstPtr deck1 = createCPDeck();
|
||||
Opm::DeckConstPtr deck2 = createMinpvDefaultCPDeck();
|
||||
Opm::DeckConstPtr deck3 = createMinpvCPDeck();
|
||||
|
||||
Opm::EclipseGrid grid1(deck1);
|
||||
Opm::EclipseGrid grid2(deck2);
|
||||
Opm::EclipseGrid grid3(deck3);
|
||||
|
||||
BOOST_CHECK(!grid1.equal( grid2 ));
|
||||
BOOST_CHECK(!grid1.equal( grid3 ));
|
||||
BOOST_CHECK(!grid2.equal( grid3 ));
|
||||
BOOST_CHECK(!grid1.isMinpvActive());
|
||||
BOOST_CHECK_THROW(grid1.getMinpvValue(), std::logic_error);
|
||||
BOOST_CHECK(grid2.isMinpvActive());
|
||||
BOOST_CHECK_EQUAL(grid2.getMinpvValue(), 1e-6);
|
||||
BOOST_CHECK(grid3.isMinpvActive());
|
||||
BOOST_CHECK_EQUAL(grid3.getMinpvValue(), 10.0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user