Merge pull request #952 from jokva/unique-auto-deck

Change Deck access methods/types to references
This commit is contained in:
Joakim Hove 2016-02-18 23:17:17 +01:00
commit 7909311749
20 changed files with 227 additions and 232 deletions

View File

@ -89,7 +89,7 @@ void printKeywordValues(std::ofstream& out, std::string keyword, std::vector<T>
std::vector<double> getMapaxesValues(Opm::DeckConstPtr deck);
/// Mirror keyword MAPAXES in deck
void mirror_mapaxes(Opm::DeckConstPtr deck, std::string direction, std::ofstream& out) {
void mirror_mapaxes( std::shared_ptr< const Opm::Deck > deck, std::string direction, std::ofstream& out) {
// Assumes axis aligned with x/y-direction
std::cout << "Warning: Keyword MAPAXES not fully understood. Result should be verified manually." << std::endl;
if (deck->hasKeyword("MAPAXES")) {
@ -107,31 +107,31 @@ void mirror_mapaxes(Opm::DeckConstPtr deck, std::string direction, std::ofstream
}
/// Mirror keyword SPECGRID in deck
void mirror_specgrid(Opm::DeckConstPtr deck, std::string direction, std::ofstream& out) {
void mirror_specgrid(std::shared_ptr< const Opm::Deck > deck, std::string direction, std::ofstream& out) {
// We only need to multiply the dimension by 2 in the correct direction.
Opm::DeckRecordConstPtr specgridRecord = deck->getKeyword("SPECGRID")->getRecord(0);
const auto& specgridRecord = deck->getKeyword("SPECGRID").getRecord(0);
std::vector<int> dimensions(3);
dimensions[0] = specgridRecord->getItem("NX")->getInt(0);
dimensions[1] = specgridRecord->getItem("NY")->getInt(0);
dimensions[2] = specgridRecord->getItem("NZ")->getInt(0);
dimensions[0] = specgridRecord.getItem("NX").get< int >(0);
dimensions[1] = specgridRecord.getItem("NY").get< int >(0);
dimensions[2] = specgridRecord.getItem("NZ").get< int >(0);
if (direction == "x") {dimensions[0] *= 2;}
else if (direction == "y") {dimensions[1] *= 2;}
else {std::cerr << "Direction should be either x or y" << std::endl; exit(1);}
out << "SPECGRID" << std::endl << dimensions[0] << " " << dimensions[1] << " " << dimensions[2] << " "
<< specgridRecord->getItem("NUMRES")->getInt(0) << " "
<< specgridRecord->getItem("COORD_TYPE")->getString(0) << " "
<< specgridRecord.getItem("NUMRES").get< int >(0) << " "
<< specgridRecord.getItem("COORD_TYPE").get< std::string >(0) << " "
<< std::endl << "/" << std::endl << std::endl;
}
/// Mirror keyword COORD in deck
void mirror_coord(Opm::DeckConstPtr deck, std::string direction, std::ofstream& out) {
void mirror_coord(std::shared_ptr< const Opm::Deck > deck, std::string direction, std::ofstream& out) {
// We assume uniform spacing in x and y directions and parallel top and bottom faces
Opm::DeckRecordConstPtr specgridRecord = deck->getKeyword("SPECGRID")->getRecord(0);
const auto& specgridRecord = deck->getKeyword("SPECGRID").getRecord(0);
std::vector<int> dimensions(3);
dimensions[0] = specgridRecord->getItem("NX")->getInt(0);
dimensions[1] = specgridRecord->getItem("NY")->getInt(0);
dimensions[2] = specgridRecord->getItem("NZ")->getInt(0);
std::vector<double> coord = deck->getKeyword("COORD")->getRawDoubleData();
dimensions[0] = specgridRecord.getItem("NX").get< int >(0);
dimensions[1] = specgridRecord.getItem("NY").get< int >(0);
dimensions[2] = specgridRecord.getItem("NZ").get< int >(0);
std::vector<double> coord = deck->getKeyword("COORD").getRawDoubleData();
const int entries_per_pillar = 6;
std::vector<double> coord_mirrored;
// Handle the two directions differently due to ordering of the pillars.
@ -190,13 +190,13 @@ void mirror_coord(Opm::DeckConstPtr deck, std::string direction, std::ofstream&
}
/// Mirror keyword ZCORN in deck
void mirror_zcorn(Opm::DeckConstPtr deck, std::string direction, std::ofstream& out) {
Opm::DeckRecordConstPtr specgridRecord = deck->getKeyword("SPECGRID")->getRecord(0);
void mirror_zcorn(std::shared_ptr< const Opm::Deck > deck, std::string direction, std::ofstream& out) {
const auto& specgridRecord = deck->getKeyword("SPECGRID").getRecord(0);
std::vector<int> dimensions(3);
dimensions[0] = specgridRecord->getItem("NX")->getInt(0);
dimensions[1] = specgridRecord->getItem("NY")->getInt(0);
dimensions[2] = specgridRecord->getItem("NZ")->getInt(0);
std::vector<double> zcorn = deck->getKeyword("ZCORN")->getRawDoubleData();
dimensions[0] = specgridRecord.getItem("NX").get< int >(0);
dimensions[1] = specgridRecord.getItem("NY").get< int >(0);
dimensions[2] = specgridRecord.getItem("NZ").get< int >(0);
std::vector<double> zcorn = deck->getKeyword("ZCORN").getRawDoubleData();
std::vector<double> zcorn_mirrored;
// Handle the two directions differently due to ordering of the pillars.
if (direction == "x") {
@ -257,23 +257,23 @@ void mirror_zcorn(Opm::DeckConstPtr deck, std::string direction, std::ofstream&
printKeywordValues(out, "ZCORN", zcorn_mirrored, 8);
}
std::vector<int> getKeywordValues(std::string keyword, Opm::DeckConstPtr deck, int /*dummy*/) {
return deck->getKeyword(keyword)->getIntData();
std::vector<int> getKeywordValues(std::string keyword, std::shared_ptr< const Opm::Deck > deck, int /*dummy*/) {
return deck->getKeyword(keyword).getIntData();
}
std::vector<double> getKeywordValues(std::string keyword, Opm::DeckConstPtr deck, double /*dummy*/) {
return deck->getKeyword(keyword)->getRawDoubleData();
std::vector<double> getKeywordValues(std::string keyword, std::shared_ptr< const Opm::Deck > deck, double /*dummy*/) {
return deck->getKeyword(keyword).getRawDoubleData();
}
std::vector<double> getMapaxesValues(Opm::DeckConstPtr deck)
{
Opm::DeckRecordConstPtr mapaxesRecord = deck->getKeyword("MAPAXES")->getRecord(0);
const auto& mapaxesRecord = deck->getKeyword("MAPAXES").getRecord(0);
std::vector<double> result;
for (size_t itemIdx = 0; itemIdx < mapaxesRecord->size(); ++itemIdx) {
Opm::DeckItemConstPtr curItem = mapaxesRecord->getItem(itemIdx);
for (size_t itemIdx = 0; itemIdx < mapaxesRecord.size(); ++itemIdx) {
const auto& curItem = mapaxesRecord.getItem(itemIdx);
for (size_t dataItemIdx = 0; dataItemIdx < curItem->size(); ++dataItemIdx) {
result.push_back(curItem->getRawDouble(dataItemIdx));
for (size_t dataItemIdx = 0; dataItemIdx < curItem.size(); ++dataItemIdx) {
result.push_back(curItem.get< double >(dataItemIdx));
}
}
return result;
@ -287,11 +287,11 @@ void mirror_celldata(std::string keyword, Opm::DeckConstPtr deck, std::string di
return;
}
// Get data from eclipse deck
Opm::DeckRecordConstPtr specgridRecord = deck->getKeyword("SPECGRID")->getRecord(0);
const auto& specgridRecord = deck->getKeyword("SPECGRID").getRecord(0);
std::vector<int> dimensions(3);
dimensions[0] = specgridRecord->getItem("NX")->getInt(0);
dimensions[1] = specgridRecord->getItem("NY")->getInt(0);
dimensions[2] = specgridRecord->getItem("NZ")->getInt(0);
dimensions[0] = specgridRecord.getItem("NX").get< int >(0);
dimensions[1] = specgridRecord.getItem("NY").get< int >(0);
dimensions[2] = specgridRecord.getItem("NZ").get< int >(0);
std::vector<T> values = getKeywordValues(keyword, deck, T(0.0));
std::vector<T> values_mirrored(2*dimensions[0]*dimensions[1]*dimensions[2], 0.0);
// Handle the two directions differently due to ordering of the pillars.

View File

@ -182,24 +182,24 @@ namespace Opm
void GridManager::createGrdecl(Opm::DeckConstPtr deck, struct grdecl &grdecl)
{
// Extract data from deck.
const std::vector<double>& zcorn = deck->getKeyword("ZCORN")->getSIDoubleData();
const std::vector<double>& coord = deck->getKeyword("COORD")->getSIDoubleData();
const std::vector<double>& zcorn = deck->getKeyword("ZCORN").getSIDoubleData();
const std::vector<double>& coord = deck->getKeyword("COORD").getSIDoubleData();
const int* actnum = NULL;
if (deck->hasKeyword("ACTNUM")) {
actnum = &(deck->getKeyword("ACTNUM")->getIntData()[0]);
actnum = &(deck->getKeyword("ACTNUM").getIntData()[0]);
}
std::array<int, 3> dims;
if (deck->hasKeyword("DIMENS")) {
Opm::DeckKeywordConstPtr dimensKeyword = deck->getKeyword("DIMENS");
dims[0] = dimensKeyword->getRecord(0)->getItem(0)->getInt(0);
dims[1] = dimensKeyword->getRecord(0)->getItem(1)->getInt(0);
dims[2] = dimensKeyword->getRecord(0)->getItem(2)->getInt(0);
const auto& dimensKeyword = deck->getKeyword("DIMENS");
dims[0] = dimensKeyword.getRecord(0).getItem(0).get< int >(0);
dims[1] = dimensKeyword.getRecord(0).getItem(1).get< int >(0);
dims[2] = dimensKeyword.getRecord(0).getItem(2).get< int >(0);
} else if (deck->hasKeyword("SPECGRID")) {
Opm::DeckKeywordConstPtr specgridKeyword = deck->getKeyword("SPECGRID");
dims[0] = specgridKeyword->getRecord(0)->getItem(0)->getInt(0);
dims[1] = specgridKeyword->getRecord(0)->getItem(1)->getInt(0);
dims[2] = specgridKeyword->getRecord(0)->getItem(2)->getInt(0);
const auto& specgridKeyword = deck->getKeyword("SPECGRID");
dims[0] = specgridKeyword.getRecord(0).getItem(0).get< int >(0);
dims[1] = specgridKeyword.getRecord(0).getItem(1).get< int >(0);
dims[2] = specgridKeyword.getRecord(0).getItem(2).get< int >(0);
} else {
OPM_THROW(std::runtime_error, "Deck must have either DIMENS or SPECGRID.");
}
@ -214,16 +214,16 @@ namespace Opm
grdecl.dims[2] = dims[2];
if (deck->hasKeyword("MAPAXES")) {
Opm::DeckKeywordConstPtr mapaxesKeyword = deck->getKeyword("MAPAXES");
Opm::DeckRecordConstPtr mapaxesRecord = mapaxesKeyword->getRecord(0);
const auto& mapaxesKeyword = deck->getKeyword("MAPAXES");
const auto& mapaxesRecord = mapaxesKeyword.getRecord(0);
// memleak alert: here we need to make sure that C code
// can properly take ownership of the grdecl.mapaxes
// object. if it is not freed, it will result in a
// memleak...
double *cWtfMapaxes = static_cast<double*>(malloc(sizeof(double)*mapaxesRecord->size()));
for (unsigned i = 0; i < mapaxesRecord->size(); ++i)
cWtfMapaxes[i] = mapaxesRecord->getItem(i)->getSIDouble(0);
double *cWtfMapaxes = static_cast<double*>(malloc(sizeof(double)*mapaxesRecord.size()));
for (unsigned i = 0; i < mapaxesRecord.size(); ++i)
cWtfMapaxes[i] = mapaxesRecord.getItem(i).getSIDouble(0);
grdecl.mapaxes = cWtfMapaxes;
} else
grdecl.mapaxes = NULL;

View File

@ -27,9 +27,7 @@
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Deck/DeckDoubleItem.hpp>
#include <opm/parser/eclipse/Deck/DeckIntItem.hpp>
#include <opm/parser/eclipse/Deck/DeckStringItem.hpp>
#include <opm/parser/eclipse/Deck/DeckItem.hpp>
#include <iostream>
#include <fstream>
#include <string>
@ -51,13 +49,13 @@ namespace Opm
metricUnits_.reset(Opm::UnitSystem::newMETRIC());
Opm::DeckRecordConstPtr specgridRecord = deck_->getKeyword("SPECGRID")->getRecord(0);
dims_[0] = specgridRecord->getItem("NX")->getInt(0);
dims_[1] = specgridRecord->getItem("NY")->getInt(0);
dims_[2] = specgridRecord->getItem("NZ")->getInt(0);
const auto& specgridRecord = deck_->getKeyword("SPECGRID").getRecord(0);
dims_[0] = specgridRecord.getItem("NX").get< int >(0);
dims_[1] = specgridRecord.getItem("NY").get< int >(0);
dims_[2] = specgridRecord.getItem("NZ").get< int >(0);
int layersz = 8*dims_[0]*dims_[1];
const std::vector<double>& ZCORN = deck_->getKeyword("ZCORN")->getRawDoubleData();
const std::vector<double>& ZCORN = deck_->getKeyword("ZCORN").getRawDoubleData();
botmax_ = *std::max_element(ZCORN.begin(), ZCORN.begin() + layersz/2);
topmin_ = *std::min_element(ZCORN.begin() + dims_[2]*layersz - layersz/2,
ZCORN.begin() + dims_[2]*layersz);
@ -147,7 +145,7 @@ namespace Opm
new_dims_[1] = jmax - jmin;
// Filter the coord field
const std::vector<double>& COORD = deck_->getKeyword("COORD")->getRawDoubleData();
const std::vector<double>& COORD = deck_->getKeyword("COORD").getRawDoubleData();
int num_coord = COORD.size();
if (num_coord != 6*(dims_[0] + 1)*(dims_[1] + 1)) {
std::cerr << "Error! COORD size (" << COORD.size() << ") not consistent with SPECGRID\n";
@ -180,7 +178,7 @@ namespace Opm
// coordinate of the bottom surface, while zmax must be less than or
// equal to the lowest coordinate of the top surface.
int layersz = 8*dims_[0]*dims_[1];
const std::vector<double>& ZCORN = deck_->getKeyword("ZCORN")->getRawDoubleData();
const std::vector<double>& ZCORN = deck_->getKeyword("ZCORN").getRawDoubleData();
int num_zcorn = ZCORN.size();
if (num_zcorn != layersz*dims_[2]) {
std::cerr << "Error! ZCORN size (" << ZCORN.size() << ") not consistent with SPECGRID\n";
@ -263,30 +261,30 @@ namespace Opm
{
Opm::DeckPtr subDeck(new Opm::Deck);
Opm::DeckKeywordPtr specGridKw(new Opm::DeckKeyword("SPECGRID"));
Opm::DeckRecordPtr specGridRecord(new Opm::DeckRecord());
Opm::DeckKeyword specGridKw("SPECGRID");
Opm::DeckRecord specGridRecord;
Opm::DeckIntItemPtr nxItem(new Opm::DeckIntItem("NX"));
Opm::DeckIntItemPtr nyItem(new Opm::DeckIntItem("NY"));
Opm::DeckIntItemPtr nzItem(new Opm::DeckIntItem("NZ"));
Opm::DeckIntItemPtr numresItem(new Opm::DeckIntItem("NUMRES"));
Opm::DeckStringItemPtr coordTypeItem(new Opm::DeckStringItem("COORD_TYPE"));
auto nxItem = Opm::DeckItem::make< int >("NX");
auto nyItem = Opm::DeckItem::make< int >("NY");
auto nzItem = Opm::DeckItem::make< int >("NZ");
auto numresItem = Opm::DeckItem::make< int >("NUMRES");
auto coordTypeItem = Opm::DeckItem::make< std::string >("COORD_TYPE");
nxItem->push_back(new_dims_[0]);
nyItem->push_back(new_dims_[1]);
nzItem->push_back(new_dims_[2]);
numresItem->push_back(1);
coordTypeItem->push_back("F");
nxItem.push_back(new_dims_[0]);
nyItem.push_back(new_dims_[1]);
nzItem.push_back(new_dims_[2]);
numresItem.push_back(1);
coordTypeItem.push_back("F");
specGridRecord->addItem(nxItem);
specGridRecord->addItem(nyItem);
specGridRecord->addItem(nzItem);
specGridRecord->addItem(numresItem);
specGridRecord->addItem(coordTypeItem);
specGridRecord.addItem(std::move(nxItem));
specGridRecord.addItem(std::move(nyItem));
specGridRecord.addItem(std::move(nzItem));
specGridRecord.addItem(std::move(numresItem));
specGridRecord.addItem(std::move(coordTypeItem));
specGridKw->addRecord(specGridRecord);
specGridKw.addRecord(std::move(specGridRecord));
subDeck->addKeyword(specGridKw);
subDeck->addKeyword(std::move(specGridKw));
addDoubleKeyword_(subDeck, "COORD", /*dimension=*/"Length", new_COORD_);
addDoubleKeyword_(subDeck, "ZCORN", /*dimension=*/"Length", new_ZCORN_);
addIntKeyword_(subDeck, "ACTNUM", new_ACTNUM_);
@ -361,20 +359,20 @@ namespace Opm
if (data.empty())
return;
Opm::DeckKeywordPtr dataKw(new Opm::DeckKeyword(keywordName));
Opm::DeckRecordPtr dataRecord(new Opm::DeckRecord());
Opm::DeckDoubleItemPtr dataItem(new Opm::DeckDoubleItem("DATA"));
Opm::DeckKeyword dataKw(keywordName);
Opm::DeckRecord dataRecord;
auto dataItem = Opm::DeckItem::make< double >("DATA");
for (size_t i = 0; i < data.size(); ++i) {
dataItem->push_back(data[i]);
dataItem.push_back(data[i]);
}
std::shared_ptr<const Dimension> dimension = metricUnits_->parse(dimensionString);
dataItem->push_backDimension(/*active=*/dimension, /*default=*/dimension);
dataItem.push_backDimension(/*active=*/dimension, /*default=*/dimension);
dataRecord->addItem(dataItem);
dataKw->addRecord(dataRecord);
subDeck->addKeyword(dataKw);
dataRecord.addItem(std::move(dataItem));
dataKw.addRecord(std::move(dataRecord));
subDeck->addKeyword(std::move(dataKw));
}
void addIntKeyword_(Opm::DeckPtr subDeck,
@ -384,17 +382,17 @@ namespace Opm
if (data.empty())
return;
Opm::DeckKeywordPtr dataKw(new Opm::DeckKeyword(keywordName));
Opm::DeckRecordPtr dataRecord(new Opm::DeckRecord());
Opm::DeckIntItemPtr dataItem(new Opm::DeckIntItem("DATA"));
Opm::DeckKeyword dataKw(keywordName);
Opm::DeckRecord dataRecord;
auto dataItem = Opm::DeckItem::make< int >("DATA");
for (size_t i = 0; i < data.size(); ++i) {
dataItem->push_back(data[i]);
dataItem.push_back(data[i]);
}
dataRecord->addItem(dataItem);
dataKw->addRecord(dataRecord);
subDeck->addKeyword(dataKw);
dataRecord.addItem(std::move(dataItem));
dataKw.addRecord(std::move(dataRecord));
subDeck->addKeyword(std::move(dataKw));
}
template <typename T>
@ -436,7 +434,7 @@ namespace Opm
void filterDoubleField(const std::string& keyword, std::vector<double>& output_field)
{
if (deck_->hasKeyword(keyword)) {
const std::vector<double>& field = deck_->getKeyword(keyword)->getRawDoubleData();
const std::vector<double>& field = deck_->getKeyword(keyword).getRawDoubleData();
filterField(field, output_field);
}
}
@ -444,7 +442,7 @@ namespace Opm
void filterIntegerField(const std::string& keyword, std::vector<int>& output_field)
{
if (deck_->hasKeyword(keyword)) {
const std::vector<int>& field = deck_->getKeyword(keyword)->getIntData();
const std::vector<int>& field = deck_->getKeyword(keyword).getIntData();
filterField(field, output_field);
}
}

View File

@ -70,17 +70,17 @@ void EclipseGridInspector::init_()
}
if (deck_->hasKeyword("SPECGRID")) {
Opm::DeckRecordConstPtr specgridRecord =
deck_->getKeyword("SPECGRID")->getRecord(0);
logical_gridsize_[0] = specgridRecord->getItem("NX")->getInt(0);
logical_gridsize_[1] = specgridRecord->getItem("NY")->getInt(0);
logical_gridsize_[2] = specgridRecord->getItem("NZ")->getInt(0);
const auto& specgridRecord =
deck_->getKeyword("SPECGRID").getRecord(0);
logical_gridsize_[0] = specgridRecord.getItem("NX").get< int >(0);
logical_gridsize_[1] = specgridRecord.getItem("NY").get< int >(0);
logical_gridsize_[2] = specgridRecord.getItem("NZ").get< int >(0);
} else if (deck_->hasKeyword("DIMENS")) {
Opm::DeckRecordConstPtr dimensRecord =
deck_->getKeyword("DIMENS")->getRecord(0);
logical_gridsize_[0] = dimensRecord->getItem("NX")->getInt(0);
logical_gridsize_[1] = dimensRecord->getItem("NY")->getInt(0);
logical_gridsize_[2] = dimensRecord->getItem("NZ")->getInt(0);
const auto& dimensRecord =
deck_->getKeyword("DIMENS").getRecord(0);
logical_gridsize_[0] = dimensRecord.getItem("NX").get< int >(0);
logical_gridsize_[1] = dimensRecord.getItem("NY").get< int >(0);
logical_gridsize_[2] = dimensRecord.getItem("NZ").get< int >(0);
} else {
OPM_THROW(std::runtime_error, "Found neither SPECGRID nor DIMENS in file. At least one is needed.");
}
@ -100,13 +100,13 @@ std::pair<double,double> EclipseGridInspector::cellDips(int i, int j, int k) con
{
checkLogicalCoords(i, j, k);
const std::vector<double>& pillc =
deck_->getKeyword("COORD")->getSIDoubleData();
deck_->getKeyword("COORD").getSIDoubleData();
int num_pillars = (logical_gridsize_[0] + 1)*(logical_gridsize_[1] + 1);
if (6*num_pillars != int(pillc.size())) {
throw std::runtime_error("Wrong size of COORD field.");
}
const std::vector<double>& z =
deck_->getKeyword("ZCORN")->getSIDoubleData();
deck_->getKeyword("ZCORN").getSIDoubleData();
int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2];
if (8*num_cells != int(z.size())) {
throw std::runtime_error("Wrong size of ZCORN field");
@ -210,13 +210,13 @@ double EclipseGridInspector::cellVolumeVerticalPillars(int i, int j, int k) cons
// Checking parameters and obtaining values from parser.
checkLogicalCoords(i, j, k);
const std::vector<double>& pillc =
deck_->getKeyword("COORD")->getSIDoubleData();
deck_->getKeyword("COORD").getSIDoubleData();
int num_pillars = (logical_gridsize_[0] + 1)*(logical_gridsize_[1] + 1);
if (6*num_pillars != int(pillc.size())) {
throw std::runtime_error("Wrong size of COORD field.");
}
const std::vector<double>& z =
deck_->getKeyword("ZCORN")->getSIDoubleData();
deck_->getKeyword("ZCORN").getSIDoubleData();
int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2];
if (8*num_cells != int(z.size())) {
throw std::runtime_error("Wrong size of ZCORN field");
@ -278,8 +278,8 @@ std::array<double, 6> EclipseGridInspector::getGridLimits() const
throw std::runtime_error("EclipseGridInspector: Grid does not have SPECGRID, COORD, and ZCORN, can't find dimensions.");
}
std::vector<double> coord = deck_->getKeyword("COORD")->getSIDoubleData();
std::vector<double> zcorn = deck_->getKeyword("ZCORN")->getSIDoubleData();
std::vector<double> coord = deck_->getKeyword("COORD").getSIDoubleData();
std::vector<double> zcorn = deck_->getKeyword("ZCORN").getSIDoubleData();
double xmin = +DBL_MAX;
double xmax = -DBL_MAX;
@ -328,7 +328,7 @@ std::array<int, 3> EclipseGridInspector::gridSize() const
std::array<double, 8> EclipseGridInspector::cellZvals(int i, int j, int k) const
{
// Get the zcorn field.
const std::vector<double>& z = deck_->getKeyword("ZCORN")->getSIDoubleData();
const std::vector<double>& z = deck_->getKeyword("ZCORN").getSIDoubleData();
int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2];
if (8*num_cells != int(z.size())) {
throw std::runtime_error("Wrong size of ZCORN field");

View File

@ -54,8 +54,8 @@ namespace Opm
float* temperature_data = ecl_kw_get_float_ptr(temperature_kw);
// factor and offset from the temperature values given in the deck to Kelvin
double scaling = eclipse_state->getDeckUnitSystem()->parse("Temperature")->getSIScaling();
double offset = eclipse_state->getDeckUnitSystem()->parse("Temperature")->getSIOffset();
double scaling = eclipse_state->getDeckUnitSystem().parse("Temperature")->getSIScaling();
double offset = eclipse_state->getDeckUnitSystem().parse("Temperature")->getSIOffset();
for (size_t index = 0; index < simulator_state.temperature().size(); ++index) {
simulator_state.temperature()[index] = unit::convert::from((double)temperature_data[index] - offset, scaling);
@ -81,7 +81,7 @@ namespace Opm
}
float* pressure_data = ecl_kw_get_float_ptr(pressure_kw);
const double deck_pressure_unit = (eclipse_state->getDeckUnitSystem()->getType() == UnitSystem::UNIT_TYPE_METRIC) ? Opm::unit::barsa : Opm::unit::psia;
const double deck_pressure_unit = (eclipse_state->getDeckUnitSystem().getType() == UnitSystem::UNIT_TYPE_METRIC) ? Opm::unit::barsa : Opm::unit::psia;
for (size_t index = 0; index < simulator_state.pressure().size(); ++index) {
simulator_state.pressure()[index] = unit::convert::from((double)pressure_data[index], deck_pressure_unit);
}

View File

@ -565,7 +565,7 @@ public:
// finally, write the grid to disk
IOConfigConstPtr ioConfig = eclipseState->getIOConfigConst();
if (ioConfig->getWriteEGRIDFile()) {
if (eclipseState->getDeckUnitSystem()->getType() == UnitSystem::UNIT_TYPE_METRIC){
if (eclipseState->getDeckUnitSystem().getType() == UnitSystem::UNIT_TYPE_METRIC){
eclGrid->fwriteEGRID(egridFileName_.ertHandle(), true);
}else{
eclGrid->fwriteEGRID(egridFileName_.ertHandle(), false);
@ -1029,8 +1029,7 @@ void Summary::addAllWells(Opm::EclipseStateConstPtr eclipseState,
const PhaseUsage& uses)
{
eclipseState_ = eclipseState;
std::shared_ptr<const UnitSystem> unitsystem = eclipseState_->getDeckUnitSystem();
auto deckUnitType = unitsystem->getType();
auto deckUnitType = eclipseState_->getDeckUnitSystem().getType();
// TODO: Only create report variables that are requested with keywords
// (e.g. "WOPR") in the input files, and only for those wells that are
@ -1203,8 +1202,7 @@ void EclipseWriter::writeInit(const SimulatorTimerInterface &timer)
since it requires knowledge of the start time). */
{
auto eclGrid = eclipseState_->getEclipseGrid();
std::shared_ptr<const UnitSystem> unitsystem = eclipseState_->getDeckUnitSystem();
auto deckUnitType = unitsystem->getType();
auto deckUnitType = eclipseState_->getDeckUnitSystem().getType();
bool time_in_days = true;
if (deckUnitType == UnitSystem::UNIT_TYPE_LAB)
@ -1370,8 +1368,8 @@ void EclipseWriter::writeTimeStep(const SimulatorTimerInterface& timer,
ECL_RFT_FILE,
ioConfig->getFMTOUT(),
0);
std::shared_ptr<const UnitSystem> unitsystem = eclipseState_->getDeckUnitSystem();
ert_ecl_unit_enum ecl_unit = convertUnitTypeErtEclUnitEnum(unitsystem->getType());
auto unit_type = eclipseState_->getDeckUnitSystem().getType();
ert_ecl_unit_enum ecl_unit = convertUnitTypeErtEclUnitEnum(unit_type);
std::vector<WellConstPtr> wells = eclipseState_->getSchedule()->getWells(timer.reportStepNum());
eclipseWriteRFTHandler->writeTimeStep(rft_filename,
ecl_unit,
@ -1444,13 +1442,13 @@ EclipseWriter::EclipseWriter(const parameter::ParameterGroup& params,
// factor from the pressure values given in the deck to Pascals
deckToSiPressure_ =
eclipseState->getDeckUnitSystem()->parse("Pressure")->getSIScaling();
eclipseState->getDeckUnitSystem().parse("Pressure")->getSIScaling();
// factor and offset from the temperature values given in the deck to Kelvin
deckToSiTemperatureFactor_ =
eclipseState->getDeckUnitSystem()->parse("Temperature")->getSIScaling();
eclipseState->getDeckUnitSystem().parse("Temperature")->getSIScaling();
deckToSiTemperatureOffset_ =
eclipseState->getDeckUnitSystem()->parse("Temperature")->getSIOffset();
eclipseState->getDeckUnitSystem().parse("Temperature")->getSIOffset();
init(params);
}

View File

@ -38,8 +38,8 @@ namespace Opm
rock_.init(eclState, grid.number_of_cells, grid.global_cell, grid.cartdims);
if (deck->hasKeyword("DENSITY")) {
Opm::DeckRecordConstPtr densityRecord = deck->getKeyword("DENSITY")->getRecord(0);
surface_density_ = densityRecord->getItem("OIL")->getSIDouble(0);
const auto& densityRecord = deck->getKeyword("DENSITY").getRecord(0);
surface_density_ = densityRecord.getItem("OIL").getSIDouble(0);
} else {
surface_density_ = 1000.0;
OPM_MESSAGE("Input is missing DENSITY -- using a standard density of "
@ -50,13 +50,13 @@ namespace Opm
reservoir_density_ = surface_density_;
if (deck->hasKeyword("PVCDO")) {
Opm::DeckRecordConstPtr pvcdoRecord = deck->getKeyword("PVCDO")->getRecord(0);
if (pvcdoRecord->getItem("OIL_COMPRESSIBILITY")->getSIDouble(0) != 0.0 ||
pvcdoRecord->getItem("OIL_VISCOSIBILITY")->getSIDouble(0) != 0.0) {
const auto& pvcdoRecord = deck->getKeyword("PVCDO").getRecord(0);
if (pvcdoRecord.getItem("OIL_COMPRESSIBILITY").getSIDouble(0) != 0.0 ||
pvcdoRecord.getItem("OIL_VISCOSIBILITY").getSIDouble(0) != 0.0) {
OPM_MESSAGE("Compressibility effects in PVCDO are ignored.");
}
reservoir_density_ /= pvcdoRecord->getItem("OIL_VOL_FACTOR")->getSIDouble(0);
viscosity_ = pvcdoRecord->getItem("OIL_VISCOSITY")->getSIDouble(0);
reservoir_density_ /= pvcdoRecord.getItem("OIL_VOL_FACTOR").getSIDouble(0);
viscosity_ = pvcdoRecord.getItem("OIL_VISCOSITY").getSIDouble(0);
} else {
viscosity_ = 1.0 * prefix::centi*unit::Poise;
OPM_MESSAGE("Input is missing PVCDO -- using a standard viscosity of "

View File

@ -49,22 +49,22 @@ namespace Opm
phase_usage_ = phaseUsageFromDeck(deck);
// Surface densities. Accounting for different orders in eclipse and our code.
Opm::DeckKeywordConstPtr densityKeyword = deck->getKeyword("DENSITY");
int numRegions = densityKeyword->size();
const auto& densityKeyword = deck->getKeyword("DENSITY");
int numRegions = densityKeyword.size();
densities_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++regionIdx) {
if (phase_usage_.phase_used[Liquid]) {
densities_[regionIdx][phase_usage_.phase_pos[Liquid]]
= densityKeyword->getRecord(regionIdx)->getItem("OIL")->getSIDouble(0);
= densityKeyword.getRecord(regionIdx).getItem("OIL").getSIDouble(0);
}
if (phase_usage_.phase_used[Aqua]) {
densities_[regionIdx][phase_usage_.phase_pos[Aqua]]
= densityKeyword->getRecord(regionIdx)->getItem("WATER")->getSIDouble(0);
= densityKeyword.getRecord(regionIdx).getItem("WATER").getSIDouble(0);
}
if (phase_usage_.phase_used[Vapour]) {
densities_[regionIdx][phase_usage_.phase_pos[Vapour]]
= densityKeyword->getRecord(regionIdx)->getItem("GAS")->getSIDouble(0);
= densityKeyword.getRecord(regionIdx).getItem("GAS").getSIDouble(0);
}
}

View File

@ -50,9 +50,9 @@ namespace Opm
PvtConstCompr()
{}
void initFromWater(Opm::DeckKeywordConstPtr pvtwKeyword)
void initFromWater(const Opm::DeckKeyword& pvtwKeyword)
{
int numRegions = pvtwKeyword->size();
int numRegions = pvtwKeyword.size();
ref_press_.resize(numRegions);
ref_B_.resize(numRegions);
@ -61,19 +61,19 @@ namespace Opm
visc_comp_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++ regionIdx) {
Opm::DeckRecordConstPtr pvtwRecord = pvtwKeyword->getRecord(regionIdx);
const auto& pvtwRecord = pvtwKeyword.getRecord(regionIdx);
ref_press_[regionIdx] = pvtwRecord->getItem("P_REF")->getSIDouble(0);
ref_B_[regionIdx] = pvtwRecord->getItem("WATER_VOL_FACTOR")->getSIDouble(0);
comp_[regionIdx] = pvtwRecord->getItem("WATER_COMPRESSIBILITY")->getSIDouble(0);
viscosity_[regionIdx] = pvtwRecord->getItem("WATER_VISCOSITY")->getSIDouble(0);
visc_comp_[regionIdx] = pvtwRecord->getItem("WATER_VISCOSIBILITY")->getSIDouble(0);
ref_press_[regionIdx] = pvtwRecord.getItem("P_REF").getSIDouble(0);
ref_B_[regionIdx] = pvtwRecord.getItem("WATER_VOL_FACTOR").getSIDouble(0);
comp_[regionIdx] = pvtwRecord.getItem("WATER_COMPRESSIBILITY").getSIDouble(0);
viscosity_[regionIdx] = pvtwRecord.getItem("WATER_VISCOSITY").getSIDouble(0);
visc_comp_[regionIdx] = pvtwRecord.getItem("WATER_VISCOSIBILITY").getSIDouble(0);
}
}
void initFromOil(Opm::DeckKeywordConstPtr pvcdoKeyword)
void initFromOil(const DeckKeyword& pvcdoKeyword)
{
int numRegions = pvcdoKeyword->size();
int numRegions = pvcdoKeyword.size();
ref_press_.resize(numRegions);
ref_B_.resize(numRegions);
@ -82,13 +82,13 @@ namespace Opm
visc_comp_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++ regionIdx) {
Opm::DeckRecordConstPtr pvcdoRecord = pvcdoKeyword->getRecord(regionIdx);
const auto& pvcdoRecord = pvcdoKeyword.getRecord(regionIdx);
ref_press_[regionIdx] = pvcdoRecord->getItem("P_REF")->getSIDouble(0);
ref_B_[regionIdx] = pvcdoRecord->getItem("OIL_VOL_FACTOR")->getSIDouble(0);
comp_[regionIdx] = pvcdoRecord->getItem("OIL_COMPRESSIBILITY")->getSIDouble(0);
viscosity_[regionIdx] = pvcdoRecord->getItem("OIL_VISCOSITY")->getSIDouble(0);
visc_comp_[regionIdx] = pvcdoRecord->getItem("OIL_VISCOSIBILITY")->getSIDouble(0);
ref_press_[regionIdx] = pvcdoRecord.getItem("P_REF").getSIDouble(0);
ref_B_[regionIdx] = pvcdoRecord.getItem("OIL_VOL_FACTOR").getSIDouble(0);
comp_[regionIdx] = pvcdoRecord.getItem("OIL_COMPRESSIBILITY").getSIDouble(0);
viscosity_[regionIdx] = pvcdoRecord.getItem("OIL_VISCOSITY").getSIDouble(0);
visc_comp_[regionIdx] = pvcdoRecord.getItem("OIL_VISCOSIBILITY").getSIDouble(0);
}
}

View File

@ -50,9 +50,9 @@ namespace Opm
// Surface densities. Accounting for different orders in eclipse and our code.
if (deck->hasKeyword("DENSITY")) {
Opm::DeckRecordConstPtr densityRecord = deck->getKeyword("DENSITY")->getRecord(region_number);
surface_density_[phase_usage.phase_pos[PhaseUsage::Aqua]] = densityRecord->getItem("OIL")->getSIDouble(0);
surface_density_[phase_usage.phase_pos[PhaseUsage::Liquid]] = densityRecord->getItem("WATER")->getSIDouble(0);
const auto& densityRecord = deck->getKeyword("DENSITY").getRecord(region_number);
surface_density_[phase_usage.phase_pos[PhaseUsage::Aqua]] = densityRecord.getItem("OIL").getSIDouble(0);
surface_density_[phase_usage.phase_pos[PhaseUsage::Liquid]] = densityRecord.getItem("WATER").getSIDouble(0);
} else {
OPM_THROW(std::runtime_error, "Input is missing DENSITY\n");
}
@ -63,13 +63,13 @@ namespace Opm
// Water viscosity.
if (deck->hasKeyword("PVTW")) {
Opm::DeckRecordConstPtr pvtwRecord = deck->getKeyword("PVTW")->getRecord(region_number);
if (pvtwRecord->getItem("WATER_COMPRESSIBILITY")->getSIDouble(0) != 0.0 ||
pvtwRecord->getItem("WATER_VISCOSIBILITY")->getSIDouble(0) != 0.0) {
const auto& pvtwRecord = deck->getKeyword("PVTW").getRecord(region_number);
if (pvtwRecord.getItem("WATER_COMPRESSIBILITY").getSIDouble(0) != 0.0 ||
pvtwRecord.getItem("WATER_VISCOSIBILITY").getSIDouble(0) != 0.0) {
OPM_MESSAGE("Compressibility effects in PVTW are ignored.");
}
reservoir_density_[phase_usage.phase_pos[PhaseUsage::Aqua]] /= pvtwRecord->getItem("WATER_VOL_FACTOR")->getSIDouble(0);
viscosity_[phase_usage.phase_pos[PhaseUsage::Aqua]] = pvtwRecord->getItem("WATER_VISCOSITY")->getSIDouble(0);
reservoir_density_[phase_usage.phase_pos[PhaseUsage::Aqua]] /= pvtwRecord.getItem("WATER_VOL_FACTOR").getSIDouble(0);
viscosity_[phase_usage.phase_pos[PhaseUsage::Aqua]] = pvtwRecord.getItem("WATER_VISCOSITY").getSIDouble(0);
} else {
// Eclipse 100 default.
// viscosity_[phase_usage.phase_pos[PhaseUsage::Aqua]] = 0.5*Opm::prefix::centi*Opm::unit::Poise;
@ -78,14 +78,14 @@ namespace Opm
// Oil viscosity.
if (deck->hasKeyword("PVCDO")) {
Opm::DeckRecordConstPtr pvcdoRecord = deck->getKeyword("PVCDO")->getRecord(region_number);
const auto& pvcdoRecord = deck->getKeyword("PVCDO").getRecord(region_number);
if (pvcdoRecord->getItem("OIL_COMPRESSIBILITY")->getSIDouble(0) != 0.0 ||
pvcdoRecord->getItem("OIL_VISCOSIBILITY")->getSIDouble(0) != 0.0) {
if (pvcdoRecord.getItem("OIL_COMPRESSIBILITY").getSIDouble(0) != 0.0 ||
pvcdoRecord.getItem("OIL_VISCOSIBILITY").getSIDouble(0) != 0.0) {
OPM_MESSAGE("Compressibility effects in PVCDO are ignored.");
}
reservoir_density_[phase_usage.phase_pos[PhaseUsage::Liquid]] /= pvcdoRecord->getItem("OIL_VOL_FACTOR")->getSIDouble(0);
viscosity_[phase_usage.phase_pos[PhaseUsage::Liquid]] = pvcdoRecord->getItem("OIL_VISCOSITY")->getSIDouble(0);
reservoir_density_[phase_usage.phase_pos[PhaseUsage::Liquid]] /= pvcdoRecord.getItem("OIL_VOL_FACTOR").getSIDouble(0);
viscosity_[phase_usage.phase_pos[PhaseUsage::Liquid]] = pvcdoRecord.getItem("OIL_VISCOSITY").getSIDouble(0);
} else {
OPM_THROW(std::runtime_error, "Input is missing PVCDO\n");
}

View File

@ -60,13 +60,13 @@ namespace Opm
assert(int(gasvisctTables_->size()) == numRegions);
static_cast<void>(numRegions); //Silence compiler warning
gasCompIdx_ = deck->getKeyword("GCOMPIDX")->getRecord(0)->getItem("GAS_COMPONENT_INDEX")->getInt(0) - 1;
gasCompIdx_ = deck->getKeyword("GCOMPIDX").getRecord(0).getItem("GAS_COMPONENT_INDEX").get< int >(0) - 1;
gasvisctColumnName_ = "Viscosity"+std::to_string(static_cast<long long>(gasCompIdx_));
}
// density
if (deck->hasKeyword("TREF")) {
tref_ = deck->getKeyword("TREF")->getRecord(0)->getItem("TEMPERATURE")->getSIDouble(0);
tref_ = deck->getKeyword("TREF").getRecord(0).getItem("TEMPERATURE").getSIDouble(0);
}
}

View File

@ -54,25 +54,25 @@ namespace Opm
else if (deck->hasKeyword("PVDO"))
numRegions = tables->getPvdoTables().size();
else if (deck->hasKeyword("PVCDO"))
numRegions = deck->getKeyword("PVCDO")->size();
numRegions = deck->getKeyword("PVCDO").size();
else
OPM_THROW(std::runtime_error, "Oil phase was not initialized using a known way");
// viscosity
if (deck->hasKeyword("VISCREF")) {
oilvisctTables_ = &tables->getOilvisctTables();
Opm::DeckKeywordConstPtr viscrefKeyword = deck->getKeyword("VISCREF");
const auto& viscrefKeyword = deck->getKeyword("VISCREF");
assert(int(oilvisctTables_->size()) == numRegions);
assert(int(viscrefKeyword->size()) == numRegions);
assert(int(viscrefKeyword.size()) == numRegions);
viscrefPress_.resize(numRegions);
viscrefRs_.resize(numRegions);
muRef_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++regionIdx) {
DeckRecordConstPtr viscrefRecord = viscrefKeyword->getRecord(regionIdx);
viscrefPress_[regionIdx] = viscrefRecord->getItem("REFERENCE_PRESSURE")->getSIDouble(0);
viscrefRs_[regionIdx] = viscrefRecord->getItem("REFERENCE_RS")->getSIDouble(0);
const auto& viscrefRecord = viscrefKeyword.getRecord(regionIdx);
viscrefPress_[regionIdx] = viscrefRecord.getItem("REFERENCE_PRESSURE").getSIDouble(0);
viscrefRs_[regionIdx] = viscrefRecord.getItem("REFERENCE_RS").getSIDouble(0);
// temperature used to calculate the reference viscosity [K]. the
// value does not really matter if the underlying PVT object really
@ -96,13 +96,13 @@ namespace Opm
// for the first EOS. (since EOS != PVT region.)
tref_ = 0.0;
if (deck->hasKeyword("THERMEX1")) {
oilCompIdx_ = deck->getKeyword("OCOMPIDX")->getRecord(0)->getItem("OIL_COMPONENT_INDEX")->getInt(0) - 1;
oilCompIdx_ = deck->getKeyword("OCOMPIDX").getRecord(0).getItem("OIL_COMPONENT_INDEX").get< int >(0) - 1;
// always use the values of the first EOS
tref_ = deck->getKeyword("TREF")->getRecord(0)->getItem("TEMPERATURE")->getSIDouble(oilCompIdx_);
pref_ = deck->getKeyword("PREF")->getRecord(0)->getItem("PRESSURE")->getSIDouble(oilCompIdx_);
cref_ = deck->getKeyword("CREF")->getRecord(0)->getItem("COMPRESSIBILITY")->getSIDouble(oilCompIdx_);
thermex1_ = deck->getKeyword("THERMEX1")->getRecord(0)->getItem("EXPANSION_COEFF")->getSIDouble(oilCompIdx_);
tref_ = deck->getKeyword("TREF").getRecord(0).getItem("TEMPERATURE").getSIDouble(oilCompIdx_);
pref_ = deck->getKeyword("PREF").getRecord(0).getItem("PRESSURE").getSIDouble(oilCompIdx_);
cref_ = deck->getKeyword("CREF").getRecord(0).getItem("COMPRESSIBILITY").getSIDouble(oilCompIdx_);
thermex1_ = deck->getKeyword("THERMEX1").getRecord(0).getItem("EXPANSION_COEFF").getSIDouble(oilCompIdx_);
}
}

View File

@ -48,19 +48,19 @@ namespace Opm
watvisctTables_ = 0;
// stuff which we need to get from the PVTW keyword
Opm::DeckKeywordConstPtr pvtwKeyword = deck->getKeyword("PVTW");
int numRegions = pvtwKeyword->size();
const auto& pvtwKeyword = deck->getKeyword("PVTW");
int numRegions = pvtwKeyword.size();
pvtwRefPress_.resize(numRegions);
pvtwRefB_.resize(numRegions);
pvtwCompressibility_.resize(numRegions);
pvtwViscosity_.resize(numRegions);
pvtwViscosibility_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++ regionIdx) {
Opm::DeckRecordConstPtr pvtwRecord = pvtwKeyword->getRecord(regionIdx);
pvtwRefPress_[regionIdx] = pvtwRecord->getItem("P_REF")->getSIDouble(0);
pvtwRefB_[regionIdx] = pvtwRecord->getItem("WATER_VOL_FACTOR")->getSIDouble(0);
pvtwViscosity_[regionIdx] = pvtwRecord->getItem("WATER_VISCOSITY")->getSIDouble(0);
pvtwViscosibility_[regionIdx] = pvtwRecord->getItem("WATER_VISCOSIBILITY")->getSIDouble(0);
const auto& pvtwRecord = pvtwKeyword.getRecord(regionIdx);
pvtwRefPress_[regionIdx] = pvtwRecord.getItem("P_REF").getSIDouble(0);
pvtwRefB_[regionIdx] = pvtwRecord.getItem("WATER_VOL_FACTOR").getSIDouble(0);
pvtwViscosity_[regionIdx] = pvtwRecord.getItem("WATER_VISCOSITY").getSIDouble(0);
pvtwViscosibility_[regionIdx] = pvtwRecord.getItem("WATER_VISCOSIBILITY").getSIDouble(0);
}
// quantities required for the temperature dependence of the viscosity
@ -68,34 +68,34 @@ namespace Opm
if (deck->hasKeyword("VISCREF")) {
auto tables = eclipseState->getTableManager();
watvisctTables_ = &tables->getWatvisctTables();
Opm::DeckKeywordConstPtr viscrefKeyword = deck->getKeyword("VISCREF");
const auto& viscrefKeyword = deck->getKeyword("VISCREF");
assert(int(watvisctTables_->size()) == numRegions);
assert(int(viscrefKeyword->size()) == numRegions);
assert(int(viscrefKeyword.size()) == numRegions);
viscrefPress_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++ regionIdx) {
Opm::DeckRecordConstPtr viscrefRecord = viscrefKeyword->getRecord(regionIdx);
const auto& viscrefRecord = viscrefKeyword.getRecord(regionIdx);
viscrefPress_[regionIdx] = viscrefRecord->getItem("REFERENCE_PRESSURE")->getSIDouble(0);
viscrefPress_[regionIdx] = viscrefRecord.getItem("REFERENCE_PRESSURE").getSIDouble(0);
}
}
// quantities required for the temperature dependence of the density
if (deck->hasKeyword("WATDENT")) {
DeckKeywordConstPtr watdentKeyword = deck->getKeyword("WATDENT");
const auto& watdentKeyword = deck->getKeyword("WATDENT");
assert(int(watdentKeyword->size()) == numRegions);
assert(int(watdentKeyword.size()) == numRegions);
watdentRefTemp_.resize(numRegions);
watdentCT1_.resize(numRegions);
watdentCT2_.resize(numRegions);
for (int regionIdx = 0; regionIdx < numRegions; ++regionIdx) {
Opm::DeckRecordConstPtr watdentRecord = watdentKeyword->getRecord(regionIdx);
const auto& watdentRecord = watdentKeyword.getRecord(regionIdx);
watdentRefTemp_[regionIdx] = watdentRecord->getItem("REFERENCE_TEMPERATURE")->getSIDouble(0);
watdentCT1_[regionIdx] = watdentRecord->getItem("EXPANSION_COEFF_LINEAR")->getSIDouble(0);
watdentCT2_[regionIdx] = watdentRecord->getItem("EXPANSION_COEFF_QUADRATIC")->getSIDouble(0);
watdentRefTemp_[regionIdx] = watdentRecord.getItem("REFERENCE_TEMPERATURE").getSIDouble(0);
watdentCT1_[regionIdx] = watdentRecord.getItem("EXPANSION_COEFF_LINEAR").getSIDouble(0);
watdentCT2_[regionIdx] = watdentRecord.getItem("EXPANSION_COEFF_QUADRATIC").getSIDouble(0);
}
}
}

View File

@ -60,16 +60,16 @@ namespace Opm
transmult_ = rocktabTable.getColumn("PV_MULT_TRANX").vectorCopy();
}
} else if (deck->hasKeyword("ROCK")) {
Opm::DeckKeywordConstPtr rockKeyword = deck->getKeyword("ROCK");
if (rockKeyword->size() != 1) {
const auto& rockKeyword = deck->getKeyword("ROCK");
if (rockKeyword.size() != 1) {
// here it would be better not to use std::cout directly but to add the
// warning to some "warning list"...
std::cout << "Can only handle a single region in ROCK ("<<rockKeyword->size()<<" regions specified)."
std::cout << "Can only handle a single region in ROCK ("<<rockKeyword.size()<<" regions specified)."
<< " Ignoring all except for the first.\n";
}
pref_ = rockKeyword->getRecord(0)->getItem("PREF")->getSIDouble(0);
rock_comp_ = rockKeyword->getRecord(0)->getItem("COMPRESSIBILITY")->getSIDouble(0);
pref_ = rockKeyword.getRecord(0).getItem("PREF").getSIDouble(0);
rock_comp_ = rockKeyword.getRecord(0).getItem("COMPRESSIBILITY").getSIDouble(0);
} else {
std::cout << "**** warning: no rock compressibility data found in deck (ROCK or ROCKTAB)." << std::endl;
}

View File

@ -190,9 +190,9 @@ namespace Opm{
void RelpermDiagnostics::tableCheck_(EclipseStateConstPtr eclState,
DeckConstPtr deck)
std::shared_ptr< const Deck > deck)
{
const int numSatRegions = deck->getKeyword("TABDIMS")->getRecord(0)->getItem("NTSFUN")->getInt(0);
const int numSatRegions = deck->getKeyword("TABDIMS").getRecord(0).getItem("NTSFUN").get< int >(0);
const std::string msg = "Number of saturation regions: " + std::to_string(numSatRegions) + "\n";
std::cout << msg << std::endl;
streamLog_->addMessage(Log::MessageType::Info, msg);
@ -583,7 +583,7 @@ namespace Opm{
EclipseStateConstPtr eclState)
{
// get the number of saturation regions and the number of cells in the deck
const int numSatRegions = deck->getKeyword("TABDIMS")->getRecord(0)->getItem("NTSFUN")->getInt(0);
const int numSatRegions = deck->getKeyword("TABDIMS").getRecord(0).getItem("NTSFUN").get< int >(0);
unscaledEpsInfo_.resize(numSatRegions);
const auto tables = eclState->getTableManager();

View File

@ -612,7 +612,7 @@ namespace Opm
// Set saturations from SWAT/SGAS, pressure from PRESSURE.
std::vector<double>& s = state.saturation();
std::vector<double>& p = state.pressure();
const std::vector<double>& p_deck = deck->getKeyword("PRESSURE")->getSIDoubleData();
const std::vector<double>& p_deck = deck->getKeyword("PRESSURE").getSIDoubleData();
const int num_cells = number_of_cells;
if (num_phases == 2) {
if (!pu.phase_used[BlackoilPhases::Aqua]) {
@ -620,7 +620,7 @@ namespace Opm
if (!deck->hasKeyword("SGAS")) {
OPM_THROW(std::runtime_error, "initStateFromDeck(): missing SGAS keyword in 2-phase init");
}
const std::vector<double>& sg_deck = deck->getKeyword("SGAS")->getSIDoubleData();
const std::vector<double>& sg_deck = deck->getKeyword("SGAS").getSIDoubleData();
const int gpos = pu.phase_pos[BlackoilPhases::Vapour];
const int opos = pu.phase_pos[BlackoilPhases::Liquid];
for (int c = 0; c < num_cells; ++c) {
@ -634,7 +634,7 @@ namespace Opm
if (!deck->hasKeyword("SWAT")) {
OPM_THROW(std::runtime_error, "initStateFromDeck(): missing SWAT keyword in 2-phase init");
}
const std::vector<double>& sw_deck = deck->getKeyword("SWAT")->getSIDoubleData();
const std::vector<double>& sw_deck = deck->getKeyword("SWAT").getSIDoubleData();
const int wpos = pu.phase_pos[BlackoilPhases::Aqua];
const int nwpos = (wpos + 1) % 2;
for (int c = 0; c < num_cells; ++c) {
@ -652,8 +652,8 @@ namespace Opm
const int wpos = pu.phase_pos[BlackoilPhases::Aqua];
const int gpos = pu.phase_pos[BlackoilPhases::Vapour];
const int opos = pu.phase_pos[BlackoilPhases::Liquid];
const std::vector<double>& sw_deck = deck->getKeyword("SWAT")->getSIDoubleData();
const std::vector<double>& sg_deck = deck->getKeyword("SGAS")->getSIDoubleData();
const std::vector<double>& sw_deck = deck->getKeyword("SWAT").getSIDoubleData();
const std::vector<double>& sg_deck = deck->getKeyword("SGAS").getSIDoubleData();
for (int c = 0; c < num_cells; ++c) {
int c_deck = (global_cell == NULL) ? c : global_cell[c];
s[3*c + wpos] = sw_deck[c_deck];
@ -884,7 +884,7 @@ namespace Opm
face_cells, begin_face_centroids, begin_cell_centroids,
dimensions, props, deck, gravity, state);
if (deck->hasKeyword("RS")) {
const std::vector<double>& rs_deck = deck->getKeyword("RS")->getSIDoubleData();
const std::vector<double>& rs_deck = deck->getKeyword("RS").getSIDoubleData();
const int num_cells = number_of_cells;
for (int c = 0; c < num_cells; ++c) {
int c_deck = (global_cell == NULL) ? c : global_cell[c];
@ -893,7 +893,7 @@ namespace Opm
initBlackoilSurfvolUsingRSorRV(number_of_cells, props, state);
computeSaturation(props,state);
} else if (deck->hasKeyword("RV")){
const std::vector<double>& rv_deck = deck->getKeyword("RV")->getSIDoubleData();
const std::vector<double>& rv_deck = deck->getKeyword("RV").getSIDoubleData();
const int num_cells = number_of_cells;
for (int c = 0; c < num_cells; ++c) {
int c_deck = (global_cell == NULL) ? c : global_cell[c];

View File

@ -60,7 +60,7 @@ void computeMaxDp(std::map<std::pair<int, int>, double>& maxDp,
const int numPhases = initialState.numPhases();
const int numCells = UgGridHelpers::numCells(grid);
const int numPvtRegions = deck->getKeyword("TABDIMS")->getRecord(0)->getItem("NTPVT")->getInt(0);
const int numPvtRegions = deck->getKeyword("TABDIMS").getRecord(0).getItem("NTPVT").get< int >(0);
// retrieve the minimum (residual!?) and the maximum saturations for all cells
std::vector<double> minSat(numPhases*numCells);
@ -73,26 +73,26 @@ void computeMaxDp(std::map<std::pair<int, int>, double>& maxDp,
// retrieve the surface densities
std::vector<std::vector<double> > surfaceDensity(numPvtRegions);
Opm::DeckKeywordConstPtr densityKw = deck->getKeyword("DENSITY");
const auto& densityKw = deck->getKeyword("DENSITY");
for (int regionIdx = 0; regionIdx < numPvtRegions; ++regionIdx) {
surfaceDensity[regionIdx].resize(numPhases);
if (pu.phase_used[BlackoilPhases::Aqua]) {
const int wpos = pu.phase_pos[BlackoilPhases::Aqua];
surfaceDensity[regionIdx][wpos] =
densityKw->getRecord(regionIdx)->getItem("WATER")->getSIDouble(0);
densityKw.getRecord(regionIdx).getItem("WATER").getSIDouble(0);
}
if (pu.phase_used[BlackoilPhases::Liquid]) {
const int opos = pu.phase_pos[BlackoilPhases::Liquid];
surfaceDensity[regionIdx][opos] =
densityKw->getRecord(regionIdx)->getItem("OIL")->getSIDouble(0);
densityKw.getRecord(regionIdx).getItem("OIL").getSIDouble(0);
}
if (pu.phase_used[BlackoilPhases::Vapour]) {
const int gpos = pu.phase_pos[BlackoilPhases::Vapour];
surfaceDensity[regionIdx][gpos] =
densityKw->getRecord(regionIdx)->getItem("GAS")->getSIDouble(0);
densityKw.getRecord(regionIdx).getItem("GAS").getSIDouble(0);
}
}

View File

@ -260,7 +260,7 @@ void checkInitFile()
std::string keywordName(ecl_kw_get_header(eclKeyword));
if (keywordName == "PORO") {
const std::vector<double> &sourceData = deck->getKeyword("PORO")->getSIDoubleData();
const std::vector<double> &sourceData = deck->getKeyword("PORO").getSIDoubleData();
std::vector<double> resultData;
getErtData(eclKeyword, resultData);
@ -268,7 +268,7 @@ void checkInitFile()
}
if (keywordName == "PERMX") {
std::vector<double> sourceData = deck->getKeyword("PERMX")->getSIDoubleData();
std::vector<double> sourceData = deck->getKeyword("PERMX").getSIDoubleData();
std::vector<double> resultData;
getErtData(eclKeyword, resultData);

View File

@ -33,7 +33,6 @@
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Deck/DeckDoubleItem.hpp>
#include <string>
#include <iostream>
@ -48,10 +47,10 @@ BOOST_AUTO_TEST_CASE(CreateParser)
Opm::DeckConstPtr deck = parser->parseFile( filename1 , parseMode);
BOOST_CHECK_EQUAL( 6U , deck->size() );
Opm::DeckItemConstPtr actnum = deck->getKeyword("ACTNUM")->getRecord(0)->getItem(0);
const std::vector<int>& actnum_data = actnum->getIntData();
const auto& actnum = deck->getKeyword("ACTNUM").getRecord(0).getItem(0);
const std::vector<int>& actnum_data = actnum.getData< int >();
BOOST_CHECK_EQUAL( 1000U , actnum->size() );
BOOST_CHECK_EQUAL( 1000U , actnum.size() );
BOOST_CHECK_EQUAL( 1, actnum_data[0] );
BOOST_CHECK_EQUAL( 2, actnum_data[400] );
BOOST_CHECK_EQUAL( 3, actnum_data[999] );

View File

@ -88,18 +88,18 @@ BOOST_AUTO_TEST_CASE(EqualEclipseGrid) {
struct UnstructuredGrid * cgrid2;
{
struct grdecl g;
Opm::DeckKeywordConstPtr dimens = deck->getKeyword("DIMENS");
Opm::DeckKeywordConstPtr coord = deck->getKeyword("COORD");
Opm::DeckKeywordConstPtr zcorn = deck->getKeyword("ZCORN");
Opm::DeckKeywordConstPtr actnum = deck->getKeyword("ACTNUM");
const auto& dimens = deck->getKeyword("DIMENS");
const auto& coord = deck->getKeyword("COORD");
const auto& zcorn = deck->getKeyword("ZCORN");
const auto& actnum = deck->getKeyword("ACTNUM");
g.dims[0] = dimens->getRecord(0)->getItem("NX")->getInt(0);
g.dims[1] = dimens->getRecord(0)->getItem("NY")->getInt(0);
g.dims[2] = dimens->getRecord(0)->getItem("NZ")->getInt(0);
g.dims[0] = dimens.getRecord(0).getItem("NX").get< int >(0);
g.dims[1] = dimens.getRecord(0).getItem("NY").get< int >(0);
g.dims[2] = dimens.getRecord(0).getItem("NZ").get< int >(0);
g.coord = coord->getSIDoubleData().data();
g.zcorn = zcorn->getSIDoubleData().data();
g.actnum = actnum->getIntData().data();
g.coord = coord.getSIDoubleData().data();
g.zcorn = zcorn.getSIDoubleData().data();
g.actnum = actnum.getIntData().data();
g.mapaxes = NULL;