Changed Table code to use TableContainer

This commit is contained in:
Joakim Hove
2015-09-21 18:22:09 +02:00
parent 3d27454c6b
commit 2dc7d1cef7
5 changed files with 52 additions and 24 deletions

View File

@@ -102,8 +102,14 @@ namespace Opm
// pressure dependence of gas. (This does not make much sense, but it
// seems to be what the documentation for the GASVISCT keyword in the
// RM says.)
int regionIdx = getPvtRegionIndex_(pvtRegionIdx, i);
double muGasvisct = (*gasvisctTables_)[regionIdx].evaluate(gasvisctColumnName_, T[i]);
double muGasvisct;
{
const GasvisctTable& gasvisctTable = gasvisctTables_->getTable<GasvisctTable>(regionIdx);
muGasvisct = gasvisctTable.evaluate(gasvisctColumnName_, T[i]);
}
output_mu[i] = muGasvisct;
output_dmudp[i] = 0.0;
@@ -136,7 +142,11 @@ namespace Opm
// seems to be what the documentation for the GASVISCT keyword in the
// RM says.)
int regionIdx = getPvtRegionIndex_(pvtRegionIdx, i);
double muGasvisct = (*gasvisctTables_)[regionIdx].evaluate(gasvisctColumnName_, T[i]);
double muGasvisct;
{
const GasvisctTable& gasvisctTable = gasvisctTables_->getTable<GasvisctTable>(regionIdx);
muGasvisct = gasvisctTable.evaluate(gasvisctColumnName_, T[i]);
}
output_mu[i] = muGasvisct;
output_dmudp[i] = 0.0;
@@ -297,7 +307,7 @@ namespace Opm
// The PVT properties needed for temperature dependence of the viscosity. We need
// to store one value per PVT region.
const std::vector<Opm::GasvisctTable>* gasvisctTables_;
const TableContainer* gasvisctTables_;
std::string gasvisctColumnName_;
int gasCompIdx_;

View File

@@ -147,8 +147,12 @@ namespace Opm
double muRef = muRef_[regionIdx];
// compute the viscosity deviation due to temperature
double muOilvisct = (*oilvisctTables_)[regionIdx].evaluate("Viscosity", T[i]);
double alpha = muOilvisct/muRef;
double alpha;
{
const OilvisctTable& oilvisctTable = oilvisctTables_->getTable<OilvisctTable>(regionIdx);
double muOilvisct = oilvisctTable.evaluate("Viscosity", T[i]);
alpha = muOilvisct/muRef;
}
output_mu[i] *= alpha;
output_dmudp[i] *= alpha;
@@ -183,9 +187,12 @@ namespace Opm
double muRef = muRef_[regionIdx];
// compute the viscosity deviation due to temperature
double muOilvisct = (*oilvisctTables_)[regionIdx].evaluate("Viscosity", T[i]);
double alpha = muOilvisct/muRef;
double alpha;
{
const OilvisctTable& oilvisctTable = oilvisctTables_->getTable<OilvisctTable>(regionIdx);
double muOilvisct = oilvisctTable.evaluate("Viscosity", T[i]);
alpha = muOilvisct/muRef;
}
output_mu[i] *= alpha;
output_dmudp[i] *= alpha;
output_dmudr[i] *= alpha;
@@ -367,7 +374,7 @@ namespace Opm
std::vector<double> viscrefRs_;
std::vector<double> muRef_;
const std::vector<Opm::OilvisctTable>* oilvisctTables_;
const TableContainer* oilvisctTables_;
// The PVT properties needed for temperature dependence of the density. This is
// specified as one value per EOS in the manual, but we unconditionally use the

View File

@@ -142,8 +142,12 @@ namespace Opm
double muRef = pvtwViscosity_[tableIdx]/(1.0 + x + 0.5*x*x);
// compute the viscosity deviation due to temperature
double muWatvisct = (*watvisctTables_)[tableIdx].evaluate("Viscosity", T[i]);
double alpha = muWatvisct/muRef;
double alpha;
{
const WatvisctTable& watVisctTable = watvisctTables_->getTable<WatvisctTable>(tableIdx);
double muWatvisct = watVisctTable.evaluate("Viscosity", T[i]);
alpha = muWatvisct/muRef;
}
output_mu[i] *= alpha;
output_dmudp[i] *= alpha;
@@ -179,9 +183,12 @@ namespace Opm
double muRef = pvtwViscosity_[tableIdx]/(1.0 + x + 0.5*x*x);
// compute the viscosity deviation due to temperature
double muWatvisct = (*watvisctTables_)[tableIdx].evaluate("Viscosity", T[i]);
double alpha = muWatvisct/muRef;
double alpha;
{
const WatvisctTable& watVisctTable = watvisctTables_->getTable<WatvisctTable>(tableIdx);
double muWatvisct = watVisctTable.evaluate("Viscosity", T[i]);
alpha = muWatvisct/muRef;
}
output_mu[i] *= alpha;
output_dmudp[i] *= alpha;
output_dmudr[i] *= alpha;
@@ -382,7 +389,7 @@ namespace Opm
std::vector<double> pvtwViscosity_;
std::vector<double> pvtwViscosibility_;
const std::vector<Opm::WatvisctTable>* watvisctTables_;
const TableContainer* watvisctTables_;
};
}

View File

@@ -46,12 +46,13 @@ namespace Opm
const auto tables = eclipseState->getTableManager();
const auto& rocktabTables = tables->getRocktabTables();
if (rocktabTables.size() > 0) {
const auto& rocktabTable = rocktabTables.getTable<RocktabTable>(0);
if (rocktabTables.size() != 1)
OPM_THROW(std::runtime_error, "Can only handle a single region in ROCKTAB.");
p_ = rocktabTables[0].getPressureColumn();
poromult_ = rocktabTables[0].getPoreVolumeMultiplierColumn();
transmult_ = rocktabTables[0].getTransmissibilityMultiplierColumn();
p_ = rocktabTable.getPressureColumn();
poromult_ = rocktabTable.getPoreVolumeMultiplierColumn();
transmult_ = rocktabTable.getTransmissibilityMultiplierColumn();
} else if (deck->hasKeyword("ROCK")) {
Opm::DeckKeywordConstPtr rockKeyword = deck->getKeyword("ROCK");
if (rockKeyword->size() != 1) {

View File

@@ -288,15 +288,17 @@ namespace Opm
// Create Rs functions.
rs_func_.reserve(rec.size());
if (deck->hasKeyword("DISGAS")) {
const std::vector<RsvdTable>& rsvdTables = tables->getRsvdTables();
const TableContainer& rsvdTables = tables->getRsvdTables();
for (size_t i = 0; i < rec.size(); ++i) {
const RsvdTable& rsvdTable = rsvdTables.getTable<RsvdTable>(i);
const int cell = *(eqlmap.cells(i).begin());
if (rec[i].live_oil_table_index > 0) {
if (rsvdTables.size() > 0 && size_t(rec[i].live_oil_table_index) <= rsvdTables.size()) {
rs_func_.push_back(std::make_shared<Miscibility::RsVD>(props,
cell,
rsvdTables[i].getDepthColumn(),
rsvdTables[i].getRsColumn()));
rsvdTable.getDepthColumn(),
rsvdTable.getRsColumn()));
} else {
OPM_THROW(std::runtime_error, "Cannot initialise: RSVD table " << (rec[i].live_oil_table_index) << " not available.");
}
@@ -320,15 +322,16 @@ namespace Opm
rv_func_.reserve(rec.size());
if (deck->hasKeyword("VAPOIL")) {
const std::vector<RvvdTable>& rvvdTables = tables->getRvvdTables();
const TableContainer& rvvdTables = tables->getRvvdTables();
for (size_t i = 0; i < rec.size(); ++i) {
const int cell = *(eqlmap.cells(i).begin());
if (rec[i].wet_gas_table_index > 0) {
if (rvvdTables.size() > 0 && size_t(rec[i].wet_gas_table_index) <= rvvdTables.size()) {
const RvvdTable& rvvdTable = rvvdTables.getTable<RvvdTable>(i);
rv_func_.push_back(std::make_shared<Miscibility::RvVD>(props,
cell,
rvvdTables[i].getDepthColumn(),
rvvdTables[i].getRvColumn()));
rvvdTable.getDepthColumn(),
rvvdTable.getRvColumn()));
} else {
OPM_THROW(std::runtime_error, "Cannot initialise: RVVD table " << (rec[i].wet_gas_table_index) << " not available.");
}