// Construct corner-point grid from deck. void GridManager::initFromDeckCornerpoint(const Opm::EclipseGridParser& deck) { // Extract data from deck. // Collect in input struct for preprocessing. struct grdecl grdecl = deck.get_grdecl(); // Process grid. ug_ = create_grid_cornerpoint(&grdecl, 0.0); if (!ug_) { OPM_THROW(std::runtime_error, "Failed to construct grid."); } }
// Construct corner-point grid from EclipseGrid. void GridManager::initFromEclipseGrid(const Opm::EclipseGrid& inputGrid, const std::vector<double>& poreVolumes) { struct grdecl g; std::vector<int> actnum; std::vector<double> coord; std::vector<double> zcorn; std::vector<double> mapaxes; g.dims[0] = inputGrid.getNX(); g.dims[1] = inputGrid.getNY(); g.dims[2] = inputGrid.getNZ(); inputGrid.exportMAPAXES( mapaxes ); inputGrid.exportCOORD( coord ); inputGrid.exportZCORN( zcorn ); inputGrid.exportACTNUM( actnum ); g.coord = coord.data(); g.zcorn = zcorn.data(); g.actnum = actnum.data(); g.mapaxes = mapaxes.data(); if (!poreVolumes.empty() && (inputGrid.getMinpvMode() != MinpvMode::ModeEnum::Inactive)) { MinpvProcessor mp(g.dims[0], g.dims[1], g.dims[2]); const std::vector<double>& minpvv = inputGrid.getMinpvVector(); const size_t cartGridSize = g.dims[0] * g.dims[1] * g.dims[2]; std::vector<double> thickness(cartGridSize); for (size_t i = 0; i < cartGridSize; ++i) { thickness[i] = inputGrid.getCellThicknes(i); } // The legacy code only supports the opmfil option bool opmfil = true; //inputGrid.getMinpvMode() == MinpvMode::OpmFIL; const double z_tolerance = inputGrid.isPinchActive() ? inputGrid.getPinchThresholdThickness() : 0.0; mp.process(thickness, z_tolerance, poreVolumes, minpvv, actnum, opmfil, zcorn.data()); } const double z_tolerance = inputGrid.isPinchActive() ? inputGrid.getPinchThresholdThickness() : 0.0; ug_ = create_grid_cornerpoint(&g, z_tolerance); if (!ug_) { OPM_THROW(std::runtime_error, "Failed to construct grid."); } attach_zcorn_copy( ug_ , zcorn.data() ); }
// Construct corner-point grid from EclipseGrid. void GridManager::initFromEclipseGrid(Opm::EclipseGridConstPtr eclipseGrid, const std::vector<double>& poreVolumes) { struct grdecl g; std::vector<int> actnum; std::vector<double> coord; std::vector<double> zcorn; std::vector<double> mapaxes; g.dims[0] = eclipseGrid->getNX(); g.dims[1] = eclipseGrid->getNY(); g.dims[2] = eclipseGrid->getNZ(); eclipseGrid->exportMAPAXES( mapaxes ); eclipseGrid->exportCOORD( coord ); eclipseGrid->exportZCORN( zcorn ); eclipseGrid->exportACTNUM( actnum ); g.coord = coord.data(); g.zcorn = zcorn.data(); g.actnum = actnum.data(); g.mapaxes = mapaxes.data(); if (!poreVolumes.empty() && (eclipseGrid->getMinpvMode() != MinpvMode::ModeEnum::Inactive)) { MinpvProcessor mp(g.dims[0], g.dims[1], g.dims[2]); const double minpv_value = eclipseGrid->getMinpvValue(); // Currently the pinchProcessor is not used and only opmfil is supported //bool opmfil = eclipseGrid->getMinpvMode() == MinpvMode::OpmFIL; bool opmfil = true; mp.process(poreVolumes, minpv_value, actnum, opmfil, zcorn.data()); } const double z_tolerance = eclipseGrid->isPinchActive() ? eclipseGrid->getPinchThresholdThickness() : 0.0; ug_ = create_grid_cornerpoint(&g, z_tolerance); if (!ug_) { OPM_THROW(std::runtime_error, "Failed to construct grid."); } }