From 31415679f73162b02254fe9ef1eca63fbfa60ed9 Mon Sep 17 00:00:00 2001 From: "Franz G. Fuchs" Date: Fri, 14 Jun 2019 11:30:20 +0200 Subject: [PATCH] defined FoamDensity, added test --- opm/parser/eclipse/Units/Units.hpp | 4 ++ src/opm/parser/eclipse/Units/UnitSystem.cpp | 5 ++ tests/parser/TableManagerTests.cpp | 77 +++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/opm/parser/eclipse/Units/Units.hpp b/opm/parser/eclipse/Units/Units.hpp index cbfd0e202..6406c40fc 100644 --- a/opm/parser/eclipse/Units/Units.hpp +++ b/opm/parser/eclipse/Units/Units.hpp @@ -269,6 +269,7 @@ namespace Opm { constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; constexpr const double Density = kilogram/cubic(meter); constexpr const double PolymerDensity = kilogram/cubic(meter); + constexpr const double FoamDensity = kilogram/cubic(meter); constexpr const double Salinity = kilogram/cubic(meter); constexpr const double Viscosity = centi*Poise; constexpr const double Timestep = day; @@ -296,6 +297,7 @@ namespace Opm { constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; constexpr const double Density = pound/cubic(feet); constexpr const double PolymerDensity = pound/stb; + constexpr const double FoamDensity = pound/GasSurfaceVolume; constexpr const double Salinity = pound/stb; constexpr const double Viscosity = centi*Poise; constexpr const double Timestep = day; @@ -323,6 +325,7 @@ namespace Opm { constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; constexpr const double Density = gram/cubic(centi*meter); constexpr const double PolymerDensity = gram/cubic(centi*meter); + constexpr const double FoamDensity = gram/cubic(centi*meter); constexpr const double Salinity = gram/cubic(centi*meter); constexpr const double Viscosity = centi*Poise; constexpr const double Timestep = hour; @@ -350,6 +353,7 @@ namespace Opm { constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; constexpr const double Density = kilogram/cubic(meter); constexpr const double PolymerDensity = kilogram/cubic(meter); + constexpr const double FoamDensity = kilogram/cubic(meter); constexpr const double Salinity = kilogram/cubic(meter); constexpr const double Viscosity = centi*Poise; constexpr const double Timestep = day; diff --git a/src/opm/parser/eclipse/Units/UnitSystem.cpp b/src/opm/parser/eclipse/Units/UnitSystem.cpp index 9f4d5c240..677902fa7 100644 --- a/src/opm/parser/eclipse/Units/UnitSystem.cpp +++ b/src/opm/parser/eclipse/Units/UnitSystem.cpp @@ -983,6 +983,7 @@ namespace { system.addDimension("ReservoirVolume", Metric::ReservoirVolume ); system.addDimension("Density" , Metric::Density ); system.addDimension("PolymerDensity", Metric::PolymerDensity); + system.addDimension("FoamDensity", Metric::FoamDensity); system.addDimension("Salinity", Metric::Salinity); system.addDimension("Viscosity" , Metric::Viscosity); system.addDimension("Timestep" , Metric::Timestep); @@ -1013,6 +1014,7 @@ namespace { system.addDimension("ReservoirVolume", Field::ReservoirVolume ); system.addDimension("Density", Field::Density ); system.addDimension("PolymerDensity", Field::PolymerDensity); + system.addDimension("FoamDensity", Field::FoamDensity); system.addDimension("Salinity", Field::Salinity); system.addDimension("Viscosity", Field::Viscosity); system.addDimension("Timestep", Field::Timestep); @@ -1043,6 +1045,7 @@ namespace { system.addDimension("ReservoirVolume", Lab::ReservoirVolume ); system.addDimension("Density", Lab::Density ); system.addDimension("PolymerDensity", Lab::PolymerDensity); + system.addDimension("FoamDensity", Lab::FoamDensity); system.addDimension("Salinity", Lab::Salinity); system.addDimension("Viscosity", Lab::Viscosity); system.addDimension("Timestep", Lab::Timestep); @@ -1072,6 +1075,7 @@ namespace { system.addDimension("ReservoirVolume", PVT_M::ReservoirVolume ); system.addDimension("Density" , PVT_M::Density ); system.addDimension("PolymerDensity", PVT_M::PolymerDensity); + system.addDimension("FoamDensity", PVT_M::FoamDensity); system.addDimension("Salinity", PVT_M::Salinity); system.addDimension("Viscosity" , PVT_M::Viscosity); system.addDimension("Timestep" , PVT_M::Timestep); @@ -1100,6 +1104,7 @@ namespace { system.addDimension("ReservoirVolume", 1.0); system.addDimension("Density" , 1.0); system.addDimension("PolymerDensity", 1.0); + system.addDimension("FoamDensity", 1.0); system.addDimension("Salinity", 1.0); system.addDimension("Viscosity" , 1.0); system.addDimension("Timestep" , 1.0); diff --git a/tests/parser/TableManagerTests.cpp b/tests/parser/TableManagerTests.cpp index afb017bc8..fb370d07f 100644 --- a/tests/parser/TableManagerTests.cpp +++ b/tests/parser/TableManagerTests.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -490,6 +491,82 @@ BOOST_AUTO_TEST_CASE(PlyadsTable_Tests) { } } +BOOST_AUTO_TEST_CASE(FoamadsTable_Tests) { + { + const char *correctDeckData = + "TABDIMS\n" + "/\n" + "FOAMADS\n" + "0.00 0.0 \n" + "0.25 0.000010\n" + "0.50 0.000018\n" + "0.75 0.000023\n" + "1.00 0.000027\n" + "1.25 0.000030\n" + "1.50 0.000030\n" + "1.75 0.000030\n" + "2.00 0.000030\n" + "3.00 0.000030 /\n"; + Opm::Parser parser; + auto deck = parser.parseString(correctDeckData); + const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); + Opm::FoamadsTable foamadsTable(foamadsKeyword.getRecord(0).getItem(0)); + + + BOOST_CHECK_CLOSE(foamadsTable.getFoamConcentrationColumn().front(), 0.0, 1e-6); + BOOST_CHECK_CLOSE(foamadsTable.getFoamConcentrationColumn().back(), 3.0, 1e-6); + + BOOST_CHECK_CLOSE(foamadsTable.getAdsorbedFoamColumn().front(), 0.0, 1e-6); + BOOST_CHECK_CLOSE(foamadsTable.getAdsorbedFoamColumn().back(), 0.000030, 1e-6); + } + + { + // first column not strictly monotonic + const char *incorrectDeckData = + "TABDIMS\n" + "/\n" + "FOAMADS\n" + "0.00 0.0 \n" + "0.00 0.000010\n" + "0.50 0.000018\n" + "0.75 0.000023\n" + "1.00 0.000027\n" + "1.25 0.000030\n" + "1.50 0.000030\n" + "1.75 0.000030\n" + "2.00 0.000030\n" + "3.00 0.000030 /\n"; + Opm::Parser parser; + auto deck = parser.parseString(incorrectDeckData); + const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); + + BOOST_CHECK_THROW(Opm::FoamadsTable(foamadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); + } + + { + // second column not monotonic + const char *incorrectDeckData = + "TABDIMS\n" + "/\n" + "FOAMADS\n" + "0.00 0.0 \n" + "0.25 0.000010\n" + "0.50 0.000018\n" + "0.75 0.000023\n" + "1.00 0.000027\n" + "1.25 0.000030\n" + "1.50 0.000030\n" + "1.75 0.000030\n" + "2.00 0.000030\n" + "3.00 0.000029 /\n"; + Opm::Parser parser; + auto deck = parser.parseString(incorrectDeckData); + const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); + + BOOST_CHECK_THROW(Opm::FoamadsTable(foamadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); + } +} +