From 0c9640f2081a1537cc881071c0a63c930c807c1d Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Tue, 31 Mar 2020 10:54:09 +0200
Subject: [PATCH] [test] Integrate efftoabs test into brooks-corey and
 vangenuchten tests

---
 .../fluidmatrixinteractions/2p/CMakeLists.txt |  5 --
 .../2p/test_material_2p_brookscorey.cc        |  9 ++--
 .../2p/test_material_2p_efftoabslaw.cc        | 46 -------------------
 .../2p/test_material_2p_vangenuchten.cc       |  9 ++--
 .../2p/testmateriallawfunctions.hh            | 26 ++++++-----
 5 files changed, 26 insertions(+), 69 deletions(-)
 delete mode 100644 test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc

diff --git a/test/material/fluidmatrixinteractions/2p/CMakeLists.txt b/test/material/fluidmatrixinteractions/2p/CMakeLists.txt
index 5322dc918b..ce1b775409 100644
--- a/test/material/fluidmatrixinteractions/2p/CMakeLists.txt
+++ b/test/material/fluidmatrixinteractions/2p/CMakeLists.txt
@@ -23,8 +23,3 @@ dumux_add_test(SOURCES test_material_2p_brookscorey.cc
                         --files  ${CMAKE_SOURCE_DIR}/test/references/test_pcsw_brookscorey.dat
                                  ${CMAKE_CURRENT_BINARY_DIR}/test_pcsw_brookscorey.dat
                         --command "${CMAKE_CURRENT_BINARY_DIR}/test_material_2p_brookscorey")
-
-dumux_add_test(SOURCES test_material_2p_efftoabslaw.cc
-               LABELS unit material
-               COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py
-               CMD_ARGS --command "${CMAKE_CURRENT_BINARY_DIR}/test_material_2p_efftoabslaw")
diff --git a/test/material/fluidmatrixinteractions/2p/test_material_2p_brookscorey.cc b/test/material/fluidmatrixinteractions/2p/test_material_2p_brookscorey.cc
index 1ab7cb0a30..4a58d6037c 100644
--- a/test/material/fluidmatrixinteractions/2p/test_material_2p_brookscorey.cc
+++ b/test/material/fluidmatrixinteractions/2p/test_material_2p_brookscorey.cc
@@ -34,8 +34,10 @@ int main(int argc, char** argv) try
 {
     using namespace Dumux;
 
-    using BCReg = EffToAbsLaw<RegularizedBrooksCorey<double>>;
-    using BC = EffToAbsLaw<BrooksCorey<double>, BCReg::Params>;
+    using BCRegEff = RegularizedBrooksCorey<double>;
+    using BCEff = BrooksCorey<double>;
+    using BCReg = EffToAbsLaw<BCRegEff>;
+    using BC = EffToAbsLaw<BCEff, BCReg::Params>;
 
     // set some parameters
     BCReg::Params params;
@@ -51,7 +53,8 @@ int main(int argc, char** argv) try
     const auto sw = Dumux::linspace(0.0, 1.0, 100);
     const auto swNonReg = Dumux::linspace(BCReg::sweToSw_(params, params.thresholdSw()), BCReg::sweToSw_(params, 1.0), 100);
 
-    Test::runTest<BC, BCReg>("brookscorey", params, sw, swNonReg);
+    Test::runMaterialLawTest<BC, BCReg>("brookscorey", params, sw, swNonReg);
+    Test::runEffToAbsTest<BCRegEff, BCReg>("brookscorey-efftoabs", params, sw);
 
     return 0;
 }
diff --git a/test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc b/test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc
deleted file mode 100644
index a0dfe36b94..0000000000
--- a/test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <config.h>
-
-#include <dune/common/float_cmp.hh>
-
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/vangenuchten.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/vangenuchtenparams.hh>
-
-#include <dumux/io/container.hh>
-#include "testmateriallawfunctions.hh"
-
-
-int main(int argc, char** argv) try
-{
-    using namespace Dumux;
-
-    using VGEff = VanGenuchten<double>;
-    using VGAbs = EffToAbsLaw<VanGenuchten<double>>;
-
-
-    // set some parameters
-    VGEff::Params effParams;
-    VGAbs::Params absParams;
-    absParams.setVgAlpha(6.66e-5);
-    absParams.setVgn(3.652);
-    absParams.setVgl(0.5);
-    absParams.setSwr(0.1);
-    absParams.setSnr(0.1);
-
-    effParams.setVgAlpha(6.66e-5);
-    effParams.setVgn(3.652);
-    effParams.setVgl(0.5);
-
-    const auto sw = Dumux::linspace(0.0, 1.0, 100);
-
-    Test::runEffToAbsTest<VGEff, VGAbs>("efftoabs", effParams, absParams, sw);
-
-
-    return 0;
-}
-// error handler
-catch (const Dune::Exception& e)
-{
-    std::cerr << "Test failed with exception: " << e << std::endl;
-    return 1;
-}
diff --git a/test/material/fluidmatrixinteractions/2p/test_material_2p_vangenuchten.cc b/test/material/fluidmatrixinteractions/2p/test_material_2p_vangenuchten.cc
index 68f48216a6..3d3fae4512 100644
--- a/test/material/fluidmatrixinteractions/2p/test_material_2p_vangenuchten.cc
+++ b/test/material/fluidmatrixinteractions/2p/test_material_2p_vangenuchten.cc
@@ -31,8 +31,10 @@ int main(int argc, char** argv) try
 {
     using namespace Dumux;
 
-    using VGReg = EffToAbsLaw<RegularizedVanGenuchten<double>>;
-    using VG = EffToAbsLaw<VanGenuchten<double>, VGReg::Params>;
+    using VGRegEff = RegularizedVanGenuchten<double>;
+    using VGEff = VanGenuchten<double>;
+    using VGReg = EffToAbsLaw<VGRegEff>;
+    using VG = EffToAbsLaw<VGEff, VGReg::Params>;
 
     // set some parameters
     VGReg::Params params;
@@ -52,7 +54,8 @@ int main(int argc, char** argv) try
     const auto sw = Dumux::linspace(0.0, 1.0, 100);
     const auto swNonReg = Dumux::linspace(VGReg::sweToSw_(params, params.pcLowSw()), VGReg::sweToSw_(params, params.pcHighSw()), 100);
 
-    Test::runTest<VG, VGReg>("vangenuchten", params, sw, swNonReg);
+    Test::runMaterialLawTest<VG, VGReg>("vangenuchten", params, sw, swNonReg);
+    Test::runEffToAbsTest<VGRegEff, VGReg>("vangenuchten-efftoabs", params, sw);
 
     return 0;
 }
diff --git a/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh b/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
index c9cadca74e..79bb27d60f 100644
--- a/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
+++ b/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
@@ -75,10 +75,9 @@ void testValueEqualRange(std::string_view testName,
 
 
 template<class Law, class RegLaw>
-void runTest(const std::string& name, const typename RegLaw::Params& params,
-             const std::vector<typename Law::Scalar>& sw,
-             const std::vector<typename Law::Scalar>& swNonReg
-            )
+void runMaterialLawTest(const std::string& name, const typename RegLaw::Params& params,
+                        const std::vector<typename Law::Scalar>& sw,
+                        const std::vector<typename Law::Scalar>& swNonReg)
 {
     const auto pc = [&](){ auto pc = sw;
         for (int i = 0; i < sw.size(); ++i)
@@ -102,17 +101,20 @@ void runTest(const std::string& name, const typename RegLaw::Params& params,
 
 
 template<class EffLaw, class AbsLaw>
-void runEffToAbsTest(const std::string& name, const typename EffLaw::Params& effParams, const typename AbsLaw::Params& absParams,
-             const std::vector<typename EffLaw::Scalar>& sw)
+void runEffToAbsTest(const std::string& name, const typename AbsLaw::Params& params,
+                     const std::vector<typename AbsLaw::Scalar>& sw)
 
 {
-    testValueEqualRange("Checking 1.0 == Abs::swToSwe(1-snr)", sw, [](auto sw){ return 1.0; }, [&](auto sw) { return AbsLaw::swToSwe(absParams, 1-absParams.snr()); });
-    testValueEqualRange("Checking 0.0 == Abs::swToSwe(snr)", sw, [](auto sw){ return 0.0; }, [&](auto sw) { return AbsLaw::swToSwe(absParams, absParams.snr()); });
-    testValueEqualRange("Checking 1.0 == Abs::snToSne(1-swr)", sw, [](auto sw){ return 1.0; }, [&](auto sw) { return AbsLaw::snToSne(absParams, 1-absParams.swr()); });
-    testValueEqualRange("Checking 0.0 == Abs::snToSne(swr)", sw, [](auto sw){ return 0.0; }, [&](auto sw) { return AbsLaw::snToSne(absParams, absParams.swr()); });
+    testValueEqualRange("Checking 1.0 == Abs::swToSwe(1-snr)", sw, [](auto sw){ return 1.0; }, [&](auto sw) { return AbsLaw::swToSwe(params, 1-params.snr()); });
+    testValueEqualRange("Checking 0.0 == Abs::swToSwe(snr)", sw, [](auto sw){ return 0.0; }, [&](auto sw) { return AbsLaw::swToSwe(params, params.snr()); });
+    testValueEqualRange("Checking 1.0 == Abs::snToSne(1-swr)", sw, [](auto sw){ return 1.0; }, [&](auto sw) { return AbsLaw::snToSne(params, 1-params.swr()); });
+    testValueEqualRange("Checking 0.0 == Abs::snToSne(swr)", sw, [](auto sw){ return 0.0; }, [&](auto sw) { return AbsLaw::snToSne(params, params.swr()); });
 
-    testValueEqualRange("Checking Abs::pc(1-snr) == Eff::pc(1.0)", sw, [&](auto pc){ return AbsLaw::pc(absParams, 1-absParams.snr()); }, [&](auto pc) { return EffLaw::pc(effParams, 1.0); });
-    testValueEqualRange("Checking Abs::endPointPc == Eff::pc(1.0)", sw, [&](auto pc){ return AbsLaw::endPointPc(absParams); }, [&](auto pc) { return EffLaw::pc(absParams, 1.0); });
+    testValueEqualRange("Checking sn == sneToSn(snToSne(sn))", sw, [](auto sn){ return sn; }, [&](auto sn) { return AbsLaw::sneToSn(params, AbsLaw::snToSne(params, sn)); });
+    testValueEqualRange("Checking sw == sweToSw(swToSwe(sw))", sw, [](auto sw){ return sw; }, [&](auto sw) { return AbsLaw::sweToSw(params, AbsLaw::swToSwe(params, sw)); });
+
+    testValueEqualRange("Checking Abs::pc(1-snr) == Eff::pc(1.0)", sw, [&](auto pc){ return AbsLaw::pc(params, 1-params.snr()); }, [&](auto pc) { return EffLaw::pc(params, 1.0); });
+    testValueEqualRange("Checking Abs::endPointPc == Eff::pc(1.0)", sw, [&](auto pc){ return AbsLaw::endPointPc(params); }, [&](auto pc) { return EffLaw::pc(params, 1.0); });
 }
 
 } // end namespace Dumux
-- 
GitLab