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