From 38b469b3a3aec5a071a777cdcc845d2aea3e1eae Mon Sep 17 00:00:00 2001
From: yue <tkdxwb@gmail.com>
Date: Tue, 20 Oct 2020 12:55:58 +0200
Subject: [PATCH] [test][2p] new material law

---
 .../2p/implicit/adaptive/params.input         | 10 +++++++
 .../2p/implicit/cornerpoint/params.input      |  6 +++++
 .../2p/implicit/cornerpoint/spatialparams.hh  | 21 ++++++---------
 .../2p/implicit/fracture/params.input         |  6 +++++
 .../2p/implicit/fracture/spatialparams.hh     | 27 +++++--------------
 .../2p/implicit/nonisothermal/params.input    | 10 +++++++
 .../2p/implicit/rotationsymmetry/params.input |  6 +++++
 .../rotationsymmetry/spatialparams.hh         | 23 +++++-----------
 .../tracer/2ptracer/params.input              | 14 ++++++++--
 9 files changed, 72 insertions(+), 51 deletions(-)

diff --git a/test/porousmediumflow/2p/implicit/adaptive/params.input b/test/porousmediumflow/2p/implicit/adaptive/params.input
index a650f89187..3f474517c3 100644
--- a/test/porousmediumflow/2p/implicit/adaptive/params.input
+++ b/test/porousmediumflow/2p/implicit/adaptive/params.input
@@ -13,6 +13,16 @@ ClosureType = Green
 LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner
 LensUpperRight = 4.0 3.0 # [m] coordinates of the upper right lens corner
 
+[SpatialParams.Lens]
+Swr = 0.18
+VanGenuchtenAlpha = 0.00045
+VanGenuchtenN = 7.3
+
+[SpatialParams.Outer]
+Swr = 0.05
+VanGenuchtenAlpha = 0.0037
+VanGenuchtenN = 4.7
+
 [Problem]
 Name = 2padaptive # name passed to the output routines
 
diff --git a/test/porousmediumflow/2p/implicit/cornerpoint/params.input b/test/porousmediumflow/2p/implicit/cornerpoint/params.input
index b4e0ef3e37..b9ecbd3a17 100644
--- a/test/porousmediumflow/2p/implicit/cornerpoint/params.input
+++ b/test/porousmediumflow/2p/implicit/cornerpoint/params.input
@@ -10,3 +10,9 @@ Name = cc2pcornerpoint # name passed to the output routines
 Homogeneous = 0 # use a homogeneous permeablity/porosity distribution
 InjectionElement = 0 # index of the element where injection should take place
 InjectionRate = 0.1 # injection rate in kg/s
+
+[SpatialParams]
+Swr = 0.0
+Snr = 0.0
+VanGenuchtenAlpha = 0.00045
+VanGenuchtenN = 7.3;
diff --git a/test/porousmediumflow/2p/implicit/cornerpoint/spatialparams.hh b/test/porousmediumflow/2p/implicit/cornerpoint/spatialparams.hh
index 22d56066ea..f036ee2534 100644
--- a/test/porousmediumflow/2p/implicit/cornerpoint/spatialparams.hh
+++ b/test/porousmediumflow/2p/implicit/cornerpoint/spatialparams.hh
@@ -29,8 +29,7 @@
 #include <opm/parser/eclipse/Deck/Deck.hpp>
 
 #include <dumux/material/spatialparams/fv.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/regularizedvangenuchten.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
+#include <dumux/material/fluidmatrixinteractions/2p/vangenuchten.hh>
 
 namespace Dumux {
 
@@ -52,19 +51,18 @@ class TwoPCornerPointTestSpatialParams
     static constexpr int dimWorld = GridView::dimensionworld;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
-    using EffectiveLaw = RegularizedVanGenuchten<Scalar>;
+    using PcKrSwCurve = FluidMatrix::VanGenuchtenDefault<Scalar>;
 
     using DimWorldMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
 
 public:
-    using MaterialLaw = EffToAbsLaw<EffectiveLaw>;
-    using MaterialLawParams = typename MaterialLaw::Params;
     using PermeabilityType = DimWorldMatrix;
 
     TwoPCornerPointTestSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry,
                                      std::shared_ptr<const Opm::Deck> deck)
     : ParentType(gridGeometry)
     , deck_(deck)
+    , pcCurve_("SpatialParams")
     {
         homogeneous_ = getParam<bool>("Problem.Homogeneous");
 
@@ -115,9 +113,6 @@ public:
             permZ_ = permX_;
         }
 
-        // parameters for the Van Genuchten law
-        materialParams_.setVgAlpha(0.00045);
-        materialParams_.setVgn(7.3);
     }
 
     /*!
@@ -170,11 +165,11 @@ public:
      * \return The material parameters object
      */
     template<class ElementSolution>
-    const MaterialLawParams& materialLawParams(const Element& element,
-                                               const SubControlVolume& scv,
-                                               const ElementSolution& elemSol) const
+    auto fluidMatrixInteraction(const Element& element,
+                                 const SubControlVolume& scv,
+                                 const ElementSolution& elemSol) const
     {
-        return materialParams_;
+        return makeFluidMatrixInteraction(pcCurve_);
     }
 
     /*!
@@ -197,7 +192,7 @@ public:
 
 private:
     std::shared_ptr<const Opm::Deck> deck_; //!< the eclipse deck
-    MaterialLawParams materialParams_;
+    PcKrSwCurve pcCurve_;
     std::vector<Scalar> porosity_;
     std::vector<Scalar> permX_;
     std::vector<Scalar> permZ_;
diff --git a/test/porousmediumflow/2p/implicit/fracture/params.input b/test/porousmediumflow/2p/implicit/fracture/params.input
index 666a5013f6..fa2fb1f686 100644
--- a/test/porousmediumflow/2p/implicit/fracture/params.input
+++ b/test/porousmediumflow/2p/implicit/fracture/params.input
@@ -15,3 +15,9 @@ ResidualReduction = 1e-16
 
 [Newton]
 MaxRelativeShift = 1e-10
+
+[SpatialParams]
+Swr = 0.05
+Snr = 0.0
+VanGenuchtenN = 4.7
+VanGenuchtenAlpha = 0.0037
diff --git a/test/porousmediumflow/2p/implicit/fracture/spatialparams.hh b/test/porousmediumflow/2p/implicit/fracture/spatialparams.hh
index d9d13cedc8..66adff4cd3 100644
--- a/test/porousmediumflow/2p/implicit/fracture/spatialparams.hh
+++ b/test/porousmediumflow/2p/implicit/fracture/spatialparams.hh
@@ -27,9 +27,7 @@
 #define DUMUX_TWOP_FRACTURE_TEST_SPATIALPARAMS_HH
 
 #include <dumux/material/spatialparams/fv.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/regularizedvangenuchten.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
+#include <dumux/material/fluidmatrixinteractions/2p/vangenuchten.hh>
 
 #include <dumux/porousmediumflow/2p/model.hh>
 
@@ -54,27 +52,16 @@ class FractureSpatialParams
 
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
-    using EffectiveLaw = RegularizedVanGenuchten<Scalar>;
+    using PcKrSwCurve = FluidMatrix::VanGenuchtenDefault<Scalar>;
 
 public:
     //! export permeability type
     using PermeabilityType = Scalar;
-    //! export the type used for the material law
-    using MaterialLaw = EffToAbsLaw<EffectiveLaw>;
-    using MaterialLawParams = typename MaterialLaw::Params;
 
     FractureSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry)
     : ParentType(gridGeometry)
-    {
-        // residual saturations
-        materialParams_.setSwr(0.05);
-        materialParams_.setSnr(0.0);
-
-        // parameters for the Van Genuchten law
-        // alpha and n
-        materialParams_.setVgAlpha(0.0037);
-        materialParams_.setVgn(4.7);
-    }
+    , pcKrSwCurve_("SpatialParams")
+    {}
 
     /*!
      * \brief Returns the scalar intrinsic permeability \f$[m^2]\f$
@@ -97,8 +84,8 @@ public:
      *
      * \param globalPos The position at which we evaluate
      */
-    const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const
-    { return materialParams_; }
+    auto fluidMatrixInteractionAtPos (const GlobalPosition& globalPos) const
+    { return makeFluidMatrixInteraction(pcKrSwCurve_); }
 
     /*!
      * \brief Function for defining which phase is to be considered as the wetting phase.
@@ -111,7 +98,7 @@ public:
     { return FluidSystem::phase0Idx; }
 
 private:
-    MaterialLawParams materialParams_;
+    PcKrSwCurve pcKrSwCurve_;
 };
 
 } // end namespace Dumux
diff --git a/test/porousmediumflow/2p/implicit/nonisothermal/params.input b/test/porousmediumflow/2p/implicit/nonisothermal/params.input
index e30e238016..246559beea 100644
--- a/test/porousmediumflow/2p/implicit/nonisothermal/params.input
+++ b/test/porousmediumflow/2p/implicit/nonisothermal/params.input
@@ -17,3 +17,13 @@ WriteConvergence = 1 # write convergence behaviour to disk?
 SolidDensity = 2700
 SolidThermalConductivity = 2.8
 SolidHeatCapacity = 790
+
+[SpatialParams]
+FineMaterial.Swr = 0.2
+FineMaterial.Snr = 0.0
+FineMaterial.BrooksCoreyPcEntry = 1e4
+FineMaterial.BrooksCoreyLambda = 2.0
+CoarseMaterial.Swr = 0.2
+CoarseMaterial.Snr = 0.0
+CoarseMaterial.BrooksCoreyPcEntry = 1e4
+CoarseMaterial.BrooksCoreyLambda = 2.0
diff --git a/test/porousmediumflow/2p/implicit/rotationsymmetry/params.input b/test/porousmediumflow/2p/implicit/rotationsymmetry/params.input
index efe4baef16..49bd7c80bb 100644
--- a/test/porousmediumflow/2p/implicit/rotationsymmetry/params.input
+++ b/test/porousmediumflow/2p/implicit/rotationsymmetry/params.input
@@ -12,3 +12,9 @@ EnableGravity = true
 
 [Vtk]
 OutputInterval = 50
+
+[SpatialParams]
+Swr = 0.0
+Snr = 0.0
+BrooksCoreyPcEntry = 0.0
+BrooksCoreyLambda = 2.0
diff --git a/test/porousmediumflow/2p/implicit/rotationsymmetry/spatialparams.hh b/test/porousmediumflow/2p/implicit/rotationsymmetry/spatialparams.hh
index da0361a7f8..fb0346fb2c 100644
--- a/test/porousmediumflow/2p/implicit/rotationsymmetry/spatialparams.hh
+++ b/test/porousmediumflow/2p/implicit/rotationsymmetry/spatialparams.hh
@@ -24,8 +24,7 @@
 #define DUMUX_TEST_TWOP_ROTATIONALSYMMETRY_SPATIAL_PARAMS_HH
 
 #include <dumux/material/spatialparams/fv.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh>
-#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh>
+#include <dumux/material/fluidmatrixinteractions/2p/brookscorey.hh>
 
 namespace Dumux {
 
@@ -38,22 +37,14 @@ class TwoPRotationalSymmetrySpatialParams
 
     using Element = typename GridGeometry::GridView::template Codim<0>::Entity;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
+    using PcKrSwCurve = FluidMatrix::BrooksCoreyDefault<Scalar>;
 public:
-    using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>;
-    using MaterialLawParams = typename MaterialLaw::Params;
     using PermeabilityType = Scalar;
 
     TwoPRotationalSymmetrySpatialParams(std::shared_ptr<const GridGeometry> gridGeometry)
     : ParentType(gridGeometry)
-    {
-        // residual saturations
-        materialLawParams_.setSwr(0.0);
-        materialLawParams_.setSnr(0.0);
-
-        // parameters for the material law
-        materialLawParams_.setPe(0.0);
-        materialLawParams_.setLambda(2.0);
-    }
+    ,pcKrSwCurve_("SpatialParams")
+    {}
 
     PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const
     { return 1e-11; }
@@ -61,15 +52,15 @@ public:
     Scalar porosityAtPos(const GlobalPosition& globalPos) const
     { return 0.4; }
 
-    const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const
-    { return materialLawParams_; }
+    auto fluidMatrixInteractionAtPos(const GlobalPosition& globalPos) const
+    { return makeFluidMatrixInteraction(pcKrSwCurve_); }
 
     template<class FluidSystem>
     int wettingPhaseAtPos(const GlobalPosition& globalPos) const
     { return FluidSystem::phase0Idx; }
 
 private:
-    MaterialLawParams materialLawParams_;
+    const PcKrSwCurve pcKrSwCurve_;
 };
 
 } // end namespace Dumux
diff --git a/test/porousmediumflow/tracer/2ptracer/params.input b/test/porousmediumflow/tracer/2ptracer/params.input
index bf62610a95..ea81574f6b 100644
--- a/test/porousmediumflow/tracer/2ptracer/params.input
+++ b/test/porousmediumflow/tracer/2ptracer/params.input
@@ -10,8 +10,18 @@ Cells = 48 32
 [SpatialParams]
 LensLowerLeft = 1.0 2.0 # [m] coordinates of the lower left lens corner
 LensUpperRight = 4.0 3.0 # [m] coordinates of the upper right lens corner
-outerK = 1e-09 # [m^2]
-lensK = 1e-12 # [m^2]
+
+[SpatialParams.Lens]
+Swr = 0.18
+VanGenuchtenAlpha = 0.00045
+VanGenuchtenN = 7.3
+Permeability = 1e-12 # [m^2]
+
+[SpatialParams.Outer]
+Swr = 0.05
+VanGenuchtenAlpha = 0.0037
+VanGenuchtenN = 4.7
+Permeability = 1e-09 # [m^2]
 
 [Problem]
 Name = test_2ptracer_lens_tpfa
-- 
GitLab