From bc98b96ec92135717c4fbadf7868f59be4b8a62f Mon Sep 17 00:00:00 2001
From: Katharina Heck <katharina.heck@iws.uni-stuttgart.de>
Date: Tue, 1 Oct 2019 18:09:45 +0200
Subject: [PATCH] [cleanup][flux] add free function for decision on right
 density depending on reference system in the base fickslaw

---
 dumux/flux/box/fickslaw.hh                |  5 ++---
 dumux/flux/ccmpfa/fickslaw.hh             |  6 +++---
 dumux/flux/cctpfa/fickslaw.hh             |  6 +++---
 dumux/flux/fickslaw.hh                    | 10 ++++++++++
 dumux/flux/staggered/freeflow/fickslaw.hh |  4 ++--
 5 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/dumux/flux/box/fickslaw.hh b/dumux/flux/box/fickslaw.hh
index a0abc14528..1c33623b51 100644
--- a/dumux/flux/box/fickslaw.hh
+++ b/dumux/flux/box/fickslaw.hh
@@ -96,7 +96,7 @@ public:
         Scalar rho(0.0);
         for (auto&& scv : scvs(fvGeometry))
         {
-            const auto massOrMolarDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scv].density(phaseIdx) : elemVolVars[scv].molarDensity(phaseIdx);
+            const Scalar massOrMolarDensity = Dumux::massOrMolarDensity(elemVolVars[scv], referenceSystem, phaseIdx);
 
             rho += massOrMolarDensity*shapeValues[scv.indexInElement()][0];
         }
@@ -153,8 +153,7 @@ public:
         const auto& shapeValues = fluxVarCache.shapeValues();
         for (auto&& scv : scvs(fvGeometry))
         {
-            const auto massOrMolarDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scv].density(phaseIdx) : elemVolVars[scv].molarDensity(phaseIdx);
-
+            const Scalar massOrMolarDensity = Dumux::massOrMolarDensity(elemVolVars[scv], referenceSystem, phaseIdx);
             rho += massOrMolarDensity*shapeValues[scv.indexInElement()][0];
         }
 
diff --git a/dumux/flux/ccmpfa/fickslaw.hh b/dumux/flux/ccmpfa/fickslaw.hh
index 2d8cc2d220..f378ba5ed2 100644
--- a/dumux/flux/ccmpfa/fickslaw.hh
+++ b/dumux/flux/ccmpfa/fickslaw.hh
@@ -250,19 +250,19 @@ private:
         // use arithmetic mean of the densities around the scvf
         if (!scvf.boundary())
         {
-            const auto rhoInside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[scvf.insideScvIdx()].density(phaseIdx) :  elemVolVars[scvf.insideScvIdx()].molarDensity(phaseIdx);
+            const auto rhoInside = Dumux::massOrMolarDensity(elemVolVars[scvf.insideScvIdx()], referenceSystem, phaseIdx);
 
             Scalar rho = rhoInside;
             for (const auto outsideIdx : scvf.outsideScvIndices())
             {
-                const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? elemVolVars[outsideIdx].density(phaseIdx) :  elemVolVars[outsideIdx].molarDensity(phaseIdx);
+                const auto rhoOutside = Dumux::massOrMolarDensity(elemVolVars[outsideIdx], referenceSystem, phaseIdx);
                 rho += rhoOutside;
             }
             return rho/(scvf.outsideScvIndices().size()+1);
 
         }
         else
-            return (referenceSystem == ReferenceSystemFormulation::massAveraged) ?elemVolVars[scvf.outsideScvIdx()].density(phaseIdx) : elemVolVars[scvf.outsideScvIdx()].molarDensity(phaseIdx);
+            return Dumux::massOrMolarDensity(elemVolVars[scvf.outsideScvIdx()], referenceSystem, phaseIdx);
     }
 
     //! Here we want to calculate the factors with which the diffusion coefficient has to be
diff --git a/dumux/flux/cctpfa/fickslaw.hh b/dumux/flux/cctpfa/fickslaw.hh
index c63c21eebf..7e3b29b377 100644
--- a/dumux/flux/cctpfa/fickslaw.hh
+++ b/dumux/flux/cctpfa/fickslaw.hh
@@ -157,9 +157,9 @@ public:
                                 : branchingFacetX(problem, element, fvGeometry, elemVolVars,
                                                    elemFluxVarsCache, scvf, xInside, tij, phaseIdx, compIdx);
 
-            const auto rhoInside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? insideVolVars.density(phaseIdx) :  insideVolVars.molarDensity(phaseIdx);
+            const auto rhoInside = Dumux::massOrMolarDensity(insideVolVars, referenceSystem, phaseIdx);
 
-            const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density(phaseIdx) :  outsideVolVars.molarDensity(phaseIdx);
+            const auto rhoOutside = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, phaseIdx);
 
             const auto rho = scvf.numOutsideScvs() == 1 ? 0.5*(rhoInside + rhoOutside)
                                                         : branchingFacetDensity(elemVolVars, scvf, phaseIdx, rhoInside);
@@ -268,7 +268,7 @@ private:
         {
             const auto outsideScvIdx = scvf.outsideScvIdx(i);
             const auto& outsideVolVars = elemVolVars[outsideScvIdx];
-            const auto rhoOutside = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density(phaseIdx) :  outsideVolVars.molarDensity(phaseIdx);
+            const auto rhoOutside = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, phaseIdx);
             rho += rhoOutside;
         }
         return rho/(scvf.numOutsideScvs()+1);
diff --git a/dumux/flux/fickslaw.hh b/dumux/flux/fickslaw.hh
index ad5aa09ed9..6946998cf2 100644
--- a/dumux/flux/fickslaw.hh
+++ b/dumux/flux/fickslaw.hh
@@ -43,6 +43,16 @@ class FicksLawImplementation;
 template <class TypeTag, ReferenceSystemFormulation referenceSystem =  ReferenceSystemFormulation::massAveraged>
 using FicksLaw = FicksLawImplementation<TypeTag, GetPropType<TypeTag, Properties::FVGridGeometry>::discMethod, referenceSystem>;
 
+/*!
+ * \ingroup Flux
+ * \brief evaluates the density to be used in Fick's law based on the reference system
+ */
+template<class VolumeVariables>
+auto massOrMolarDensity(const VolumeVariables& volVars, ReferenceSystemFormulation referenceSys, const int phaseIdx)
+{
+    return (referenceSys == ReferenceSystemFormulation::massAveraged) ? volVars.density(phaseIdx) : volVars.molarDensity(phaseIdx);
+}
+
 } // end namespace Dumux
 
 #include <dumux/flux/cctpfa/fickslaw.hh>
diff --git a/dumux/flux/staggered/freeflow/fickslaw.hh b/dumux/flux/staggered/freeflow/fickslaw.hh
index 68b33982fa..bfa8351a60 100644
--- a/dumux/flux/staggered/freeflow/fickslaw.hh
+++ b/dumux/flux/staggered/freeflow/fickslaw.hh
@@ -95,7 +95,7 @@ public:
         const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()];
 
         const Scalar insideDistance = (insideScv.dofPosition() - scvf.ipGlobal()).two_norm();
-        const Scalar insideDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? insideVolVars.density() : insideVolVars.molarDensity();
+        const Scalar insideDensity = Dumux::massOrMolarDensity(insideVolVars, referenceSystem, 0);
 
         for (int compIdx = 0; compIdx < numComponents; ++compIdx)
         {
@@ -118,7 +118,7 @@ public:
                 const auto& outsideScv = fvGeometry.scv(scvf.outsideScvIdx());
                 const Scalar outsideD = outsideVolVars.effectiveDiffusivity(0, compIdx) * outsideVolVars.extrusionFactor();
                 const Scalar outsideDistance = (outsideScv.dofPosition() - scvf.ipGlobal()).two_norm();
-                const Scalar outsideDensity = (referenceSystem == ReferenceSystemFormulation::massAveraged) ? outsideVolVars.density() : outsideVolVars.molarDensity();
+                const Scalar outsideDensity = Dumux::massOrMolarDensity(outsideVolVars, referenceSystem, 0);
 
                 const Scalar avgDensity = 0.5*(insideDensity + outsideDensity);
                 const Scalar avgD = harmonicMean(insideD, outsideD, insideDistance, outsideDistance);
-- 
GitLab