Removed getDims() and disable this EclipseGrid

* Removed method getDims since getNXYZ already exists
* Now we throw if EclipseGrid get lean deck
* Removed tests for assertCellInfo and hasCellInfo
* Fixed ResinsightTests to use GridDims
This commit is contained in:
Pål Grønås Drange
2016-06-21 14:56:34 +02:00
parent 1fada954e2
commit 49f3356934
9 changed files with 85 additions and 111 deletions

View File

@@ -66,8 +66,7 @@ namespace Opm {
m_deckUnitSystem( deck.getActiveUnitSystem() )
{
if (m_inputGrid->hasCellInfo())
m_inputGrid->resetACTNUM(m_eclipseProperties.getIntGridProperty("ACTNUM").getData().data());
m_inputGrid->resetACTNUM(m_eclipseProperties.getIntGridProperty("ACTNUM").getData().data());
if (deck.hasKeyword( "TITLE" )) {
const auto& titleKeyword = deck.getKeyword( "TITLE" );

View File

@@ -55,7 +55,7 @@ namespace Opm {
m_pinchoutMode(PinchMode::ModeEnum::TOPBOT),
m_multzMode(PinchMode::ModeEnum::TOP)
{
initCornerPointGrid( dims, coord , zcorn , actnum , mapaxes );
initCornerPointGrid( dims, coord , zcorn , actnum , mapaxes );
}
@@ -93,18 +93,9 @@ namespace Opm {
m_pinchoutMode( src.m_pinchoutMode ),
m_multzMode( src.m_multzMode )
{
if (src.hasCellInfo())
m_grid.reset( ecl_grid_alloc_copy( src.c_ptr() ) );
m_grid.reset( ecl_grid_alloc_copy( src.c_ptr() ) );
}
/*
This creates a grid which only has dimension, and no pointer to
a true grid structure. This grid will answer false to
hasCellInfo() - but can be used in all situations where the grid
dependency is really only on the dimensions.
*/
EclipseGrid::EclipseGrid(size_t nx, size_t ny , size_t nz,
double dx, double dy, double dz)
: GridDims(nx, ny, nz),
@@ -161,7 +152,7 @@ namespace Opm {
m_multzMode(PinchMode::ModeEnum::TOP)
{
const std::array<int, 3> dims = getDims();
const std::array<int, 3> dims = getNXYZ();
initGrid(dims, deck);
if (actnum != nullptr)
@@ -185,6 +176,8 @@ namespace Opm {
initCornerPointGrid(dims , deck);
} else if (hasCartesianKeywords(deck)) {
initCartesianGrid(dims , deck);
} else {
throw std::invalid_argument("EclipseGrid needs cornerpoint or cartesian keywords.");
}
if (deck.hasKeyword<ParserKeywords::PINCH>()) {
@@ -225,13 +218,10 @@ namespace Opm {
}
size_t EclipseGrid::activeIndex(size_t globalIndex) const {
assertCellInfo();
{
int active_index = ecl_grid_get_active_index1( m_grid.get() , globalIndex );
if (active_index < 0)
throw std::invalid_argument("Input argument does not correspond to an active cell");
return static_cast<size_t>( active_index );
}
int active_index = ecl_grid_get_active_index1( m_grid.get() , globalIndex );
if (active_index < 0)
throw std::invalid_argument("Input argument does not correspond to an active cell");
return static_cast<size_t>( active_index );
}
@@ -539,26 +529,7 @@ namespace Opm {
}
}
/*
This function checks if the grid has a pointer to an underlying
ecl_grid_type; which must be used to read cell info as
size/depth/active of individual cells.
*/
bool EclipseGrid::hasCellInfo() const {
return static_cast<bool>( m_grid );
}
void EclipseGrid::assertCellInfo() const {
if (!hasCellInfo())
throw std::invalid_argument("Tried to access cell information in a grid with only dimensions");
}
const ecl_grid_type * EclipseGrid::c_ptr() const {
assertCellInfo();
return m_grid.get();
}
@@ -578,7 +549,7 @@ namespace Opm {
if(m_minpvMode!=MinpvMode::ModeEnum::Inactive){
status = status && (m_minpvValue == other.getMinpvValue());
}
return status;
return status;
}
@@ -706,13 +677,11 @@ namespace Opm {
void EclipseGrid::resetACTNUM( const int * actnum) {
assertCellInfo();
ecl_grid_reset_actnum( m_grid.get() , actnum );
}
void EclipseGrid::fwriteEGRID( const std::string& filename, bool output_metric ) const {
assertCellInfo();
ecl_grid_fwrite_EGRID( m_grid.get() , filename.c_str(), output_metric );
}

View File

@@ -49,25 +49,6 @@ namespace Opm {
- Size of cells
- Real world position of cells
- Active/inactive status of cells
However in may cases the only required information is the
dimension of the grid. To facilitate simpler use, in particular
in testing, the grid dimensions are internalized separate from
the ecl_grid_type pointer. This means that in many cases a grid
without the underlying ecl_grid_type pointer is sufficient. To
create such a 'naked' grid you can parse a deck with only
DIMENS / SPECGRID and no further grid related keywords, or
alternatively use the:
EclipseGrid::EclipseGrid(nx,ny,nz)
constructor.
To query a grid instance if it has proper underlying grid
support use the method:
bool EclipseGrid::hasCellInfo();
*/
class EclipseGrid : public GridDims {
@@ -105,7 +86,6 @@ namespace Opm {
MinpvMode::ModeEnum getMinpvMode() const;
double getMinpvValue( ) const;
bool hasCellInfo() const;
std::array<double, 3> getCellCenter(size_t i,size_t j, size_t k) const;
std::array<double, 3> getCellCenter(size_t globalIndex) const;
double getCellVolume(size_t globalIndex) const;
@@ -140,8 +120,6 @@ namespace Opm {
PinchMode::ModeEnum m_pinchoutMode;
PinchMode::ModeEnum m_multzMode;
void assertCellInfo() const;
void initCornerPointGrid(const std::array<int,3>& dims ,
const std::vector<double>& coord ,
const std::vector<double>& zcorn ,

View File

@@ -28,7 +28,7 @@
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Deck/Section.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/GridDims.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp>
@@ -42,7 +42,7 @@ namespace Opm {
{}
FaultCollection::FaultCollection(const GRIDSection& gridSection,
const EclipseGrid& grid) {
const GridDims& grid) {
const auto& faultKeywords = gridSection.getKeywordList<ParserKeywords::FAULTS>();
for (auto keyword_iter = faultKeywords.begin(); keyword_iter != faultKeywords.end(); ++keyword_iter) {
@@ -57,7 +57,7 @@ namespace Opm {
}
void FaultCollection::addFaultFaces(const EclipseGrid& grid,
void FaultCollection::addFaultFaces(const GridDims& grid,
const DeckRecord& faultRecord,
const std::string& faultName)
{

View File

@@ -21,23 +21,21 @@
#include <cstddef>
#include <string>
#include <memory>
#include <opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/Fault.hpp>
namespace Opm {
class DeckRecord;
class EclipseGrid;
class GridDims;
class GRIDSection;
class FaultCollection {
public:
FaultCollection();
FaultCollection(const GRIDSection& gridSection, const EclipseGrid& grid);
FaultCollection(const GRIDSection& gridSection, const GridDims& grid);
size_t size() const;
bool hasFault(const std::string& faultName) const;
@@ -51,7 +49,7 @@ public:
void setTransMult(const std::string& faultName , double transMult);
private:
void addFaultFaces(const EclipseGrid& grid,
void addFaultFaces(const GridDims& grid,
const DeckRecord& faultRecord,
const std::string& faultName);
OrderedMap<Fault> m_faults;

View File

@@ -102,10 +102,6 @@ namespace Opm {
{
}
const std::array<int, 3> GridDims::getDims() const {
return std::array<int, 3> { int(m_nx), int(m_ny), int(m_nz) };
}
// keyword must be DIMENS or SPECGRID
std::vector<int> readDims(const DeckKeyword& keyword) {
const auto& record = keyword.getRecord(0);

View File

@@ -58,8 +58,6 @@ namespace Opm {
protected:
GridDims();
const std::array<int, 3> getDims() const;
size_t m_nx;
size_t m_ny;
size_t m_nz;

View File

@@ -119,8 +119,14 @@ BOOST_AUTO_TEST_CASE(HasGridKeywords) {
BOOST_AUTO_TEST_CASE(CreateGridNoCells) {
Opm::DeckPtr deck = createDeckHeaders();
Opm::EclipseGrid grid( deck );
Opm::DeckPtr deckptr = createDeckHeaders();
const Opm::Deck& deck = *deckptr;
{
Opm::EclipseGrid* gridptr = nullptr;
BOOST_CHECK_THROW( gridptr = new Opm::EclipseGrid( deck ) , std::invalid_argument);
delete gridptr;
}
const Opm::GridDims grid(deck);
BOOST_CHECK_EQUAL( 10 , grid.getNX());
BOOST_CHECK_EQUAL( 10 , grid.getNY());
BOOST_CHECK_EQUAL( 10 , grid.getNZ());
@@ -344,8 +350,6 @@ BOOST_AUTO_TEST_CASE(CREATE_SIMPLE) {
BOOST_CHECK_EQUAL( grid.getNY() , 20 );
BOOST_CHECK_EQUAL( grid.getNZ() , 30 );
BOOST_CHECK_EQUAL( grid.getCartesianSize() , 6000 );
BOOST_CHECK_EQUAL( true , grid.hasCellInfo() );
}
BOOST_AUTO_TEST_CASE(DEPTHZ_EQUAL_TOPS) {
@@ -425,9 +429,13 @@ BOOST_AUTO_TEST_CASE(HasINVALIDCartKeywords) {
BOOST_AUTO_TEST_CASE(CreateMissingGRID_throws) {
Opm::DeckPtr deck = createDeckHeaders();
Opm::EclipseGrid grid( deck );
BOOST_CHECK_EQUAL( false , grid.hasCellInfo() );
auto deckptr = createDeckHeaders();
const Opm::Deck& deck = *deckptr;
{
Opm::EclipseGrid* gridptr = nullptr;
BOOST_CHECK_THROW( gridptr = new Opm::EclipseGrid( deck ) , std::invalid_argument);
delete gridptr;
}
}
@@ -456,7 +464,8 @@ static Opm::DeckPtr createInvalidDXYZCARTDeck() {
BOOST_AUTO_TEST_CASE(CreateCartesianGRID) {
Opm::DeckPtr deck = createInvalidDXYZCARTDeck();
auto deckptr = createInvalidDXYZCARTDeck();
const Opm::Deck& deck = *deckptr;
BOOST_CHECK_THROW(new Opm::EclipseGrid( deck ) , std::invalid_argument);
}
@@ -486,9 +495,13 @@ static Opm::DeckPtr createInvalidDXYZCARTDeckDEPTHZ() {
BOOST_AUTO_TEST_CASE(CreateCartesianGRIDDEPTHZ) {
Opm::DeckPtr deck = createInvalidDXYZCARTDeckDEPTHZ();
Opm::EclipseGrid grid( deck );
BOOST_CHECK_EQUAL( false , grid.hasCellInfo() );
auto deckptr = createInvalidDXYZCARTDeckDEPTHZ();
const Opm::Deck& deck = *deckptr;
{
Opm::EclipseGrid* gridptr = nullptr;
BOOST_CHECK_THROW( gridptr = new Opm::EclipseGrid( deck ) , std::invalid_argument);
delete gridptr;
}
}
@@ -539,8 +552,14 @@ static Opm::DeckPtr createInvalidDEPTHZDeck1 () {
BOOST_AUTO_TEST_CASE(CreateCartesianGRIDInvalidDEPTHZ1) {
Opm::DeckPtr deck = createInvalidDEPTHZDeck1();
BOOST_CHECK_THROW(new Opm::EclipseGrid( deck ) , std::invalid_argument);
auto deckptr = createInvalidDEPTHZDeck1();
const Opm::Deck& deck = *deckptr;
{
Opm::EclipseGrid* gridptr = nullptr;
BOOST_CHECK_THROW( gridptr = new Opm::EclipseGrid( deck ) , std::invalid_argument);
delete gridptr;
}
}
@@ -567,20 +586,26 @@ static Opm::DeckPtr createInvalidDEPTHZDeck2 () {
}
BOOST_AUTO_TEST_CASE(CreateCartesianGRIDInvalidDEPTHZ2) {
Opm::DeckPtr deck = createInvalidDEPTHZDeck2();
BOOST_CHECK_THROW(new Opm::EclipseGrid( deck ) , std::invalid_argument);
auto deckptr = createInvalidDEPTHZDeck2();
const Opm::Deck& deck = *deckptr;
{
Opm::EclipseGrid* gridptr = nullptr;
BOOST_CHECK_THROW( gridptr = new Opm::EclipseGrid( deck ) , std::invalid_argument);
delete gridptr;
}
}
BOOST_AUTO_TEST_CASE(CreateCartesianGRIDOnlyTopLayerDZ) {
Opm::DeckPtr deck = createOnlyTopDZCartGrid();
std::shared_ptr<Opm::EclipseGrid> grid(new Opm::EclipseGrid( deck ));
Opm::EclipseGrid grid( *deck );
BOOST_CHECK_EQUAL( 10 , grid->getNX( ));
BOOST_CHECK_EQUAL( 5 , grid->getNY( ));
BOOST_CHECK_EQUAL( 20 , grid->getNZ( ));
BOOST_CHECK_EQUAL( 1000 , grid->getNumActive());
BOOST_CHECK_EQUAL( 10 , grid.getNX( ));
BOOST_CHECK_EQUAL( 5 , grid.getNY( ));
BOOST_CHECK_EQUAL( 20 , grid.getNZ( ));
BOOST_CHECK_EQUAL( 1000 , grid.getNumActive());
}
@@ -968,11 +993,9 @@ BOOST_AUTO_TEST_CASE(GridActnumVia3D) {
BOOST_CHECK_NO_THROW(ep.getIntGridProperty("ACTNUM"));
BOOST_CHECK_NO_THROW(grid->getNumActive());
BOOST_CHECK(grid->hasCellInfo());
BOOST_CHECK_EQUAL(grid->getNumActive(), 2 * 2 * 2 - 1);
BOOST_CHECK_NO_THROW(grid2.getNumActive());
BOOST_CHECK(grid2.hasCellInfo());
BOOST_CHECK_EQUAL(grid2.getNumActive(), 2 * 2 * 2 - 1);
}
@@ -981,7 +1004,6 @@ BOOST_AUTO_TEST_CASE(GridActnumViaState) {
BOOST_CHECK_NO_THROW(Opm::EclipseState(deck, Opm::ParseContext()));
Opm::EclipseState es(deck, Opm::ParseContext());
BOOST_CHECK(es.getInputGrid()->hasCellInfo());
BOOST_CHECK_EQUAL(es.getInputGrid()->getNumActive(), 2 * 2 * 2 - 1);
}

View File

@@ -17,7 +17,8 @@
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#define BOOST_TEST_MODULE BoxTest
#define BOOST_TEST_MODULE ResinsightIntegrationTests
#include <boost/test/unit_test.hpp>
#include <boost/test/test_tools.hpp>
@@ -29,7 +30,7 @@
#include <opm/parser/eclipse/Parser/ParserKeywords/G.hpp>
#include <opm/parser/eclipse/Parser/ParserKeywords/S.hpp>
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/GridDims.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp>
@@ -46,10 +47,18 @@ BOOST_AUTO_TEST_CASE( test_parse ) {
parser.addKeyword<ParserKeywords::SPECGRID>();
parser.addKeyword<ParserKeywords::FAULTS>();
auto deck = parser.parseFile("testdata/integration_tests/Resinsight/DECK1.DATA" , parseContext);
auto deckptr = parser.parseFile("testdata/integration_tests/Resinsight/DECK1.DATA" , parseContext);
const Deck& deck = *deckptr;
BOOST_CHECK( deck->hasKeyword<ParserKeywords::SPECGRID>() );
BOOST_CHECK( deck->hasKeyword<ParserKeywords::FAULTS>() );
BOOST_CHECK( deck.hasKeyword<ParserKeywords::SPECGRID>() );
BOOST_CHECK( deck.hasKeyword<ParserKeywords::FAULTS>() );
{
GridDims* grid = nullptr;
BOOST_CHECK_NO_THROW( grid = new GridDims(deck) );
BOOST_CHECK_NO_THROW( grid->getCartesianSize() );
delete grid;
}
}
@@ -64,9 +73,14 @@ BOOST_AUTO_TEST_CASE( test_state ) {
parser.addKeyword<ParserKeywords::SPECGRID>();
parser.addKeyword<ParserKeywords::FAULTS>();
parser.addKeyword<ParserKeywords::GRID>();
auto deck = parser.parseFile("testdata/integration_tests/Resinsight/DECK1.DATA" , parseContext);
auto deckptr = parser.parseFile("testdata/integration_tests/Resinsight/DECK1.DATA" , parseContext);
const Deck& deck = *deckptr;
auto grid = std::make_shared<EclipseGrid>(deck);
GRIDSection gsec(*deck);
FaultCollection faults(gsec, *grid);
GridDims grid(deck);
GRIDSection gsec(deck);
FaultCollection faults(gsec, grid);
BOOST_CHECK_EQUAL( grid.getNX(), 20U);
BOOST_CHECK_EQUAL( grid.getNY(), 20U);
BOOST_CHECK_EQUAL( grid.getNZ(), 10U);
BOOST_CHECK_EQUAL( faults.size(), 2U);
}