From 26ea8a8e658bd8608f43e2c5ee96fac50407db88 Mon Sep 17 00:00:00 2001
From: tkurz <theresa.kurz@iws.uni-stuttgart.de>
Date: Wed, 25 Mar 2020 15:39:23 +0100
Subject: [PATCH] [test] Add test for effToAbsLaw

---
 .../fluidmatrixinteractions/2p/CMakeLists.txt |  5 ++
 .../2p/test_material_2p_efftoabslaw.cc        | 46 +++++++++++++++++++
 .../2p/testmateriallawfunctions.hh            | 15 ++++++
 3 files changed, 66 insertions(+)
 create 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 ce1b775409..5322dc918b 100644
--- a/test/material/fluidmatrixinteractions/2p/CMakeLists.txt
+++ b/test/material/fluidmatrixinteractions/2p/CMakeLists.txt
@@ -23,3 +23,8 @@ 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_efftoabslaw.cc b/test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc
new file mode 100644
index 0000000000..a0dfe36b94
--- /dev/null
+++ b/test/material/fluidmatrixinteractions/2p/test_material_2p_efftoabslaw.cc
@@ -0,0 +1,46 @@
+#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/testmateriallawfunctions.hh b/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
index da71bebadc..f5f52d0922 100644
--- a/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
+++ b/test/material/fluidmatrixinteractions/2p/testmateriallawfunctions.hh
@@ -99,6 +99,21 @@ void runTest(const std::string& name, const typename RegLaw::Params& params,
     writeContainerToFile(pc, "test_pcsw_" + name + ".dat", 100);
 }
 
+
+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)
+
+{
+    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 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); });
+}
+
 } // end namespace Dumux
 
 #endif
-- 
GitLab