From 16d51024fee90489dc7fe97b65a6c880bc302ef2 Mon Sep 17 00:00:00 2001
From: Kilian Weishaupt <kilian.weishaupt@iws.uni-stuttgart.de>
Date: Tue, 27 Oct 2020 18:51:35 +0100
Subject: [PATCH] [test][richardsnc] New material law

---
 .../richardsnc/implicit/params.input          | 10 +++++
 .../richardsnc/implicit/problem.hh            |  5 +--
 .../richardsnc/implicit/spatialparams.hh      | 40 ++++++-------------
 3 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/test/porousmediumflow/richardsnc/implicit/params.input b/test/porousmediumflow/richardsnc/implicit/params.input
index ebded49d42..366a917b75 100644
--- a/test/porousmediumflow/richardsnc/implicit/params.input
+++ b/test/porousmediumflow/richardsnc/implicit/params.input
@@ -25,3 +25,13 @@ AddVelocity = true
 
 [Newton]
 EnableChop = false
+
+[SpatialParams]
+Lens.Swr = 0.18
+Lens.Snr = 0.0
+Lens.VanGenuchtenAlpha = 0.00045
+Lens.VanGenuchtenN = 7.3
+OuterDomain.Swr = 0.05
+OuterDomain.Snr = 0.0
+OuterDomain.VanGenuchtenAlpha = 0.0037
+OuterDomain.VanGenuchtenN = 4.7
diff --git a/test/porousmediumflow/richardsnc/implicit/problem.hh b/test/porousmediumflow/richardsnc/implicit/problem.hh
index 4986d23678..2f2a70d73f 100644
--- a/test/porousmediumflow/richardsnc/implicit/problem.hh
+++ b/test/porousmediumflow/richardsnc/implicit/problem.hh
@@ -144,9 +144,8 @@ public:
         pumpRate_ = getParam<Scalar>("Problem.PumpRate"); // in kg/s
 
         // for initial conditions
-        const Scalar sw = 0.4; // start with 80% saturation on top
-        using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw;
-        pcTop_ = MaterialLaw::pc(this->spatialParams().materialLawParamsAtPos(this->gridGeometry().bBoxMax()), sw);
+        const Scalar sw = 0.4; // start with 40% saturation on top
+        pcTop_ = this->spatialParams().fluidMatrixInteractionAtPos(this->gridGeometry().bBoxMax()).pc(sw);
 
         // for post time step mass balance
         accumulatedSource_ = 0.0;
diff --git a/test/porousmediumflow/richardsnc/implicit/spatialparams.hh b/test/porousmediumflow/richardsnc/implicit/spatialparams.hh
index eca361a854..4e4434dd95 100644
--- a/test/porousmediumflow/richardsnc/implicit/spatialparams.hh
+++ b/test/porousmediumflow/richardsnc/implicit/spatialparams.hh
@@ -27,7 +27,6 @@
 
 #include <dumux/material/spatialparams/fv.hh>
 #include <dumux/material/fluidmatrixinteractions/2p/vangenuchten.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
 
 #include <dumux/porousmediumflow/richards/model.hh>
 
@@ -51,37 +50,20 @@ class RichardsWellTracerSpatialParams
     using Element = typename GridView::template Codim<0>::Entity;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
-    using EffectiveLaw = VanGenuchten<Scalar>;
+    using PcKrSwCurve = FluidMatrix::VanGenuchtenNoReg<Scalar>;
 
 public:
-    using MaterialLaw = EffToAbsLaw<EffectiveLaw>;
-    using MaterialLawParams = typename MaterialLaw::Params;
     // export permeability type
     using PermeabilityType = Scalar;
 
     RichardsWellTracerSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry)
-        : ParentType(gridGeometry)
+    : ParentType(gridGeometry)
+    , lensPcKrSwCurve_("SpatialParams.Lens")
+    , outerPcKrSwCurve_("SpatialParams.OuterDomain")
     {
-
         lensLowerLeft_ = getParam<GlobalPosition>("Problem.LensLowerLeft");
         lensUpperRight_ = getParam<GlobalPosition>("Problem.LensUpperRight");
 
-        // residual saturations
-        lensMaterialParams_.setSwr(0.18);
-        lensMaterialParams_.setSnr(0.0);
-        outerMaterialParams_.setSwr(0.05);
-        outerMaterialParams_.setSnr(0.0);
-
-        // parameters for the Van Genuchten law
-        // alpha and n
-        lensMaterialParams_.setVgAlpha(0.00045);
-        lensMaterialParams_.setVgn(7.3);
-        outerMaterialParams_.setVgAlpha(0.0037);
-        outerMaterialParams_.setVgn(4.7);
-
-        lensMaterialParams_.setVgn(7.3);
-        outerMaterialParams_.setVgAlpha(0.0037);
-
         lensK_ = 1e-14;
         outerK_ = 5e-12;
     }
@@ -113,13 +95,14 @@ public:
     /*!
      * \brief Returns the parameters for the material law at a given location
      *
-     * \param globalPos A global coordinate vector
+     * \param globalPos The global coordinates for the given location
      */
-    const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition &globalPos) const
+    auto fluidMatrixInteractionAtPos(const GlobalPosition& globalPos) const
     {
         if (isInLens_(globalPos))
-            return lensMaterialParams_;
-        return outerMaterialParams_;
+            return makeFluidMatrixInteraction(lensPcKrSwCurve_);
+        else
+            return makeFluidMatrixInteraction(outerPcKrSwCurve_);
     }
 
 private:
@@ -139,8 +122,9 @@ private:
 
     Scalar lensK_;
     Scalar outerK_;
-    MaterialLawParams lensMaterialParams_;
-    MaterialLawParams outerMaterialParams_;
+
+    const PcKrSwCurve lensPcKrSwCurve_;
+    const PcKrSwCurve outerPcKrSwCurve_;
 };
 
 } // end namespace Dumux
-- 
GitLab