Support Creating ECLGraph from "ecl_grid_type*"

This commit introduces a new static function

  ECLGraph::load(const ecl_grid_type*, const ECLInitFileData&)

This is in order to simplify constructing the backing graph from
ResInsight's .EGRID input--especially to have consistent view of
a model's active cells irrespective of which simulator created
the result set.
This commit is contained in:
Bård Skaflestad 2019-06-17 19:31:48 +02:00
parent b17749ccbd
commit 99ce43ccdb
2 changed files with 35 additions and 21 deletions

View File

@ -1261,8 +1261,8 @@ public:
/// If available in the INIT file, the constructor will
/// also leverage the transmissibility data when
/// constructing the active cell neighbourship table.
Impl(const boost::filesystem::path& grid,
const ECLInitFileData& init);
Impl(const ecl_grid_type* grid,
const ECLInitFileData& init);
/// Retrieve number of grids.
///
@ -1909,21 +1909,17 @@ isViable(const std::vector<ECL::CartesianGridData>& grids,
// ======================================================================
Opm::ECLGraph::Impl::Impl(const boost::filesystem::path& grid,
const ECLInitFileData& init)
Opm::ECLGraph::Impl::Impl(const ecl_grid_type* grid,
const ECLInitFileData& init)
{
const auto G = ECL::loadCase(grid);
const auto numGrids = ECL::numGrids(G.get());
const auto numGrids = ECL::numGrids(grid);
this->grid_.reserve(numGrids);
this->activeOffset_.reserve(numGrids + 1);
this->activeOffset_.push_back(0);
for (auto gridID = 0*numGrids; gridID < numGrids; ++gridID)
{
this->grid_.emplace_back(ECL::getGrid(G.get(), gridID),
init, gridID);
for (auto gridID = 0*numGrids; gridID < numGrids; ++gridID) {
this->grid_.emplace_back(ECL::getGrid(grid, gridID), init, gridID);
this->activeOffset_.push_back(this->activeOffset_.back() +
this->grid_.back().numCells());
@ -1933,34 +1929,34 @@ Opm::ECLGraph::Impl::Impl(const boost::filesystem::path& grid,
this->gridID_[this->activeGrids_.back()] = gridID;
}
this->defineNNCs(G.get(), init);
this->defineNNCs(grid, init);
this->defineActivePhases(init);
// Extract geometry of main grid.
{
// Size
{
this->geomGrid_.size[0] = ecl_grid_get_nx(G.get());
this->geomGrid_.size[1] = ecl_grid_get_ny(G.get());
this->geomGrid_.size[2] = ecl_grid_get_nz(G.get());
this->geomGrid_.size[0] = ecl_grid_get_nx(grid);
this->geomGrid_.size[1] = ecl_grid_get_ny(grid);
this->geomGrid_.size[2] = ecl_grid_get_nz(grid);
}
// COORD
{
const auto ncoord =
static_cast<std::size_t>(ecl_grid_get_coord_size(G.get()));
static_cast<std::size_t>(ecl_grid_get_coord_size(grid));
this->geomGrid_.coord.resize(ncoord, 0.0);
ecl_grid_init_coord_data_double(G.get(), this->geomGrid_.coord.data());
ecl_grid_init_coord_data_double(grid, this->geomGrid_.coord.data());
}
// ZCORN
{
const auto nzcorn =
static_cast<std::size_t>(ecl_grid_get_zcorn_size(G.get()));
static_cast<std::size_t>(ecl_grid_get_zcorn_size(grid));
this->geomGrid_.zcorn.resize(nzcorn, 0.0);
ecl_grid_init_zcorn_data_double(G.get(), this->geomGrid_.zcorn.data());
ecl_grid_init_zcorn_data_double(grid, this->geomGrid_.zcorn.data());
}
// ACTNUM
@ -1972,7 +1968,7 @@ Opm::ECLGraph::Impl::Impl(const boost::filesystem::path& grid,
this->geomGrid_.actnum.assign(nglob, 1);
ecl_grid_init_actnum_data(G.get(), this->geomGrid_.actnum.data());
ecl_grid_init_actnum_data(grid, this->geomGrid_.actnum.data());
}
}
}
@ -2431,7 +2427,16 @@ Opm::ECLGraph
Opm::ECLGraph::load(const boost::filesystem::path& grid,
const ECLInitFileData& init)
{
auto pImpl = ImplPtr{new Impl(grid, init)};
auto G = ECL::loadCase(grid);
return ECLGraph::load(G.get(), init);
}
Opm::ECLGraph
Opm::ECLGraph::load(const ecl_grid_type* grid,
const ECLInitFileData& init)
{
auto pImpl = ImplPtr{ new Impl(grid, init) };
return { std::move(pImpl) };
}

View File

@ -38,6 +38,11 @@
/// on-disk ECLIPSE output, featuring on-demand property loading from
/// backing object (e.g., restart vectors at various time points).
extern "C" {
struct ecl_grid_struct;
typedef ecl_grid_struct ecl_grid_type;
} // extern "C"
namespace Opm {
/// Package an ECLIPSE result set (represented as GRID, INIT, and
@ -92,6 +97,10 @@ namespace Opm {
load(const boost::filesystem::path& gridFile,
const ECLInitFileData& init);
static ECLGraph
load(const ecl_grid_type* grid,
const ECLInitFileData& init);
/// Retrieve number of grids in model.
///
/// \return The number of LGR grids plus one (the main grid).