diff --git a/src/opm/io/eclipse/ERst.cpp b/src/opm/io/eclipse/ERst.cpp index 482572bb8..1eab5d1bd 100644 --- a/src/opm/io/eclipse/ERst.cpp +++ b/src/opm/io/eclipse/ERst.cpp @@ -166,14 +166,7 @@ int ERst::getArrayIndex(const std::string& name, int number) const std::string message = "Trying to get vector " + name + " from non existing sequence " + std::to_string(number); OPM_THROW(std::invalid_argument, message); } - - auto search = reportLoaded.find(number); - - if (!search->second) { - std::string message = "Data not loaded for sequence " + std::to_string(number); - OPM_THROW(std::runtime_error, message); - } - + auto range_it = arrIndexRange.find(number); std::pair indexRange = range_it->second; diff --git a/tests/test_ERst.cpp b/tests/test_ERst.cpp index 7bf3c6d23..f155feb29 100644 --- a/tests/test_ERst.cpp +++ b/tests/test_ERst.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include @@ -74,7 +75,11 @@ bool operator==(const std::vector & t1, const std::vector & t2) return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); } - +template +T calcSum(const std::vector& x) +{ + return std::accumulate(x.begin(), x.end(), T(0)); +} BOOST_AUTO_TEST_CASE(TestERst_1) { @@ -82,6 +87,27 @@ BOOST_AUTO_TEST_CASE(TestERst_1) { std::string testFile="SPE1_TESTCASE.UNRST"; std::vector refReportStepNumbers= {1,2,5,10,15,25,50,100,120}; + std::vector ref_zwel_10 = {"PROD","","","INJ","",""}; + std::vector ref_zwel_25 = {"PROD","","","INJ","",""}; + + std::vector ref_icon_10 = {1,10,10,3,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,1,1, + 1,1,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0}; + + std::vector ref_icon_25 = {1,10,10,3,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,1,1, + 1,1,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0}; + + std::vector ref_logih_10 = {true,true,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, + false,false,false,false,false,false}; + + + std::vector ref_logih_25 = ref_logih_10; + ERst rst1(testFile); rst1.loadReportStepNumber(5); @@ -107,13 +133,6 @@ BOOST_AUTO_TEST_CASE(TestERst_1) { BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("LOGIHEAD",0) , std::invalid_argument ); BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("ZWEL",0) , std::invalid_argument ); - // report step number exists, but data is not loaded. Should throw exception - BOOST_CHECK_THROW(std::vector vect1=rst1.getRst("ICON",10) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect2=rst1.getRst("PRESSURE",10) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect3=rst1.getRst("XGRP",10) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("LOGIHEAD",10) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("ZWEL",10) , std::runtime_error ); - // calling getRst member function with wrong type, should throw exception BOOST_CHECK_THROW(std::vector vect1=rst1.getRst("ICON",5) , std::runtime_error ); @@ -122,15 +141,46 @@ BOOST_AUTO_TEST_CASE(TestERst_1) { BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("LOGIHEAD",5), std::runtime_error ); BOOST_CHECK_THROW(std::vector vect5=rst1.getRst("ZWEL",5), std::runtime_error ); + // report step number exists, but data is not loaded. Vector should in this case + // be loaded on demand. Hence not throwing an exception + + std::vector vect1=rst1.getRst("ICON",10); + std::vector vect2=rst1.getRst("PRESSURE",10); + std::vector vect3=rst1.getRst("XGRP",10); + std::vector vect4=rst1.getRst("LOGIHEAD",10); + std::vector vect5=rst1.getRst("ZWEL",10); + + BOOST_CHECK_EQUAL(ref_icon_10==vect1, true); + + BOOST_CHECK_EQUAL(vect2.size()==300, true); + BOOST_REQUIRE_CLOSE (calcSum(vect2), 1.68803e+06, 1e-3); + + BOOST_CHECK_EQUAL(vect3.size()==360, true); + BOOST_REQUIRE_CLOSE (calcSum(vect3), 1.81382e+08, 1e-3); + + BOOST_CHECK_EQUAL(ref_logih_10==vect4, true); + BOOST_CHECK_EQUAL(ref_zwel_10==vect5, true); + rst1.loadReportStepNumber(25); - std::vector vect1 = rst1.getRst("ICON",25); - std::vector vect2 = rst1.getRst("PRESSURE",25); - std::vector vect3 = rst1.getRst("XGRP",25); - std::vector vect4 = rst1.getRst("LOGIHEAD",25); - std::vector vect5 = rst1.getRst("ZWEL",25); -} + vect1 = rst1.getRst("ICON",25); + vect2 = rst1.getRst("PRESSURE",25); + vect3 = rst1.getRst("XGRP",25); + vect4 = rst1.getRst("LOGIHEAD",25); + vect5 = rst1.getRst("ZWEL",25); + BOOST_CHECK_EQUAL(ref_icon_25==vect1, true); + + BOOST_CHECK_EQUAL(vect2.size()==300, true); + BOOST_REQUIRE_CLOSE (calcSum(vect2), 1.92496e+06, 1e-3); + + BOOST_CHECK_EQUAL(vect3.size()==360, true); + BOOST_REQUIRE_CLOSE (calcSum(vect3), 4.58807e+08, 1e-3); + + BOOST_CHECK_EQUAL(ref_logih_25==vect4, true); + BOOST_CHECK_EQUAL(ref_zwel_25==vect5, true); + +} static void readAndWrite(EclOutput& eclTest, ERst& rst1, const std::string& name, int seqnum, @@ -919,4 +969,3 @@ BOOST_AUTO_TEST_CASE(Formatted) BOOST_AUTO_TEST_SUITE_END() -