#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

@ -1,7 +1,7 @@
set(RESINSIGHT_MAJOR_VERSION 2017)
set(RESINSIGHT_MINOR_VERSION 05)
set(RESINSIGHT_INCREMENT_VERSION "2-dev.14")
set(RESINSIGHT_INCREMENT_VERSION "2-dev.15")
# https://github.com/CRAVA/crava/tree/master/libs/nrlib
@ -14,7 +14,7 @@ set(ERT_GITHUB_SHA "2e36798b43daf18c112b91aa3febbf2fccd4a95f")
set(OPM_FLOWDIAGNOSTICS_SHA "7e2be931d430796ed42efcfb5c6b67a8d5962f7f")
# https://github.com/OPM/opm-flowdiagnostics-applications
set(OPM_FLOWDIAGNOSTICS_APPLICATIONS_SHA "d76ec747cf22aa4d235f6a6c83c3a814adcf5cb2")
set(OPM_FLOWDIAGNOSTICS_APPLICATIONS_SHA "44f7e47ecdc87ba566ab4146629de49039a73b2e")
# https://github.com/OPM/opm-parser/blob/master/opm/parser/eclipse/Units/Units.hpp
# This file was moved from opm-core to opm-parser october 2016

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();