#2270 Updated opm-flowdiagnostics-applications to 44f7e47ecdc87ba566ab4146629de49039a73b2e to fix crash

This commit is contained in:
Jacob Støren
2017-12-19 15:07:10 +01:00
parent dbd1265f31
commit 20164ec003
4 changed files with 167 additions and 2 deletions

View File

@@ -235,6 +235,14 @@ namespace Opm {
/// to particular saturation region.
const std::vector<double>& saturationPoints(const InTable& t) const;
/// Retrieve number of internal tables.
///
/// \return Number of internal tables.
ECLPropTableRawData::SizeType numTables() const
{
return this->table_.size();
}
private:
/// Single tabulated 1D interpolant.
class SingleTable

View File

@@ -37,9 +37,11 @@
#include <cassert>
#include <cmath>
#include <cstddef>
#include <exception>
#include <functional>
#include <memory>
#include <iterator>
#include <stdexcept>
#include <string>
#include <utility>
@@ -185,6 +187,11 @@ namespace {
return this->func_.saturationPoints(this->table(regID));
}
::Opm::ECLPropTableRawData::SizeType numTables() const
{
return this->func_.numTables();
}
private:
::Opm::SatFuncInterpolant func_;
@@ -298,6 +305,11 @@ namespace {
virtual std::unique_ptr<KrFunction> clone() const = 0;
::Opm::ECLPropTableRawData::SizeType numTables() const
{
return this->func_.numTables();
}
protected:
std::vector<double>
krog(const std::size_t regID,
@@ -516,6 +528,11 @@ namespace {
return this->func_.saturationPoints(this->table(regID));
}
::Opm::ECLPropTableRawData::SizeType numTables() const
{
return this->func_.numTables();
}
private:
::Opm::SatFuncInterpolant func_;
@@ -1100,6 +1117,8 @@ private:
ECLRegionMapping rmap_;
::Opm::ECLPropTableRawData::SizeType numTables_{0};
std::unique_ptr<const ECLUnits::UnitSystem> usys_internal_{nullptr};
std::unique_ptr<Oil::KrFunction> oil_{nullptr};
@@ -1120,6 +1139,8 @@ private:
const ECLInitFileData& init,
const InvalidEPBehaviour handle_invalid);
void setNumTables(const ECLPropTableRawData::SizeType ntab);
std::vector<double>
kro(const ECLGraph& G,
const ECLRestartData& rstrt,
@@ -1317,6 +1338,8 @@ Impl::initRelPermInterp(const EPSEvaluator::ActPh& active,
const ECLInitFileData& init,
const int usys)
{
this->numTables_ = 0;
const auto isThreePh =
active.oil && active.gas && active.wat;
@@ -1326,10 +1349,14 @@ Impl::initRelPermInterp(const EPSEvaluator::ActPh& active,
if (active.gas) {
this->gas_.reset(new Gas::SatFunction(tabdims, tab, usys));
this->setNumTables(this->gas_->numTables());
}
if (active.wat) {
this->wat_.reset(new Water::SatFunction(tabdims, tab, usys));
this->setNumTables(this->wat_->numTables());
}
if (active.oil) {
@@ -1358,6 +1385,8 @@ Impl::initRelPermInterp(const EPSEvaluator::ActPh& active,
this->oil_.reset(new KrModel(tabdims, tab, this->wat_->swco()));
}
this->setNumTables(this->oil_->numTables());
}
}
@@ -1375,6 +1404,26 @@ Impl::initEPS(const EPSEvaluator::ActPh& active,
this->eps_->define(G, init, ep, use3PtScaling, active, handle_invalid);
}
void Opm::ECLSaturationFunc::
Impl::setNumTables(const ECLPropTableRawData::SizeType ntab)
{
if (this->numTables_ == ECLPropTableRawData::SizeType(0)) {
// Number of tables not previously assigned. Pick 'ntab'.
this->numTables_ = ntab;
}
else if (this->numTables_ != ntab) {
// Number of tables WAS previously assigned, but this new candidate
// number (ntab) does not match the existing number of tables. This
// is an error.
throw std::invalid_argument {
"Inconsistent Number of Sat-Func Tables. Expected "
+ std::to_string(this->numTables_) + ", but got "
+ std::to_string(ntab)
};
}
}
// #####################################################################
void
@@ -1999,6 +2048,8 @@ Opm::ECLSaturationFunc::Impl::EPSEvaluator::RawTEP
Opm::ECLSaturationFunc::Impl::
extractRawTableEndPoints(const EPSEvaluator::ActPh& active) const
{
const auto zero = std::vector<double>(this->numTables_, 0.0);
auto ep = EPSEvaluator::RawTEP{};
if (active.oil) {
@@ -2013,12 +2064,22 @@ extractRawTableEndPoints(const EPSEvaluator::ActPh& active) const
ep.crit.gas = this->gas_->sgcr();
ep.smax.gas = this->gas_->sgmax();
}
else {
ep.conn.gas = zero;
ep.crit.gas = zero;
ep.smax.gas = zero;
}
if (active.wat) {
ep.conn.water = this->wat_->swco();
ep.crit.water = this->wat_->swcr();
ep.smax.water = this->wat_->swmax();
}
else {
ep.conn.water = zero;
ep.crit.water = zero;
ep.smax.water = zero;
}
return ep;
}

View File

@@ -276,6 +276,9 @@ BOOST_AUTO_TEST_CASE (AtNodes)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{ 0.8, 0.3, 0.3, 0.2 };
const auto kr_expect = std::vector<double>{ 0.5, 0.1, 0.1, 0.0 };
const auto pc_expect = std::vector<double>{ 0.0, 0.0, 0.0, 0.0 };
@@ -326,6 +329,9 @@ BOOST_AUTO_TEST_CASE (AboveAndBelow)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{ 0.80000001, 0.9, 0.199999999, 0.1 };
const auto kr_expect = std::vector<double>{ 0.5, 0.5, 0.0, 0.0 };
const auto pc_expect = std::vector<double>{ 0.0, 0.0, 0.0, 0.0 };
@@ -364,6 +370,9 @@ BOOST_AUTO_TEST_CASE (Interpolation)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{
0.2000,
0.2300,
@@ -461,6 +470,9 @@ BOOST_AUTO_TEST_CASE (InterpolationLargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{
0.0000,
0.1000,
@@ -588,6 +600,9 @@ BOOST_AUTO_TEST_CASE (AtNodes)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{ 0.8, 0.3, 0.3, 0.2 };
const auto kr_expect = std::vector<double>{ 0.5, 0.1, 0.1, 0.0 };
const auto pc_expect = std::vector<double>{ 0.0, 0.0, 0.0, 0.0 };
@@ -657,6 +672,9 @@ BOOST_AUTO_TEST_CASE (AboveAndBelow)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{ 0.80000001, 0.9, 0.199999999, 0.1 };
const auto kr_expect = std::vector<double>{ 0.5, 0.5, 0.0, 0.0 };
const auto pc_expect = std::vector<double>{ 0.0, 0.0, 0.0, 0.0 };
@@ -717,6 +735,9 @@ BOOST_AUTO_TEST_CASE (Interpolation)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{
0.2000,
0.2300,
@@ -871,6 +892,9 @@ BOOST_AUTO_TEST_CASE (InterpolationLargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
const auto s = std::vector<double>{
0.0000,
0.1000,
@@ -986,6 +1010,9 @@ BOOST_AUTO_TEST_CASE (SWFN_CritIsConn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1039,6 +1066,9 @@ BOOST_AUTO_TEST_CASE (SWFN_CritIsConn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1080,6 +1110,9 @@ BOOST_AUTO_TEST_CASE (SWFN)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1134,6 +1167,9 @@ BOOST_AUTO_TEST_CASE (SWFN_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1175,6 +1211,9 @@ BOOST_AUTO_TEST_CASE (SOF3_CritIsConn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1230,6 +1269,9 @@ BOOST_AUTO_TEST_CASE (SOF3_CritIsConn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1274,6 +1316,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOGCR_is_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1330,6 +1375,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOGCR_is_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1374,6 +1422,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOWCR_is_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1430,6 +1481,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOWCR_is_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1476,6 +1530,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SCR_Not_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1532,6 +1589,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SCR_Not_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1597,6 +1657,9 @@ BOOST_AUTO_TEST_CASE (SWFN_CritIsConn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1701,6 +1764,9 @@ BOOST_AUTO_TEST_CASE (SWFN_CritIsConn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1760,6 +1826,9 @@ BOOST_AUTO_TEST_CASE (SWFN)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1868,6 +1937,9 @@ BOOST_AUTO_TEST_CASE (SWFN_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -1924,6 +1996,9 @@ BOOST_AUTO_TEST_CASE (SOF3_CritIsConn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2030,6 +2105,9 @@ BOOST_AUTO_TEST_CASE (SOF3_CritIsConn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2092,6 +2170,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOGCR_is_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2202,6 +2283,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOGCR_is_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2264,6 +2348,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOWCR_is_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2374,6 +2461,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SOWCR_is_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2444,6 +2534,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SCR_Not_Conn)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();
@@ -2554,6 +2647,9 @@ BOOST_AUTO_TEST_CASE (SOF3_SCR_Not_Conn_LargeNodeAlloc)
createDummyUnitConverter(t.numCols - 1)
};
// Check number of tables
BOOST_CHECK_EQUAL(swfunc.numTables(), t.numTables);
using ResultColumn = Opm::SatFuncInterpolant::ResultColumn;
const auto sconn = swfunc.connateSat();